• 基于Huffman码实现的编码译码系统


    资源下载地址:https://download.csdn.net/download/sheziqiong/85771842
    资源下载地址:https://download.csdn.net/download/sheziqiong/85771842

    一、设计目的

    利用Huffman编码进行通信可以大大提高信道利用率.缩短信息传输时间,降低传输成本,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。此程序就是为这样的信息收发站写一个Huffman码的编/译码系统。

    二、设计内容

    • 建立哈夫曼树:读入文件(*.souce),统计文件中字符出现的频度,并以这些字符频度作为权值,建立哈夫曼树。

    • 编码:利用已建好的哈夫曼树,获得各个字符的哈弗曼编码,并对正文进行编码,然后输出编码结果,并存入文件(*.code)中。

    • 译码:利用已建好的哈夫曼树将文件(.code)中的代码进行译码,并输出译码结果,并存入文件(.decode)中。

    三、概要设计

    3.1 功能模块图;

    3.2 各个模块详细的功能描述。

    • void menu() 获取菜单

    • 对源文件进行编码: 由客户端输入需要编码的文件名,然后遍历文件所有字符,获得所有字符数以及字符频度,将字符频度当作对应字符的权值,将所有字符数传入key返回。先建立哈夫曼森林,对每一种字符,分别建立一颗单节点Huffman树,对每一个Huffuman节点的成员进行初始化。然后依次选择根节点权值最小的树作为左右子树,权值之和为父节点的权值。此过程不断进行,每进行一次,森林里就少一颗树,当森林有且仅有一棵树时,这棵树就是Huffman树。在这个过程中,定义一个缓存数组,由后向前保存。最后一位为‘\0’,由叶子向根移动,左‘0’右‘1’,直至遍历完所有字符,得到所有字符的哈夫曼编码,存在每个节点的code成员里。由客户端输入想要保存的文件名,按原文本的字符顺序,将哈夫曼编码存入文件。

    • 查看编码表:输出字符,权值及其最后的哈夫曼编码。

    • 对编码文件进行译码: 由客户端获取需要译码的文件名,然后由哈夫曼树的根结点出发,根据文件内的0或1判断是进入左子树还是进入右子树,直至达到根节点,就算识别出了一个字符。直至文件结束。

    四、详细设计

    4.1 功能函数的调用关系图

    4.2 各功能函数的数据流程图

    五、测试数据及运行结果

    • 初始化界面

    5.1 正常测试数据和运行结果

    要求提供3组正常测试数据和运行结果

    1)

    2)

    3)

    5.2 异常测试数据及运行结果

    要求提供2组异常测试数据和运行结果

    中文输入

    非法输入

    资源下载地址:https://download.csdn.net/download/sheziqiong/85771842
    资源下载地址:https://download.csdn.net/download/sheziqiong/85771842

  • 相关阅读:
    Bootstrap重抽样原理及置信区间计算
    51单片机DAC数模转换
    A tour of gRPC:08 - gRPC 反射 与 Evans 客户端
    零基础快速自学SQL,2天足矣。
    【MATLAB源码-第54期】基于白鲸优化算法(WOA)和遗传算法(GA)的栅格地图路径规划最短路径和适应度曲线对比。
    计算机系统(23)--- 死锁的处理策略
    华为ce12800交换机m-lag(V-STP模式)配置举例
    docker安装konga系统
    8、RESTful案例
    香港的Web3从业者们 出走新加坡还是选择留下?
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/125458249