压缩trie实现?

时间:2013-02-17 23:01:49

标签: string algorithm data-structures bit-manipulation trie

我正在修读Udacity课程并在其中一个讲座(https://www.youtube.com/watch?v=gPQ-g8xkIAQ&feature=player_embedded)中,教授给出函数high_common_bits(从讲座中逐字逐句)看起来像伪代码:

function high_common_bits(a,b):
   return:
     - high order bits that a+b in common
     - highest differing bit set
     - all remaining bits clear

举个例子:

a = 10101
b = 10011
high_common_bits(a,b) => 10100

然后他说这个函数用于高度优化的尝试实现。有没有人碰巧知道他指的是哪个确切的实现?

3 个答案:

答案 0 :(得分:5)

如果您正在寻找高度优化的按位压缩trie(又名Radix Tree)。 BSD routing table在其实现中使用了一个。代码易于阅读。

答案 1 :(得分:1)

他在谈论简洁尝试tries,其中每个节点只需要两位来存储(理论最小值)

史蒂夫·汉诺夫写了一篇关于Succinct Tries here的非常平易近人的博客文章。您还可以阅读Guy Jacobson (最近写于1989年)的原始论文,其中介绍了here

答案 2 :(得分:0)

压缩的trie在一个节点中存储前缀,然后从该节点分支到以该前缀开头的每个可能的项目。

在这种情况下,他显然做了一个有点明智的trie,所以它存储了一个位前缀 - 即,项目共同的开头的位在一个节点中,然后从该节点有两个分支,一个节点用于下一位为0,另一个用于下一位为1.可能这些节点也将被压缩,因此它们不会仅存储下一个位,而是存储一个数字到目前为止插入到trie中的项目中所有匹配的位。

实际上,给定节点之后的下一位可能根本不存储在以下节点中。该位可以隐含在所遵循的链接中,因此下一个节点仅存储位之后的位。