# 基于 C 语言创作第一个网页
一、实验目的
编程实现各种无损压缩算法并进行比较分析
编程实现 huffman,自适应 huffman,算术编码和 LZW 编码算法
自己设置三种不同的统计数据源来进行测试,就每种数据源的压缩率,比较和评价各种算法的性能
二、实验要求
统计数据源要求:
String 长度大于 30,构成 String 的每个 element 出现频率大于 4 次
输入输出要求:
输入可以通过文本或者屏幕输入\读取文件
输出可以保存到文本或者屏幕显示均可,需要输出每个字符的编码,以及整个输入 string 的整体编码,string 对应算法的压缩率,算法的运行时间
三、测试数据和执行结果 (在给定数据下,执行操作、算法和程序的结果,可使用数据、图表、截图等给出)
**综述:**
哈夫曼算法相对比较简单,所以我使用了 winform 窗口应用程序和 C#;其他因为多处用到 STL 的 vector,map,deque 等所以使用的 C++;压缩效率我是用的公式为:(压缩前位数-压缩后位数)/压缩前位数;时间以毫秒为单位。测试字符串第一个是乱码,第二个是有意义的句子,第三个是含了多种符号的句子。
**Huffman Coding:**
1、拖进所需的控件后在 button 中进行编码。先新建字符串、各字符权重和出现次数的数组,再接受用户输入的字符串。在开始编码时就记下当前时间以便结束计算编码耗时。

1、先用 struct 设置节点,先找到两个最小值赋给 min1,min2。
2、统计各个字符出现的次数记为权重放在 weight 数组中。接着初始化树。建树时先找出最小的两位数,然后不断用 strcut 的 min.s1, min.s2 给它们的父母节点和左右孩子节点赋值。
3、将输入字符利用所建的树进行编码。这里比较简单,直接遍历树找到树所在的遍历序列即为本字符的编码。输出总的编码需要新建一个总编码数组,赋值使其不断加上新的到的单个字符编码。
4、结束编码,再获得一个当前时间。将此时间和开始时间相减获得总时间。
5、效率的计算首先统计编码前位数。在 ASCII 码中 26 字母均为 8 位 2 进制尾数表示,所以直接长度*8 即可;而编码后位数则在显示各个字符位数时,不断加上个各字符编码长度即可。
6、最后显示各个属性:效率、时间、总编码。
**代码:**




## 实验结果分析及总结(对实验的结果是否达到预期进行分析,总结实验的收获和存在的问题等)
**关于选取测试串:**
```
三个测试串分别为普通乱码和有意义的字段。第一个为较乱且无意义的串,可进行初步测试,后面两个字符串模拟了有意义的文本内容且又分为两类:第二个为一般的长句子,只由26字母构成的;第三个为加了许多特殊符号的字符串**。**
```
\1. 根据算法来看明显哈夫曼的算法是最简单的,效率也较高。算术算法需要使用概率区间,相对来说不是最优的,因为此算法开始必须先扫描统计以便所有字符出现的概率,之后才不断更新区间。字典算法需要用到 map 的结构来构建字典,在每次接收字符时与上一个合并获得新的串加入字典中。
\2. 自适应哈夫曼算法最常用的有两种,这里使用了 FGK 算法。它在哈夫曼的算法上给每个节点加了权重,赋予了兄弟性质。同时可以满足动态接收字符串赋值,比哈夫曼算法更高效。在算法中 0 节点的使用在于接收之前没接受过的字符,一旦接收新字符就在原有左节点增加两个孩子:左为 0,右为此字符。在接收已有的字符时,如果破坏了兄弟性质则需交换子树。相对来说更加动态。
\3. 在算术算法的效率中,因为编码结果是概率区间,转化成二进制小数时有可能出现无限小数所以需要设定结果编码长度以防死循环。由此造成结果编码长度不准确,导致压缩率计算不准确。
\4. 关于三种算法的统计平均值统计:

由表可看出压缩效率最高的算法是算术算法,但因为计算编码长度有差异所以待定。LZW 的压缩效率最低,因为在不断接收字符时需要新建字符串加入字典中,如果字符串重复较高时字典才优先选择此算法。
时间上最短是哈夫曼算法;而自适应哈夫曼算法相对来说较高,因动态接收字符时可以随时得到二叉树的编码,可因为需要随时检查是否违法兄弟性质,在时间上最耗时。同时哈夫曼算法是无损算法,时间较短,效率相对较高随意比较适合短字符串的压缩。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+源码及可执行exe文件 哈夫曼算法相对比较简单,所以我使用了winform窗口应用程序和C#;其他因为多处用到STL的vector,map,deque等所以使用的C++;压缩效率我是用的公式为:(压缩前位数-压缩后位数)/压缩前位数;时间以毫秒为单位。测试字符串第一个是乱码,第二个是有意义的句子,第三个是含了多种符号的句子。 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/125369513
资源推荐
资源详情
资源评论






























收起资源包目录


















































共 39 条
- 1
资源评论

- Max_ZF2023-09-03感谢资源主的分享,这个资源对我来说很有用,内容描述详尽,值得借鉴。
- 普通网友2023-10-03资源内容总结地很全面,值得借鉴,对我来说很有用,解决了我的燃眉之急。

shejizuopin

- 粉丝: 1w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电子商务环境下基于ISO27001的企业信息安全管理体系研究.doc
- 2022年WebGIS课程期末考试复习资料.docx
- 项目管理的几点个人体会.docx
- 网络对青少年学生身心健康成长的影响及对策研究样本.doc
- 基于的模拟电子钟单片机课程设计.docx
- (源码)基于Spring Boot和Vue的贪吃蛇对战平台.zip
- 软件系统运维手册.docx
- 如何构建网络环境下的计算机信息安全体系.doc
- 国家开放大学电大《网络营销与策划》机考第二套标准试题及答案.docx
- 计算机图形学实验指导书.doc
- 银行网络安全建设方案书样本.doc
- 巧用Excel确定内含报酬率.doc
- 歌唱比赛评分系统设计(C语言完整版).doc
- 基于网络平台的教育管理流程简介.ppt
- (源码)基于Arduino的LXARDOSCOPE示波器软件.zip
- 健康网络专题知识讲座.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
