【问题标题】:Compressed trie implementation?压缩的 trie 实现?
【发布时间】:2013-02-17 23:01:49
【问题描述】:

我正在学习 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

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

【问题讨论】:

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


    【解决方案1】:

    如果您正在寻找高度优化的按位压缩树(又名基数树)。 BSD routing table 在它的实现中使用了一个。虽然代码易于阅读。

    【讨论】:

      【解决方案2】:

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

      Steve Hanov 在 Succinct Tries here 上写了一篇非常平易近人的博文。您还可以阅读 Guy Jacobson 的原始论文(写于 1989 年),其中介绍了他们here

      【讨论】:

      • 你确定这是引用的内容吗?
      【解决方案3】:

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

      在这种情况下,他显然是在进行逐位尝试,因此它存储了位前缀——即,项目共同的开头位进入一个节点,然后该节点有两个分支,一个到一个节点的下一位是 0,另一个到下一位是 1。大概这些节点也会被压缩,所以它们不会只存储下一个比特,而是存储一个数字到目前为止插入到 trie 中的项目中所有匹配的位。

      事实上,给定节点之后的下一位可能根本不会存储在后续节点中。该位可以隐含在后面的链接中,因此下一个节点仅存储在那之后的位。

      【讨论】:

        猜你喜欢
        • 2017-12-07
        • 2020-07-16
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多