van Emde Boas Tree中的高位和低位

时间:2011-12-09 13:48:02

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

我试图了解vEB树的概念。

在一个例子中: 我假设宇宙集U = {0,1,2,3 ...... 8}。所以大小是9。

现在让我们取一个子集S = {0,1,3,4,6,7}。

对于一个操作FindSuccessor(3,S);我需要知道最小元素>在子集S中,我需要知道元素的高位和低位,即3。

一个解释是它的前半部分和后半部分,分别将结果00和11分别设为高和低。

另一个人说:

high = Floor [element / sqrt(| U |)] = Floor [3 / sqrt(9)] = Floor [1] = 1;

low = element%sqrt(| U |)= 3%sqrt(9)= 0;

请解释我哪里出错?

1 个答案:

答案 0 :(得分:5)

你没有错 - 解释是针对两个略有不同的数据结构,只有在| U |时才会重合是2的平方幂。在较高的层面上,我们试图将一个关键k分成两半,每一半都有大约√| U |可能性。第一种方法直接实现了这一目标;第二个是在商品硬件上运行得更快的近似值(假设| U |是2的幂,最坏的情况是| U |不是正方形而前半部分的可能性是第二个的两倍)。选择一种方法并坚持下去。


这是FindSuccessor(3,S)的一个例子。为简单起见,我将以三个元素为基础进行递归。

树看起来像

       min=0|  aux
       max=7|------->min=0|
       / | \         max=2|
      /  |  \         /|\
     /   |   \       0 1 2
    /    |    \
   v     v     v
min=0| min=3| min=6|
max=1| max=4| max=7|
 /|     /|     /|
0 1    3 4    6 7

在根处,我们分割3 =(1,0)并检查第1个(中间)孩子是否有max> 3.确实如此,所以我们下降并使用蛮力计算答案,4。(当然,如果树有两个以上的级别,我们会递归搜索。)

更有趣的情况是S = {0,1,3,6,7}。

       min=0|  aux
       max=7|------->min=0|
       / | \         max=2|
      /  |  \         /|\
     /   |   \       0 1 2
    /    |    \
   v     v     v
min=0| min=3| min=6|
max=1| max=3| max=7|
 /|     /      /|
0 1    3      6 7

这里,我们检查根的第1个子树{3},并发现它的最大值不大于3.我们在aux数据结构中找到1的后继,它是2,并返回min的第2个子树,即6。