博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈夫曼树
阅读量:7078 次
发布时间:2019-06-28

本文共 620 字,大约阅读时间需要 2 分钟。

 

给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。

 

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:

 

(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

 

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

 

(3)从森林中删除选取的两棵树,并将新树加入森林;

 

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
[2]

 

 

来自 

 

看图更易理解,,

 

与是的算法 从某个顶点出发,首先访问这个顶点,然后找出刚访问这个的第一个未被访问的邻,然后再以此邻为顶点,继续找它的下一个新的顶点进行访问,重复此步骤,直到所有结点都被访问完为止。 从某个顶点出发,首先访问这个顶点,然后找出这个结点的所有未被访问的邻接点,访问完后再访问这些结点中第一个邻接点的所有结点,重复此方法,直到所有结点都被访问完为止。 可以看到两种方法最大的区别在于前者从顶点的第一个邻接点一直访问下去再访问顶点的第二个邻接点;后者从顶点开始访问该顶点的所有邻接点再依次向下,一层一层的访问。

转载于:https://www.cnblogs.com/xiao-fang/p/3348359.html

你可能感兴趣的文章
MySQL常用操作
查看>>
[原]Winform自定义控件在网页上的应用
查看>>
重载,重写和super
查看>>
理解作用域(引擎,编译器,作用域)
查看>>
Uva 1625,颜色的长度
查看>>
centos7.2环境下安装smokeping对网络状态进行监控
查看>>
通达OA系统myisam转innodb引擎
查看>>
fiddler启用过滤规则只显示想要的接口数据
查看>>
读书-每天为自己打个勾-郭腾尹
查看>>
go标准库的学习-crypto/rand
查看>>
mybatis在xml文件中处理大于号小于号的方法
查看>>
初次安装linux系统
查看>>
UVA136 Ugly Numbers
查看>>
tomcat启动报错The JRE could not be found.Edit the server and change the JRE location
查看>>
BZOJ2843:极地旅行社(LCT)
查看>>
win7中chm无法显示
查看>>
正则表达式问题观看
查看>>
jQuery方式事件冒泡的2个方法
查看>>
[教程]MongoDB 从入门到进阶 (aggregation数据库状态)
查看>>
查看linux是ubuntu还是centos
查看>>