霍夫曼解码算法的运行时间和空间复杂度是多少?

时间:2013-12-02 00:47:14

标签: algorithm big-o huffman-code big-theta

假设我们开始使用如下文本文件:

a 00 
b 01
c 10
d 11

00000001011011

该算法将是您使用前缀构建霍夫曼树的典型算法,在遍历树时读取编码位,直到到达叶子,然后在该叶子处返回字符。

有人可以解释我如何确定运行时间和空间复杂度吗?

2 个答案:

答案 0 :(得分:8)

基本上,霍夫曼树有三种方法,构造,编码和解码。时间复杂度可能各不相同。

我们应该首先注意到(见维基百科 [link]):

  

在许多情况下,时间复杂度在这里选择算法时并不是非常重要,因为这里的n是字母表中符号的数量,通常是一个非常小的数字(与要编码的消息的长度相比) );而复杂性分析则涉及当n增长到非常大时的行为。

  1. 如果对输入概率进行排序,构造的复杂性是线性的(O(n)),请参阅此paper。在大多数情况下,我们使用贪婪的O(n * log(n))构造方法: http://www.siggraph.org/education/materials/HyperGraph/video/mpeg/mpegfaq/huffman_tutorial.html
  2. 如果为所有符号构建双向哈希表,则编码和解码都将是常量(O(1))。

答案 1 :(得分:4)

假设编码的文本字符串长度为n,字母为k个符号。

对于每个编码符号,您必须遍历树以解码该符号。树包含k个节点,并且平均,它需要O(log k)个节点访问来解码符号。所以时间复杂度为O(n log k)。

空间复杂度为树的O(k)和解码文本的O(n)。