van Emde Boas Tree的最大元素是否应存储在树外?

时间:2011-12-17 15:26:09

标签: data-structures van-emde-boas-trees

我们不需要像min元素一样处理max元素吗?为什么我们可以拥有这种不对称性并仍然在0(loglogN)时间内执行操作?最大元素沿树向下传播,但最小值不会......反转情况是否有可能有时间进行操作?

我在这里找到:http://code.google.com/p/libveb/wiki/Intro我们需要存储它,因为元素的sqrt是耗时的操作。但我认为还有别的东西。

2 个答案:

答案 0 :(得分:3)

我认为op所要求的是为什么我们不存储类似于min元素的max元素,即为什么我们将max元素向下传播到树中以及这种处理是否可以反转。

我们将min元素存储在树外,因为它的存在表明该特定结构是非空的,这阻止我们进行不必要的递归调用以检查空白并使O(1)操作插入空树,即只需设置最小元素。我们需要树外的max和min元素用于后继和前任操作。

在Erik Demaine的讲义(由templatetypedef提供的链接)中对此进行了相当好的解释。

我认为应该可以将min / max元素中的任何一个保留在外而不进行传播,并且仍然保持每个操作的O(log log u)时间,因为我们这样做只是为了知道结构是否为非空。保持它们并且不将它们两者传播都是多余的,并且不会给你带来额外的时间。

答案 1 :(得分:1)

van Emde Boas树通常会分别存储最大值和最小值,否则您将无法有效地实现后继和前任。

您看到的具体来源是否有其他原因?我见过的关于vEB树的所有注释都描述了以这种方式存储最大值和最小值。参见

希望这有帮助!