什么时候使用treap

时间:2013-04-15 06:57:23

标签: data-structures treap cartesian-tree

任何人都可以提供真实的例子,说明何时存储数据的最佳方式是什么?

我想了解哪种情况下treap会比堆和树结构更好。

如果可能的话,请提供一些实际情况的例子。

我试图在这里搜索使用treaps的情况并通过谷歌搜索,但没有找到任何东西。

谢谢。

4 个答案:

答案 0 :(得分:11)

如果哈希值用作优先级,则treaps提供内容的唯一表示。

考虑实现为AVL树或rb树的项目的订单集。以不同顺序插入项目通常会以不同形状的树木结束(尽管所有这些都是平衡的)。对于给定的内容,无论历史如何,treap都将具有相同的形状。

我已经看到了为什么唯一表示可能有用的两个原因:

  1. 安全原因。 treap不能包含历史信息。
  2. 高效的子树共享。我见过的最快的集合操作算法使用了treaps。

答案 1 :(得分:6)

我无法向您提供任何真实的例子。但我确实使用treaps来解决编程竞赛中的一些问题:

这些实际上不是真正的问题,但它们是有道理的。

答案 2 :(得分:5)

Treaps是平衡二叉搜索树的绝佳变体。确实存在许多算法来平衡二叉树,但是大多数都是可怕的事情,需要处理大量的特殊情况。另一方面,对Treaps进行编码非常容易。通过使用随机性,我们有一个预计具有对数高度的BBT。 使用treaps解决的一些好问题是 - http://www.spoj.com/problems/QMAX3VN/(简易级别) http://www.spoj.com/problems/GSS6/(中等级别)

答案 3 :(得分:3)

您可以将其用作基于树的地图实现。根据应用程序的不同,它可能是faster。几年前,我自己实现了一个Treap和一个Skip列表(在Java中)只是为了好玩,并做了一些基本的基准测试,将它们与TreeMap进行比较,而Treap是最快的。您可以看到结果here

与红黑树相比,它最大的优点之一是它易于实施。但是,据我记忆,它的操作没有保证成本(搜索是O(log n)high概率),与红黑树相比,这意味着你不会能够在需要特定时间限制的安全关键应用中使用它。