我正在修读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
然后他说这个函数用于高度优化的尝试实现。有没有人碰巧知道他指的是哪个确切的实现?
答案 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中的项目中所有匹配的位。
实际上,给定节点之后的下一位可能根本不存储在以下节点中。该位可以隐含在所遵循的链接中,因此下一个节点仅存储位之后的位。