陷阱什么时候有用?
When is a treap useful?
在什么样的情况下使用treap是最优的数据结构?我一直在寻找这方面的答案,但还没有真正找到任何具体的答案。
还有一个 Whosebug
问题询问何时使用 treap,但那里没有给出真实世界的例子。
最常见的优势似乎是它们比红黑树更容易实现,但几乎每个人都使用预先编写的实现,所以它似乎并不相关。
在随机算法中用作示例的最佳数据结构类。
好吧,撇开轻率不谈,Aragon 和 Seidel 提出的狭隘优势包括以下内容。
它们很简单。是的,你的标准库可能有可用的红黑树,但它可能没有提供足够的钩子来做一些可以用二叉搜索树完成的有趣的事情(例如,订单统计)。拆分和合并也更简单。
它们使用的 space 比红黑树略少,假设优先级是通过散列键计算的。实际上,红黑树是否可以窃取颜色指针位并不重要。
它们可能比红黑树更快。我还没有以任何方式搜索证据。
最大的缺点是性能保证仅在预期中。人们通过哈希表的惨痛教训了解到,随机算法分析假设的健忘对手在现实世界中通常不会那么健忘。
我认为可以说 treaps 是一个有趣的想法,但结果却没有太大的实际影响。是研究。就是这样。
Treaps 的一个非常不寻常的 属性 是它们对 insertions/deletions 的顺序不敏感。
由于insertion/deletion是根据随机优先级发生的,如果将$n$个元素添加到一个空的treap中,无论插入的顺序如何,treap看起来都完全一样。
所以对手无法查看 treap 并找出元素插入的顺序。
在什么样的情况下使用treap是最优的数据结构?我一直在寻找这方面的答案,但还没有真正找到任何具体的答案。
还有一个 Whosebug
问题询问何时使用 treap,但那里没有给出真实世界的例子。
最常见的优势似乎是它们比红黑树更容易实现,但几乎每个人都使用预先编写的实现,所以它似乎并不相关。
在随机算法中用作示例的最佳数据结构类。
好吧,撇开轻率不谈,Aragon 和 Seidel 提出的狭隘优势包括以下内容。
它们很简单。是的,你的标准库可能有可用的红黑树,但它可能没有提供足够的钩子来做一些可以用二叉搜索树完成的有趣的事情(例如,订单统计)。拆分和合并也更简单。
它们使用的 space 比红黑树略少,假设优先级是通过散列键计算的。实际上,红黑树是否可以窃取颜色指针位并不重要。
它们可能比红黑树更快。我还没有以任何方式搜索证据。
最大的缺点是性能保证仅在预期中。人们通过哈希表的惨痛教训了解到,随机算法分析假设的健忘对手在现实世界中通常不会那么健忘。
我认为可以说 treaps 是一个有趣的想法,但结果却没有太大的实际影响。是研究。就是这样。
Treaps 的一个非常不寻常的 属性 是它们对 insertions/deletions 的顺序不敏感。
由于insertion/deletion是根据随机优先级发生的,如果将$n$个元素添加到一个空的treap中,无论插入的顺序如何,treap看起来都完全一样。
所以对手无法查看 treap 并找出元素插入的顺序。