我已经学习了 Treap 和 Splay 树并解决了使用它们的一些问题。
理论上,它们的复杂度平均为 O(log n),但在最坏情况下, Treap的复杂度为 O(n) Splay 树 摊销O(log n)。
在哪种情况下最坏情况发生在 Treap (因为它的优先级是随机选择的),并且 Treap 真的慢于 Splay < EM>树?我已经使用 Splay树和 Treap 解决了SPOJ上的一些任务,使用 Treap 的解决方案更快一些(围绕 0.2s )比使用 Splay树的那些。那么哪一个实际上更快,我应该主要使用哪一个?何时?
答案 0 :(得分:1)
在实践中,两者都没有真正使用过。 They are often way more complex than necessary.他们在学术上和编程竞赛中大多有趣。我真的只在生产代码中遇到红黑树和B树,其他类型的平衡树非常罕见。
如果您发现treaps更快,那么只需使用它们,因为O(n)最坏情况时间表现是由于运气不好,而不是对抗性输入。 Splay树稍慢,因为你必须付出&#34;付费&#34;在实践中摊销使最坏的情况下降到O(log n)。