本文主要是介绍hufuman 编码实现(赫夫曼编码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先吐槽(可以跳过,直接正题哦)
今天闲来没事,玩了玩hufuman的编码方式。在当今tianchao的“监护”中成长。TC就像”父母“一样,做什事得商量,什么能做,什么不能做,对我们了如指掌(哈哈:现在才知道父母)当初的良苦用心)毫无自由。假如我们和小妹妹谈恋爱了,和妹妹的通信为了不让TC知道,我们该怎么加密呢?我想到了hufuman编码方式,for our free ,我们今天就c语言方式实现吧,let‘s go!!!
ps. hufuman编码主要用途是压缩哦,这个压缩意义很广的。
hufuman的编码实现
理论:
那么,如何构造赫夫曼树呢?赫夫曼最早给出了一个带有一般规律的算法
俗称赫夫曼算法。先叙述如下:
(1)根据给定的n个权值{w1,w2,w3,...,wn}构成n棵 二叉树
集合F={T1,T2,...,Tn},其中每棵树Ti只有一个带权的Wi的根节点,
其左右子树均空。
(2) 在F中选取两棵树结点的权值最小的树作为左右子树构造yike新的
二叉树,且置新的二叉树的根节点的权值为其左右树上的根节点
的权值之和。
(3) 在F中删除这两棵树,同时将新得到的二叉树加入F中
(4)重复(2)(3),直到F只含一棵树为止。这棵树就是赫夫曼树。(引用《数据结构c语言版》)
实现: 1.先构造一个优先队列,队列中放入256棵树也就是F集合(其实是256个asII码值)
以每棵树的权值升序排列
2.根据理论中的2方法,在优先队列中取出元素构造hufuman树。
3.加密 (自底而上)
4.解密 (自顶而上)
这篇关于hufuman 编码实现(赫夫曼编码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!