Huffuman编码实验原理
1. 统计n个信源消息符号,得到n个不同概率的信息符号
2. 将这n个信源信息符号按其概率大小依次排序:p(x1) ≥ p(x2)≥ …≥ p(xn)
3. 取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列
4. 将剩余的信息符号,按概率大小重新进行排序
5. 重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序。
6. 如此反复重复n-2次,最后只剩下两个概率
7. 从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成Huffuman编码字。编码结束
1. 选取一段不少于3000字的英文材料,统计各字符出现的次数,实现Huffman编码,以及对编码结果的解码
路径为:D:\matlab\Windows\test4Huffman\NeverGonnaGiveUp.txt
要求:
- 输出每个字符出现的次数和编码,并存储文件(Huffman.txt)。
这段MATLAB代码实现了哈夫曼编码的生成和字符出现次数统计。首先,使用fileread函数读取指定路径下的文本文件内容,并将其转换为ASCII码表示的数字数组。然后,使用unique函数获取所有不同的字符,并使用histcounts函数统计每个字符出现的次数。接着,将每个字符出现次数转换为出现概率,并使用huffmandict函数生成哈夫曼编码字典。最后,将每个字符的出现次数和哈夫曼编码写入文件中。
需要注意的是,这个代码是处理英文文本的,如果输入的文本是中文等其他语言的文本,需要进行适当的修改才能正确处理。
运行完生成
- 在Huffman编码后,英文文章编码结果保存到文件中(code.dat),编码结果必须是二进制形式,即0 1的信息用比特位表示,不能用字符‘0’和‘1’表示(*)。
这段MATLAB代码使用生成的哈夫曼编码对英文文章进行编码,并将编码结果写入二进制文件中。
首先,使用huffmanenco函数对数字数组numericText进行编码,dict为之前生成的哈夫曼编码字典。编码结果是一个由0和1组成的逻辑向量。接着,使用fwrite函数将编码结果以比特位作为单位写入名为code.dat的二进制文件中。最后,关闭文件句柄。
- 实现解码功能。
这段MATLAB代码对之前编码得到的结果进行解码,并检查解码结果是否与原文相同。
首先,使用huffmandeco函数对编码结果encoded进行解码,dict为之前生成的哈夫曼编码字典。解码结果是一个数字数组,与原文numericText相同。
接着,使用isequal函数比较解码结果decoded和原文numericText是否相等。如果相等,则输出"解码成功!";否则,输出"解码失败!"表示解码结果有误。