小蚂蚁学习数据结构(22)——哈夫曼编码的认识
2016-01-22 18:01
330 查看
赫夫曼树(Huffman)——带权路径长度最短的树(又称最优树)
定义:
路径:
从树中一个结点到另一个结点之间的分支构成这两个结点间的路径
路径长度:
路径上的分支数
树的路径长度:
从树根到每一个结点的路径长度之和
结点的带权路径长度:
从该结点到树根之间的路径长度与结点上权的乘积
树的带权路径长度:
树中所有带权节点的路径长度之和
赫夫曼树的定义:
有n个叶子结点,每个结点带有权值,构成一个带权路径最小的二叉树,就称为赫夫曼树。(自己定义的)
构造赫夫曼树的方法:
构造赫夫曼树的步骤:
1,给定的n个权值{w1,w2,w3……wn},构造n棵只有根结点的二叉树,令其权值为wj。
2,在森林中选取两个根结点权值最小的树作为左右子树,构造一个新的二叉树,将新的二叉树根节点权值为其左右子树根结点权值之和
3,在森林中删除这两个树,同时将新得到的二叉树加入森林中
4,重复上述两步,直到只含有一棵树为止,这棵树就是赫夫曼树
赫夫曼编码:数据通信用的二进制编码
思想:
根据字符出现频率编码,是电文总长最短
编码方法:
根据上面创造赫夫曼树的步骤创建赫夫曼树,然后左分支为0,又分支为1。每个字符的编码就是从根到每个叶子的路径上得到的0、1序列。
译码方法:
从赫夫曼树树根开始,从待译码电文中逐位取码。若编码是0,则向左走;若编码是1,则像右走,一旦到达了叶子节点,则翻译出一个字符;再从根出发,直到电文结束。
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog
定义:
路径:
从树中一个结点到另一个结点之间的分支构成这两个结点间的路径
路径长度:
路径上的分支数
树的路径长度:
从树根到每一个结点的路径长度之和
结点的带权路径长度:
从该结点到树根之间的路径长度与结点上权的乘积
树的带权路径长度:
树中所有带权节点的路径长度之和
赫夫曼树的定义:
有n个叶子结点,每个结点带有权值,构成一个带权路径最小的二叉树,就称为赫夫曼树。(自己定义的)
构造赫夫曼树的方法:
构造赫夫曼树的步骤:
1,给定的n个权值{w1,w2,w3……wn},构造n棵只有根结点的二叉树,令其权值为wj。
2,在森林中选取两个根结点权值最小的树作为左右子树,构造一个新的二叉树,将新的二叉树根节点权值为其左右子树根结点权值之和
3,在森林中删除这两个树,同时将新得到的二叉树加入森林中
4,重复上述两步,直到只含有一棵树为止,这棵树就是赫夫曼树
赫夫曼编码:数据通信用的二进制编码
思想:
根据字符出现频率编码,是电文总长最短
编码方法:
根据上面创造赫夫曼树的步骤创建赫夫曼树,然后左分支为0,又分支为1。每个字符的编码就是从根到每个叶子的路径上得到的0、1序列。
译码方法:
从赫夫曼树树根开始,从待译码电文中逐位取码。若编码是0,则向左走;若编码是1,则像右走,一旦到达了叶子节点,则翻译出一个字符;再从根出发,直到电文结束。
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总