- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须使用java实现伸展树(Splay Tree)结构。给定一个名为 Node 的类,它具有:
我的作业包括创建“插入”方法。
我已经尝试了一些策略,但到目前为止还没有奏效,我试图通过获取代码而不是获取一些可以帮助我的想法来获得一些帮助。
所以我首先的策略是实现递归方法,像二叉搜索树一样插入信息,然后展开(使用伪代码):
Node splay(Node a, int x):
if a.height >=3:{
if (there is a node from "a" with the structure of zigzig or zigzag with x info){
return a(do the rotation)}
}
else:{
return Node(splay(a.left,x),a.info,splay(a.right,x))}
我不完全确定这个想法是否适用于锯齿形和锯齿形。
另一方面,我没有节点父节点的信息,所以我在如何进行之字形和锯齿形旋转方面遇到了麻烦,我尝试使用 a.height==1,但这会遇到麻烦
最佳答案
您在此处描述的策略称为自下而上展开,并且是查看所描述的展开的最常见方式。您执行正常的查找来查找所需的节点,然后应用 playbook 中的规则(zig、zig-zag 或 zig-zig)将该节点拉到树的根部。
还有另一种策略可以用来实现展开,称为自上而下展开,它通过在从根节点遍历到目标节点时 reshape 树的形状来实现展开。您可以通过将树分成两棵树(称为左树和右树)来实现展开操作,然后通过智能地将这些树组合在一起来完成展开。这不需要使用递归,并且不需要父指针。您可以在 section 4 of Sleator and Tarjan's original paper on splay trees 中找到有关如何执行此操作的详细信息。 。那里的伪代码不能一对一地翻译成 Java(例如,他们有一个名为“null”的显式节点,他们假设您可以调整其左右子节点),但基本思想一次也不错您已经查看了他们的数据并完成了案例。
关于java - 自动调整伸展树(Splay Tree)的旋转策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711859/
平衡树 \(\tt{Treap}\) & \(\tt{Splay}\) 壹.单旋 \(\tt{Treap}\) 首先了解 \(\tt{BST}\) 非常好用的东西,但是数据可以把它卡成一
我是数据结构的初学者。我正在尝试为带有 splay 树的范围函数编写一些伪代码:Range(S, A, B),它将 S 更改为其键值 C 满足 A ≤ 的所有成员的集合C ≤ B。我知道伸展树(Spl
由于 splay tree 是一种不平衡二叉搜索树 ( brilliant.org/wiki/splay-tree ),它不能保证最大为 O(log(n)) 的高度。因此,我认为它不能保证 O(log
我有 2 个关于八角树的问题: 1。删除节点 我正在使用的书是这样说的:''当删除键 k 时,我们展开被删除的节点 w 的父节点。删除 8 的示例: 但是,我正在做的是:如果删除的节点不是根节点,我展
我正在研究伸展树(Splay Tree)的右旋转方法。当我尝试运行程序时,我不断收到空指针异常,但我不确定为什么。这是我的树 5 / 2 / 1 这是我得到空指
我正在尝试为伸展树(Splay Tree)编写 C++ 模板结构,但是当我尝试测试代码时,我得到了非常奇怪的结果。 这是我的模板代码: template struct splaytree {
我试图了解摊销的复杂性并在网上进行了几次搜索,但我还找不到好的资源。 那么谁能解释一下什么是摊销复杂度以及它如何在 splay 树中每个操作变为 O(lg n)? 最佳答案 对伸展树(Splay Tr
我不明白展开是如何工作的。 我无法理解的部分是我们如何知道 a: i) zig ii) zig-zag 或 iii) zig-zig 必须完成。 如果我理解正确的话,这与路径中的当前节点有关。 如果它
您会在生产环境中的哪些地方使用 splay-tree。我指的是真实生活的例子。 我正在考虑使用尝试和拉伸(stretch)树实现自动完成。对于大型数据集,从节点 x 到叶子遍历 trie 以返回结果并
我正在尝试自下而上地实现递归伸展树(Splay Tree)。我向下递归到需要展开的节点,然后找到该节点的父节点和祖父节点。然后,我可以根据情况进行之字形或之字形。问题是完成后,我将已经张开一次的节点返
我已经实现了几个 splay tree算法。 比较它们的最佳方式是什么? 添加随机节点时比较执行时间是否是一个好的开始? 我还实现了一个二叉搜索树,用于跟踪每个节点的访问量。我编写了一个 optimi
我一直在研究 Splay 树,因为我想实现一个。目前,我对红黑树、AVL 树、跳表和其他更简单的数据结构有一些“自学”经验。我想实现我的第一个 splay 树,但如果可能的话,我想要一个递归实现(我喜
前言 如果我们需要观察程序运行过程中,某一个变量、某一个序列的变化情况,你可以在修改的地方打断点 debug,或者直接在需要的地方输出就行了。 但是对于一些树形结构,我们不好将其直观地呈现出来,常
展开树插入/删除可以用不同的方式完成。一种流行的方法是插入 key 并将其展开到根。但是我读过还有一种不同的方法,这个想法是 拆分 它分成两棵树,左边的树有值插入键。备用删除方法也是如此,将要删除的键
由于 splay 树用于缓存,我想知道当我想有效缓存时,Splay Tree 比 HashTable 有什么优势? 我什么时候应该更喜欢 splay 树而不是哈希表? 我想这是一个比 BST 更专业的
例如,我有一个这样的文件夹结构: src └─test ├─java └─com └─google └─test
问题是,当我单击树列表父元素时,它不会像在树面板中的 DoubleClick 上展开那样展开。任何人都可以帮助我找到我应该做什么来实现这一目标?在这张图片中,当我单击父节点时,它不会像我们看到的那样展
我知道如何捕获节点上的点击: // Define action when a node was clicked. $('#mytree').on("select_node.jstree
我正在寻找有人解释 Puppet 配置中 splay 和 splaylimit 的用法。 Puppet 站点本身的文档至少可以说是有限的。我正遭受主控上的惊群攻击,即多个代理同时向该代理敲击其目录,直
我必须使用java实现伸展树(Splay Tree)结构。给定一个名为 Node 的类,它具有: 左、右 child 信息(整数) 节点的高度 我的作业包括创建“插入”方法。 我已经尝试了一些策略,但
我是一名优秀的程序员,十分优秀!