【问题标题】:When is a treap useful?什么时候陷阱有用?
【发布时间】:2015-03-15 16:10:57
【问题描述】:
在什么样的情况下使用treap是最佳的数据结构?我一直在寻找这方面的答案,但还没有真正找到任何具体的东西。
还有另一个stackoverflow 问题询问何时使用treap,但没有给出真实世界的示例。
最常见的优势似乎是它们比例如红黑树更容易实现,但几乎每个人都使用预先编写的实现,所以它似乎并不相关。
【问题讨论】:
标签:
data-structures
treap
【解决方案1】:
这是在随机算法类中用作示例的最佳数据结构。
好吧,抛开轻率不谈,Aragon 和 Seidel 提出的狭隘优势包括以下几点。
它们很简单。是的,你的标准库可能有一个可用的红黑树,但它可能没有提供足够的钩子来完成一些可以用二叉搜索树完成的有趣的事情(例如,订单统计)。拆分和合并也简单得多。
假设优先级是通过对键进行散列计算的,它们使用的空间比红黑树略少。在实践中,如果红黑树可以窃取颜色的指针位,这并不重要。
它们可能比红黑树更快。无论哪种方式,我都没有搜索过证据。
最大的缺点是性能保证仅在预期中。人们通过哈希表学到了很难的方法,通过分析随机算法假设的健忘对手在现实世界中通常不会那么健忘。
我认为可以公平地说,treaps 是一个有趣的想法,但结果并没有产生很多实际影响。是研究。会发生这种情况。
【解决方案2】:
Treap 的一个非常不寻常的特性是它们对插入/删除的顺序不敏感。
由于插入/删除是基于随机优先级发生的,如果将 $n$ 个元素添加到空的treap,无论插入发生的顺序如何,treap 看起来都完全相同。
因此,对手无法查看treap 并找出插入元素的顺序。