哈夫曼树及哈夫曼编码

简介:          一,引言          如上图,是一个判断体重在什么范围内的判定树,例如,学校体检的时候,我们反复用这个算法,当你输入一个体重:200斤,然后程序就开始反复判断了,经过三次判断,它发现你过重,然后重启系统了,...


   


     一,引言




        






如上图,是一个判断体重在什么范围内的判定树,例如,学校体检的时候,我们反复用这个算法,当你输入一个体重:200斤,然后程序就开始反复判断了,经过三次判断,它发现你过重,然后重启系统了,又来一个人,还是200斤,三次判断之后,又系统重启了…后面的200多个200多斤的盘子判断完了之后,来了个120的,终于是个比较正常的体重了,但是系统一判断完,系统还是重启,反复检查之后,发现你那台8086时代的电脑终于撑不住了~

 

   于是你改了下算法,换了一棵判定树,这次,先判断这个人是不是个200多斤的胖子,让后再……….

 

    想表达的就是,对于不同的判定树,它们比较的次数是不一样的.

 

   对于同一个问题,判断树的总共的比较次数是由一个条件出现的概率和问题的规模决定的.出现的概率越大,也就意味着这个条件被比较的次数越多,那么,我们就得先对这样的条件进行判断.

 

 

 

二,哈夫曼树

 

    鉴于上面的问题,我们可以用数学上很类似求加权平均数的一个公式来求,这里就不写了.还是图解一下,no picyou say a 'sha'~


  首先,列出所有根节点:



  




 

 此时,在森林中,我们将2和4删去,并将新生成的根节点6加入,

 



然后我们再从森林中选两个根节点权值最小的,如步骤二那样,将56加起来,删去57,将生成的11加入森林。。。








直到森林中只含一棵二叉树为止。



最后,我们得到:









三,哈夫曼编码


     在得到哈夫曼树之后,对哈夫曼树结点的左右分支分别置“0”和“1”就可以得到哈夫曼编码。如图:





小结:利用哈夫曼树,可以将将整体选择判断的次数降到最低,优化算法,进而将得到的哈夫曼树进行编码时,则可以将字符在传输过程中总的编码长度降到最短。



目录
相关文章
|
12天前
|
算法
哈夫曼树的题
哈夫曼树的题
|
7月前
|
存储 算法
|
10月前
|
自然语言处理 算法 搜索推荐
哈夫曼树与哈夫曼编码
本文主要介绍实现哈夫曼树和哈夫曼编码
176 1
哈夫曼树与哈夫曼编码
|
11月前
|
存储 算法 搜索推荐
哈夫曼树、哈夫曼编码和字典树
哈夫曼树、哈夫曼编码和字典树
100 0
|
11月前
|
存储
哈夫曼树和哈夫曼编码的简单实现
哈夫曼树和哈夫曼编码的简单实现
哈夫曼树和哈夫曼编码(文件压缩)
哈夫曼树和哈夫曼编码(文件压缩)
哈夫曼树与哈夫曼编码(优先队列)
哈夫曼树与哈夫曼编码(优先队列)
287 0
哈夫曼树与哈夫曼编码(优先队列)
|
存储 算法
哈夫曼树、哈夫曼编码详解
哈夫曼树、哈夫曼编码很多人可能听过,但是可能并没有认真学习了解,今天这篇就比较详细的讲一下哈夫曼树。
192 0
哈夫曼树、哈夫曼编码详解
数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码