在什么样的情况下使用最佳数据结构?我一直在寻找这方面的答案,但没有真正发现任何具体的东西。
还有另一个stackoverflow
问题,询问何时使用treap,但没有给出真实世界的例子。
最常见的优势似乎是它们比红黑树更容易实现,但几乎每个人都使用预先编写的实现,所以它看起来并不相关。 / p>
答案 0 :(得分:3)
这是一种在随机算法类中用作示例的最佳数据结构。
好的,除了轻浮之外,Aragon和Seidel提出的狭隘优势包括以下内容。
他们很简单。是的,您的标准库可能有一个红黑树,但很可能它没有提供足够的钩子来完成可以使用二叉搜索树(例如,订单统计)完成的一些有趣的事情。拆分和合并也简单得多。
他们使用的空间略小于红黑树,假设通过散列键来计算优先级。在实践中,如果红黑树可以偷一个颜色的指针位,这无关紧要。
它们可能比红黑树快。我没有找到任何证据。
最大的缺点是性能保证只是期望。人们通过散列表学习了很难的方法,通过对随机算法的分析所忽略的对手通常在现实世界中并不那么遗忘。
我认为可以说,背包是一个有趣的想法,但结果却没有产生很大的实际影响。这是研究。那就发生了。
答案 1 :(得分:0)
Treaps的一个非常不寻常的特性是它们对插入/删除的顺序不敏感。
由于插入/删除操作是基于随机优先级进行的,因此,如果将$ n $个元素添加到一个空的陷阱中,则无论插入发生的顺序如何,陷阱都将完全相同。
因此,对手无法看清陷阱,也无法弄清楚元素的插入顺序。