电文的编码与译码

您所在的位置:网站首页 编码与译码是什么过程 电文的编码与译码

电文的编码与译码

2024-02-10 19:49| 来源: 网络整理| 查看: 265

内容:

从键盘接收一串电文字符,输出对应的Huffman(哈夫曼)编码,

同时,能翻译由Huffman编码生成的代码串,输出对应的电文字符串。

设计要求:

  (1).构造一棵Huffman树;

  (2).实现Huffman编码,并用Huffman编码生成的代码串进行译码;

  (3).程序中字符和权值是可变的,实现程序的灵活性。

步骤:

算法分析

本设计使用结构体数组存储Huffman树。

程序中设计了两个函数:

函数HuffmanTree()用来构造一个Huffman树;

函数HuffmanCode()用来生成Huffman编码并输出。

在电报通信中,电文是以二进制代码传送的。在发送时,需要将电文中的字符转换成二进制代码串,即编码;在接受时,要将收到的二进制代码串转化为对应的字符序列,即译码。由于字符集中的字符被使用的频率是非均匀的,在传送电文时,要想将电文总长尽可能短。因此,若对某字符集进行不等长编码的设计,则要求任意一个字符的编码都不是其他字符编码的前缀,这种编码称作前缀编码。由Huffman树求得的编码是最优前缀码,也叫Huffman编码。给出字符集和各个字符的概率分布,构造Huffman树,将Huffman树中每个分支结点的左分支标为0,右分支标为1,将根到每个叶子路径上的标号连起来,就是该叶子所代表字符的编码。

程序中主函数根据提示输入一些字符和字符的权值,则程序输出哈夫曼编码;若输入电文,则可以输出哈夫曼译码。

构造Huffman树的算法

主程序中输入不同字符,统计不同字符出现的次数作为该字符的权值,存于data[]数组中。假设有n种字符,则有n个叶子结点,构造的哈夫曼树有2n-1个结点。具体步骤如下:

将n个字符(叶结点)和其权值存储在HuffNode数组的前n个数组元素中,将2n-1个结点的双亲和左右孩子均置-1.在所有结点中,选择双亲为-1,并选择具有最小和次小权值的结点m1和m2,用x1和x2指示这两个结点在数组中的位置,将根为HuffNode[x1]和HuffNode[x2]的两棵树合并,使其成为新结点HuffNode[n+i]的左右孩子,其权值为m1+m2.重复上述过程,共进行n-1次合并就构造了一棵Huffman树。产生的n-1个结点依次放在数组HuffNode[]的n~2n-2的单元中。

2.Huffman编码和译码算法

从Huffman树的叶子结点HuffNode[i](0


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3