没有合适的资源?快使用搜索试试~ 我知道了~
哈夫曼编译码器c语言.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 51 浏览量
2021-10-02
14:04:26
上传
评论
收藏 588KB PDF 举报
温馨提示
试读
18页
哈夫曼编译码器c语言.pdf
资源推荐
资源详情
资源评论
《数据结构》课程设计
共 18 页 第1页
目 录
1. 问题描述……………………………………………第 2 页
2. 系统设计……………………………………………第 2 页
3. 数据结构与算法描述………………………………第 5 页
4. 测试结果与分析……………………………………第 6 页
5. 总 结………………………………………………第 10 页
6. 参考文献……………………………………………第 10 页
附录 程序源代码………………………………………第 11 页
共 18 页 第2页
课程设计题目
1. 问题描述
利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传
输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传
来的数据进行译码(复原) 。试为这样的信息传输写一个哈夫曼编 / 译码系统。
2. 系统设计
2.1 设计目标
一个完整的系统应具有以下功能:
1)I :初始化(Initialization )。从终端读入字符集大小 n,以及 n 个字符和 n 个权
值,建立哈夫曼树, 并将它存于文件 hfmTree 中。输出哈夫曼树, 及各字符对应的编码。
2)W:输入( Input )。从终端读入需要编码的字符串 s,将字符串 s 存入文件
Tobetran.txt 中。
3)E:编码( Encoding)与译码( Decoding)。
编码( Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件 htmTree 中读
入),对文件 ToBeTran中的正文进行编码,然后将结果存入文件 CodeFile 中。
译码( Decoding)。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,
结果存入文件 TextFile 中。
印代码文件( Print )。将文件 CodeFile 以紧凑格式显示在终端上,每行 50 个代
码。同时将此字符形式的编码写入文件 CodePrint 中。
4)T:印哈夫曼树( Tree Printing )。将已在内存中的哈夫曼树以直观的方式(树或
凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint 中。
5)Q:退出程序。返回 WINDOWS界面。
2.2 设计思想
哈夫曼编码 (Huffman Coding) 是一种编码方式,以哈夫曼树─即最优二叉树,带
权路径长度最小的二叉树,经常应用于数据压缩。是指使用一张特殊的编码表将源字符
(例如某文件中的一个符号)进行编码。这种方法是由 David.A.Huffman 发展起来的。
例如,在英文中, e 的出现概率很高,而 z 的出现概率则最低。当利用哈夫曼编码对一
篇英文进行压缩时, e 极有可能用一个位 (bit) 来表示,而 z 则可能花去 25 个位(不是
26)。用普通的表示方法时,每个英文字母均占用一个字节( byte ),即 8 个位。二者相
比,e 使用了一般编码的 1/8 的长度, z 则使用了 3 倍多。倘若我们能实现对于英文中
共 18 页 第3页
各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
2.3 系统模块划分
图 2-3 哈夫曼
编/ 解码器的程序结构图
2.3.1 初始化算法:
程序从文件 abc.txt 中获取 26 个英文字母的权值。
2.3.2 编码算法:
(1)对输入的一段欲编码的字符串进行统计各个字符出现的次数,并它们转化
为权值 {w1,w2, ……,wN}构成 n 棵二叉树的集合 F={T1,T2, ……,Tn}把它们保存到结构
体数组 HT[n] 中, 其中 {Ti 是按它们的 ASCⅡ码值先后排序。其中每棵二叉树 Ti 中只有一
个带权为 Wi 的根结点的权值为其左、右子树上根结点的权值之和。
(2)在 HT[1..i] 中选取两棵根结点的权值最小且没有被选过的树作为左右子树
构造一棵新的二叉树,且置新的二叉树的根结点的权值为左、右子树上根结点的权值之
和。
(3)哈夫曼树已经建立后,从叶子到根逆向求每一个字符的哈夫曼编码。
2.3.3 译码算法:
译码的过程是分解电文中字符串,从根出发,按字符 '0', 或'1' 确定找左孩子
或右孩子,直至叶子结点,便求的该子串相应字符并输出接着下一个字符。
3. 数据结构与算法描述
3-1
typedef struct
{ int weight;
main()
Initialization
(
)
初
始
化
函
数
Input()
输
入
待
编
码
字
符
函
数
Encoding
(
)
编
码
函
数
Decoding
(
)
译
码
函
数
Code_printing()
打
印
编
码
函
数
Tree_printing()
打
印
哈
夫
曼
树
剩余17页未读,继续阅读
资源评论
- 错过了你此后所有的故事2023-12-21资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
- laotangjiaren2023-12-05资源很赞,希望多一些这类资源。
资料大全
- 粉丝: 14
- 资源: 26万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功