高效的霍夫曼树搜索,同时记住所采取的路径

时间:2009-04-30 16:53:38

标签: c++ performance huffman-code

作为与我question regarding efficient way of storing huffman tree's相关的后续问题,我想知道搜索二叉树(基于霍夫曼编码输出)和存储到特定节点的路径的最快和最有效的方法是什么

这就是我目前所拥有的:

  • 将根节点添加到队列
  • 当队列不为空时,弹出项目关闭队列
    • 检查它是否是我们正在寻找的
      • 是: 按照指针返回根节点,在我们访问的每个节点上检查它是左侧还是右侧并记下它。
      • 突破搜索
    • 将左侧和右侧节点排队

由于这是一个霍夫曼树,我所寻找的所有条目都将存在。上面是广泛的第一次搜索,被认为是最好的霍夫曼树,因为源中的项目更常在树中更高,以获得更好的压缩,但我无法找到一个好方法来跟踪我们如何使用我放在节点中的头指针进入特定节点而没有回溯。

在这种情况下,我也以相反的顺序获取所有右/左路径,例如,如果我们跟随头到根,我们从根发现它是右,左,左,我们左,左,右。或者二进制001,当我要找的是以有效的方式获得100时。

还建议将节点从根目录存储到节点作为节点内的单独值,但是如果我们有一个大于我们为此目的创建的变量可以容纳的多个位的树,这将会破坏,并且在那时存储数据也会占用大量内存。

2 个答案:

答案 0 :(得分:2)

创建价值字典 - >位串,这将为您提供最快的查找。

如果值是已知大小,您可能只需要一个位串数组,然后按索引查找值。

答案 1 :(得分:0)

如果您一次一位地解码霍夫曼编码数据,那么您的表现将会很差。尽管您希望避免使用查找表,但如果您关心性能,这是唯一的方法。创建霍夫曼代码的方式,它们是从左到右的唯一,并且非常适合快速查找表。