假设我们开始使用如下文本文件:
a 00
b 01
c 10
d 11
00000001011011
该算法将是您使用前缀构建霍夫曼树的典型算法,在遍历树时读取编码位,直到到达叶子,然后在该叶子处返回字符。
有人可以解释我如何确定运行时间和空间复杂度吗?
答案 0 :(得分:8)
基本上,霍夫曼树有三种方法,构造,编码和解码。时间复杂度可能各不相同。
我们应该首先注意到(见维基百科 [link]):
在许多情况下,时间复杂度在这里选择算法时并不是非常重要,因为这里的n是字母表中符号的数量,通常是一个非常小的数字(与要编码的消息的长度相比) );而复杂性分析则涉及当n增长到非常大时的行为。
答案 1 :(得分:4)
假设编码的文本字符串长度为n,字母为k个符号。
对于每个编码符号,您必须遍历树以解码该符号。树包含k个节点,并且平均,它需要O(log k)个节点访问来解码符号。所以时间复杂度为O(n log k)。
空间复杂度为树的O(k)和解码文本的O(n)。