白东程子太军 计算机算法设计与分析 Design and Analysis of Computer Algorithms 哈夹曼隔码 Huffman Coding 我浩 信科1801
计算机算法设计与分析 Design and Analysis of Computer Algorithms 哈夫曼编码 Huffman Coding 张浩 信科1801
归本程子末军 目录 SHANDONG UNIVERSITY OF TECHNOLOOY 一、 编码问题的提出 二、可变长编码和前缀编码 三、哈夫曼树和哈夫曼编码 四、哈夫曼编码算法实现(树结构) 五、哈夫曼编码算法实现(广义表) 2025/4/3 2
2 目录 一、编码问题的提出 二、可变长编码和前缀编码 三、哈夫曼树和哈夫曼编码 四、哈夫曼编码算法实现(树结构) 五、哈夫曼编码算法实现(广义表) 2025/4/3
归本程上太军 1.编码问题的提出 SHANDONG UNIVERSITY OF TECINOLOGY 在英文中已知e的出现频率最高,z的出现频率 最低。在信息加密之前需要对信息进行编码处理, 而编码后的二进制数据长度将直接影响加密速度。 如果每个字母都采用等 长编码的方式进行编码势 必会多占用很多空间。所 以我们很容易思考到,有 没有一种可变长的编码既 可以减少编码长度又可以 David Huffman 唯一的恢复出来? 2025/4/3 3
3 1.编码问题的提出 在英文中已知e的出现频率最高,z的出现频率 最低。在信息加密之前需要对信息进行编码处理, 而编码后的二进制数据长度将直接影响加密速度。 2025/4/3 如果每个字母都采用等 长编码的方式进行编码势 必会多占用很多空间。所 以我们很容易思考到,有 没有一种可变长的编码既 可以减少编码长度又可以 David Huffman 唯一的恢复出来?
归本程子末军 2.可变长编码和前缀编码 HANDONG UNIVERSITY OF TECHNOLOOY 如果采用可变长编码进行对信息进行编码,最 直接的方法就是直接采用“0,1,01,10.”的方式 进行编码。这种编码方式真的合适吗? 例:我们对A,B,C,D四个字母进行编码。我们 采用的编码方式如下: A B C D 0 01 10 请问:“0110”到底是的原信息到底是“ABBA” 还是“ABD”或者是“CD”呢? 2025/4/3
4 2.可变长编码和前缀编码 如果采用可变长编码进行对信息进行编码,最 直接的方法就是直接采用“0,1,01,10.”的方式 进行编码。这种编码方式真的合适吗? 2025/4/3 例:我们对A,B,C,D四个字母进行编码。我们 采用的编码方式如下: A B C D 0 1 01 10 请问:“0110”到底是的原信息到底是“ABBA” 还是“ABD”或者是“CD”呢?
归本程上太军 2.可变长编码和前缀编码 SHANDONG UNIVERSITY OF TECINOLOGY 前缀编码: 若任何一个字符的编码都不是同一字符集中另 一个字符的编码的前缀,则此编码称为前缀编码。 例:我们对A,B,C,D四个字母进行编码。我们 采用前缀编码的方式进行编码,编码表如下: A 实际上,前缀编码不 111 如果 会引起二义性问题 0110111”,那么 我们可以唯一到际后息为“ACD”,这样我们 就避免了二义性问题。 2025/413 5
5 2.可变长编码和前缀编码 前缀编码: 若任何一个字符的编码都不是同一字符集中另 一个字符的编码的前缀,则此编码称为前缀编码。 2025/4/3 例:我们对A,B,C,D四个字母进行编码。我们 采用前缀编码的方式进行编码,编码表如下: A B C D 0 10 110 111 如果我们给定编码信息为“0110111” ,那么 我们可以唯一找到原信息为“ACD” ,这样我们 就避免了二义性问题。 实际上,前缀编码不 会引起二义性问题