Data structures 何时使用treap

Data structures 何时使用treap,data-structures,treap,cartesian-tree,Data Structures,Treap,Cartesian Tree,谁能提供真实的例子来说明什么时候存储数据的最佳方式是treap 我想了解在哪些情况下,treap比堆和树结构更好 如果可能的话,请提供一些真实情况的例子 我试着在这里搜索使用treaps的案例,或者通过谷歌搜索,但没有找到任何东西 多谢各位 我不能给你提供任何真实的例子。但我确实使用treaps解决编程竞赛中的一些问题: 这些实际上不是真正的问题,但它们是有意义的。您可以将其用作基于树的映射实现。根据应用程序的不同,它可能是。几年前,我自己(在Java中)实现了一个Treap和一个跳过列

谁能提供真实的例子来说明什么时候存储数据的最佳方式是treap

我想了解在哪些情况下,treap比堆和树结构更好

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

我试着在这里搜索使用treaps的案例,或者通过谷歌搜索,但没有找到任何东西


多谢各位

我不能给你提供任何真实的例子。但我确实使用treaps解决编程竞赛中的一些问题:


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

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


它最大的优点之一是,与红黑树相比,它非常容易实现。然而,据我记忆所及,与红黑树相比,它的操作没有保证成本(搜索是O(logn),概率
),这意味着您将无法在需要特定时间限制的安全关键型应用程序中使用它。

Treaps是平衡二叉搜索树的一个极好的变体。有很多平衡二叉树的算法,但大多数算法都很可怕,需要处理大量的特殊情况。另一方面,对Treaps进行编码非常容易。通过利用一些随机性,我们得到了一个预期为对数高度的BBT。 下面是使用treaps要解决的一些好问题-- (简易级)
(中等级别)

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

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

我已经看到了两个原因,为什么独特的表现可能是有用的:

  • 安全原因。treap不能包含历史信息
  • 高效的子树共享。我见过的最快的集合运算算法都使用treaps

  • 如果哈希值用作优先级,则优先级可能不是随机的或均匀分布的。这可能会破坏基础理论treap@jason-应使用随机化哈希函数。请参阅第7.1节。但是,第一个不需要treaps。可以通过预计算持久段树,然后在每个查询中使用O(logN)来解决此问题。:)流行的SPOJ问题: