【发布时间】:2015-04-01 08:27:40
【问题描述】:
我想尝试在 Splay 树上执行最坏情况的序列。
但是 Splay-trees 的最坏情况序列是什么? 给定插入树的键,有什么方法可以轻松计算这个序列?
任何人都可以帮助我吗?
【问题讨论】:
标签: data-structures time-complexity binary-search-tree splay-tree
我想尝试在 Splay 树上执行最坏情况的序列。
但是 Splay-trees 的最坏情况序列是什么? 给定插入树的键,有什么方法可以轻松计算这个序列?
任何人都可以帮助我吗?
【问题讨论】:
标签: data-structures time-complexity binary-search-tree splay-tree
除非有人纠正我,否则我会说“没有人真正知道展开树上最坏的一系列操作是什么,或者这种情况下的复杂性是什么。”
虽然我们确实知道许多关于伸展树效率的结果,但我们实际上对如何限制伸展树的时间复杂度知之甚少。有一个名为动态最优性猜想的猜想,它说在最坏的情况下,任何足够长的展开树上的一系列操作都将花费不超过一个恒定量的时间,而不是可能的最佳自我在该系列操作上调整二叉搜索树。我们在试图证明这一点时遇到的挑战之一是,没有人真正知道如何确定所有输入的最佳 BST 的成本。另一个是很难找到展开树的各种输入组合的运行时上限 - 到目前为止,没有人知道将展开树视为双端队列是否需要 O(n) 时间!
希望这会有所帮助!
【讨论】:
我不知道五年多后的尝试对你有没有用,但是抱歉,我最近才获得了 CS 硕士 :-) 在那之后,我完全玩了带着你的问题。 考虑序列 S(3,2)(如果你绘制它应该很明显 S(m,n) 通常如何工作): S(3,2)=[5,13,6,14,3,15,4 ,16,1,17,2,18,11,19,12,20,9,21,10,22,7,23,8,24]。 Splay 在这种序列类型上非常糟糕,以至于“贪婪的未来”算法(参见 Demaine)的竞争比率 r 是 S[infty,infty]=2。即使 Greedy Future 也不是完全最优的,我也永远无法超过 2,我可以减少一些操作。 (图例:黑色、灰色、蓝色:S(7,4);紫色、橙色、红色:Splay 也必须访问这些点。如 Demaine 公式所示。) 但请注意,您的问题定义不明确!如果您要求 绝对 最坏的序列,那么例如位反转序列,任何树算法都需要 O(n log n) 。但是,如果您要求模板类型的答案中暗示的竞争比率 r,那么确实没有人知道(但我会押注 r=2,见上文)。 请随时给我发电子邮件了解详细信息,我很容易用谷歌搜索。
【讨论】: