在我在网上看到的大多数示例中,都认为有某种外部随机数生成器会产生随机(不同的!)优先级。
据我回忆,有一种方法可以实际随机生成优先级,并且在将它们插入到treap 中以解开可能的优先级冲突时。
那我有两个问题:
- treaps 是否真的需要使其优先级完全不同,或者只需要比较可能最终被比较的节点的优先级?也就是说,如果我有两个具有优先级的节点,
p
但我可以确保它们永远不会以任何方式相遇,那么让它们具有相同的优先级会有问题吗? - 我应该如何在我的陷阱中生成和解开优先级?
谢谢
编辑:这是我在说什么的描述:
问题 8.12 @随机算法
现在让我们分析实现一个trap操作所需的随机位数。假设我们从单位区间 [0,1] 中均匀地随机选取每个优先级 Pi。然后,每个 Pi 的二进制表示可以生成为(可能是无限的)位序列,这些位序列是无偏掷硬币的结果。这个想法是在这个序列中只生成与解决不同优先级之间的比较所需的一样多的位。假设我们只生成了treap T 中元素优先级的二进制表示的一些前缀。现在,在插入项目y 时,我们将其优先级Py 与其他优先级进行比较以确定y 应该如何旋转。在将 Py 与一些 PI 进行比较时。如果他们当前的部分二进制表示可以解决比较,那么我们就完成了。否则。它们具有相同的部分二进制表示,我们不断为每个生成更多位,直到它们首先不同。