哈夫曼编码
哈夫曼编码虽然简单,但是是一个非常重要的编码方式,它解决了数据存储的一个非常重要的问题:压缩!它的编码方式是最优的,无损的,尤其在图像中使用的非常多。下面讲下它的原理。
编码方式
哈夫曼编码的构造是依据权值的大小来实现的。首先根据权值构造哈夫曼树,然后对哈夫曼树进行逆向遍历,从而找到每个节点的编码方式。
例如:
abbcccdddde这个是一个字符串,一共有5...
分类:
编程语言 时间:
2014-11-27 06:48:42
阅读次数:
536
树-堆结构练习——合并果子之哈夫曼树Time Limit: 1000MS Memory limit: 65536K题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重...
分类:
其他好文 时间:
2014-11-23 15:46:39
阅读次数:
256
/*博客地址black4yl.blog.51cto.com*/
#include"stdio.h"
#include"malloc.h"
#include"string.h"
typedefchar*HuffmanCode;/*动态分配数组,存储哈夫曼编码*/
typedefstruct
{
charname;/*存放名称*/
unsignedintweight;/*用来存放各个结点的权值*/
unsignedintparent,LChild..
分类:
其他好文 时间:
2014-11-20 23:57:38
阅读次数:
312
作者:jostree转载请注明出处http://www.cnblogs.com/jostree/p/4096079.html使用优先队列实现,需要注意以下几点:1.在使用priority_queue时,内部需要存储哈夫曼树节点的指针,而不能是节点。因为构建哈夫曼树时,需要把其左右指针指向孩子,而如果...
分类:
其他好文 时间:
2014-11-20 23:26:21
阅读次数:
297
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的...
分类:
其他好文 时间:
2014-11-19 21:47:35
阅读次数:
219
为了方便快捷高效率的求得集合中权值最小的2个元素,我采用堆数据结构,它可以以O(logn)的复杂度取得n个元素中的最小值。为了绕过对堆的实现,我采用标准模板库中的相应标准模板——优先队列。利用语句:priority_queue Q; 建立一个保存元素为int的堆Q,但是此时建立的堆默认是大顶堆...
分类:
其他好文 时间:
2014-11-19 17:43:25
阅读次数:
194
??
改编自下面是证明链接(英文)
http://algoviz.org/OpenDSA/Books/OpenDSA/html/HuffProof.html
====================
设buildHuff是创建哈夫曼树的函数。
引理1:给定W = {w1, w2, w3...,
wn} (n >= 2), 以此集合构建相应的哈夫曼树。令wi, wj 是W中权重最...
分类:
其他好文 时间:
2014-11-18 13:35:03
阅读次数:
350
一、哈夫曼树的概念和定义
什么是哈夫曼树?
让我们先举一个例子。
判定树:
在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来:
[cpp] view
plaincopy...
分类:
其他好文 时间:
2014-11-13 18:56:34
阅读次数:
371
#include
#include
#include
#include
#define N 100
typedef struct
{
int weight;
int parent, lchild, rchild;
}hafuman;
typedef struct
{
char data[N]; //字符数据
char copy[N][10*N];//编码
}bianma;
v...
分类:
编程语言 时间:
2014-11-11 19:14:11
阅读次数:
328
介绍哈夫曼编码之前先介绍一下哈弗曼树:哈夫曼树:哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3...
分类:
其他好文 时间:
2014-11-11 07:00:57
阅读次数:
260