admin 管理员组

文章数量: 1087652


2024年3月12日发(作者:laravel分页样式)

计算机时代2013年第9期 ・4l・ 

C语言在K叉哈夫曼编码教学中的应用 

郑文艳 

(德州学院信息管理学院,山东德州253023) 

摘要:字符编码与信息压缩是计算机应用的重要研究课题,许多学者对此作了很多非常有价值的研究。文章简单分 

析了二叉哈夫曼树的构造及编码,通过比较三种构造三叉哈夫曼树的算法,提出了构造任意K叉哈夫曼树及K进制的最 

优前缀编码的算法,并给出c语言源程序,使哈夫曼编码的应用范围变得更为广阔。 

关键词:哈夫曼树;三叉哈夫曼树;K叉哈夫曼树;哈夫曼编码 

中图分类号:TP31 2 文献标志码:A 文章编号:1 006—8228(201 3)09—41—02 

Application of C language in the teaching of K-ary Huffman tree code 

Zheng Wenyan 

(college of information management,Dezhou University,Dezhou,Shandong 253023,China) 

Abstract:The character encoding and information compression are important research topics in computer application.Many 

scholars have done a lot of valuable research.In this paper,the structure and code of binary tree Huffman are analyzed.By 

comparing the three kinds of algorithms constructing triple Huffman tree,the optimal prefix code algorithm constructing arbirtary 

k-ary Huffman tree and the base K is provided.The C language souree code is given,which makes the application range of the 

Huffman code wider. 

Key words:Huffman tree;trigeminal Huffman tree;K—ary Huffman tree;Huffman coding 

1二叉哈夫曼树 1的构造算法 

(2)在F中选取三棵根结点的权值最小的树作为左、中、右 

对于给定的数据序列,要生成带权路径长度最小的二叉 

子树构造一棵新的三叉树,且新得到的三叉树的根结点的权值 

树,应让权值越大的叶结点越靠近树根,权值越小的叶结点越 

为其左、中、右子树的根结点的权值之和。 

远离树根。哈夫曼最早给出了一个具有一般规律的算法,称之 

(3)在F中删除这三棵树,同时将新得到的三叉树加入到 

为哈夫曼算法。 

集合F中。 

(1)根据给定的n个权值{w ,W ,W --,w .-,w }构成n 

(4)重复(2)和(3),直到集合F中只含有一棵树为止 。 

棵二叉树的初始集合F={TJ,]r2, …,Tj,…,]rD),其中每棵二叉 

此算法由二又哈夫曼算法扩展而来,因而将它称为三又哈 

树T.中只有一个权值为w。的根结点,它的左右子树均为空。 

夫曼树构造的扩展算法。 

(2)在F中选取两棵根结点权值最小的树作为左右子树构 

3 k叉哈夫曼树的构造 

造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、 

设有n个信源符号,在传输过程中的概率分别是w ,w , 

右子树的根结点的权值之和。 

wn,将概率设为权值。ko=(n一1)mod(k—1),当k,:O时, 

(3)在F中删除这两棵树,同时将新得到的二叉树加入到 

(n—1)/(k_1)为整数,哈夫曼树中只有度为0和k的结点;当 ≠ 

集合F中。 

0,即(n一1)/(k—1)不为整数时,需添加k~1一k个权值为0的结 

(4)重复(2)和(3),直到集合F中只含有一棵树为止。这棵 

点。算法思路如下。 

树便是哈夫曼树。 

(1)作n棵树的集合F={T ,T ,T -.,Ti,…,T l,每棵树1'i 

2三叉哈夫曼树构造的扩展算法 

只有一个权值为w|的根结点,且均无子女。 

与哈夫曼算法类似,可以每次取三个根结点权值最小的树 

(2)计算ko=(n一1)mod(k一1);若ko≠O,则添加k—l—k个权值 

作子树,构造一棵新的三叉树,算法思路如下。 

为0的结点,并作为k_l_k,棵树添加到F中,否则不用添加。 

(1)根据给定的n个权值{w ,w ,w 一,w 一,w )构成n 

(3)在F中选k棵根结点权值最小的树作子树,构造一棵新 

棵三叉树的初始集合F={T。,T2, ,…,T。…,T },其中每棵三叉 

的k又树,其根结点的权值为所有子树根结点的权值之和,并在 

树T|中只有—个权值为w.的根结点,它的左、中、右子树均为空。 

F中删除这k棵树,且将新得到的k叉树加入F中。 

收稿日期:2013~7一l6 

作者简介:郑文艳(1980~),女,硕士,讲师,主要研究方向:Petri网应用。 


本文标签: 权值 算法 结点 编码 构造