哈夫曼树解压与压缩

哈夫曼树解压与压缩

ID:30275996

大小:134.00 KB

页数:14页

时间:2018-12-28

哈夫曼树解压与压缩_第1页
哈夫曼树解压与压缩_第2页
哈夫曼树解压与压缩_第3页
哈夫曼树解压与压缩_第4页
哈夫曼树解压与压缩_第5页
资源描述:

《哈夫曼树解压与压缩》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案哈夫曼树的压缩与解压1.算法简要描述1.哈夫曼算法1.哈弗曼算法是根据给定的n个权值{w1,w2,w3.......wn},构造由n棵二叉树构成的深林F={T1,T2,。。。。Tn},其中每个二叉树Ti分别都是只含有一个权值wi的根结点,其左右子树为空(i=1,,,,,,2)。2.在深林F中选取其根结点的权值最小的两棵二叉树,分别作其左右子树构造一颗新的二叉树,并置这棵新的二叉树根结点的权值为其左右子树的根结点之和。3.从F中删去这两棵二叉树,同时刚新生成的二叉树加入到深林F中。4.重复2,3,步骤,直至深林F中只含有一颗二叉树为止

2、。2.哈夫曼树的实现函数StringEnCode(CharTypech):表示哈夫曼树已存在,返回字符ch的编码。函数LinkListUnCode(StringstrCode):表示对哈夫曼树进行译码,返回编码前的字符序列。根据算法可以看出,在具有n个结点权值的哈夫曼树的构造过程中,每次都是从F中删去两棵树,增加一棵树,即每次结束后减少一棵树,经过n-1次处理后,F中就只剩下一棵树了。另外,每次合并都要产生一个新的结点,合并n-1次后共产生了n-1个新结点,并且这n-1个新节点都是具有左右子树的分支结点。则最终得到的哈夫曼树

3、中共有2n-1个结点,并且其中没有度为1的分支结点,最后一次产生的新结点就是哈夫曼树的根结点。源代码中创建了一个哈夫曼树结点类,其中有数据成员weight,parent,leftChild,rightChild分别代表了权值,双亲,左孩子,右孩子。在哈夫曼树类中有数据成员*nodes,*LeafChars,*LeafCharCodes,curPos,num,分别用来存储结点信息,叶结点字符信息,叶结点字符编码信息,译码时从根结点到叶结点路径的当前结点,叶结点个数。哈夫曼树类中含有多个函数,有构造函数,析构函数等。由函数HuffmanTree(C

4、harTypech[],WeightTypew[],intn)来构造由字符,权值,和字符个数构造哈夫曼树,在根据哈夫曼算法很容易实现哈夫曼类的函数以及构造函数。在在算法中,求叶结点字符的编码时,需要从叶结点出发走一条从高叶结点到根结点的路径,而编码却是从根结点出发到叶结点的路径,由左分支为编码0,右分支为编码1,得到的编码,因此从叶结点出发到根结点的路径得到的编码是实际编码的逆序,并且编码长度不确定,又由于可以再线性链表中构造串,因此将编码的信息储存在一个线性立案标准,每得到一位编码都将其插入在线性链表的最前面。在求某个字符的编码是由函数EnC

5、ode(CharTypech)来求,返回字符编码。在进行译码时,用一个线性链表存储字符序列,由函数Decode(StringstrCode)来求,对编码串strCode进行译码,返回编码前的字符序列。函数Compress()用哈夫曼编码压缩文件。函数Decompress()解压缩用哈夫曼编码压缩的文件。精彩文档实用标准文案在主函数中有两个选项,一个是选择编码压缩,一个是解压。在函数中使用了文件输入输出流,我们可以选择要压缩的文件名输入,在选出压缩文件保存的地方和文件类型,将压缩所得到的文件存储在另一个文件中,解压也是如此。1.源代码#ifnde

6、f__HUFFMAN_TREE_NODE_H__#define__HUFFMAN_TREE_NODE_H__//哈夫曼树结点类模板templatestructHuffmanTreeNode{WeightTypeweight;//权数据域unsignedintparent,leftChild,rightChild;//双亲,左右孩子域HuffmanTreeNode();//无参数的构造函数模板HuffmanTreeNode(WeightTypew,intp=0,intlChild=0,intrChild=0);/

7、/已知权,双亲及左右孩子构造结构};//哈夫曼树结点类模板的实现部分templateHuffmanTreeNode::HuffmanTreeNode()//操作结果:构造空结点{parent=leftChild=rightChild=0;}templateHuffmanTreeNode::HuffmanTreeNode(WeightTypew,intp,intlChild,intrChild)//操作结果:构造一个权为w,双亲为p

8、,左孩子为lChild,右孩子为rChild的结点{weight=w;//权parent=p;//双亲leftChild=lChild;//左孩子ri

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。