Jj
一、课程设计内容
利用 C 语言实现完整的 Huffman 数据压缩编码和解码。
二、课程设计目的
(1) 加深对数据结构相关算法的理解,综合运用 C 语言编写信源编码程序。
(2) 理解 Huffman 编码和解码的特点,掌握数据压缩的基本原理,并能够用 C 语
言编程实现。
(3) 掌握结构化分析,设计与编程方法,学会编写动态链接库程序。
三、环境需求
Visual C++ 6.0 以上编程环境。
四、Huffman 编码和解码的基本原理
1、 Huffman 算法
Huffman 算法关键是建立 Huffman 树。
建立 Huffman 树的过程很简单,各个符号作为由二叉树连接的一串叶结点展
开,每个结点有一个权,它只是符号出现的频率或概率。
然后按下列步骤建立 Huffman 树:
(1) 确定权最低的两个自由结点。
(2) 建立这两个结点的父结点,赋给它的权等于这两个结点的权之和。
(3) 父结点被增加到自由结点的序列中,而两个子结点则从序列中去掉。
(4) 每对组合中将权值较小的边(左子树)指定为 0,权值较大的边(右子树)指
定为 1。(理论上可以任意指定,但为了易于编程,需要指定二叉树中左子树为
0,右子树为 1,或者相反)。
(5) 重复前面的步骤,直到只剩下一个自由结点,这个自由结点作为树的根。
Huffman 树建立完毕后,将从根结点出发到叶子结点的路径上各左、右分支的编
码顺序排列,最后得到该叶子结点所对应的字符二进制唯一可译编码,该编码称
为 Huffman 编码(霍夫曼编码)。
定义 5:若对有限长的信源输出序列,相应的码字序列彼此都可无疑义地区分,
就称做是唯一可译的。表 1 中的码 C 和码 D 都是唯一可译码的例子,码 A 和码
B 则不是唯一可译的。
定义 6:若码中任何一个码字都不是另一个码字的字头,则称这种码为异字头码
或异前缀码。
Huffman 编码就是异字头码,可以证明,对任一唯一可译码必可找到码字长
度相同的异字头码。表 1 中的码 C 为异字头码,而码 D 则不是。显然,异字头
条件保证这类码是唯一可译的。可以证明,虽然异字头码只是唯一可译码中的一
2
评论0
最新资源