闲来无事,工作间隙开开小差,翻了下桌子旁的《计算机算法设计与实现》,随机翻到了哈夫曼树和哈夫曼算法这一段

就来简单的谈下我对哈夫曼算法的理解

    首先必须要说到的是几个相关概念:

           前缀码编码

           完全二叉树

            路径

            节点

           权值

           简单概率

算法之哈夫曼树

其中,n表示叶子结点的数目,wi和li分别表示叶子结点ki的权值和树根结点到叶子结点ki之间的路径长度。
赫夫曼树(哈夫曼树,huffman树)定义:
在权为w1,w2,…,wn的n个叶子结点的所有二叉树中,带权路径长度WPL最小的二叉树称为赫夫曼树或最优二叉树。
最小的耗时最小,即算法的复杂度最低,o(n)最小(人类总是希望重复的劳动少干,最少懒人是这样想的)

   好了,现在我们可以举一个例子:

  例:有4 个结点 a, b, c, d,权值分别为 7, 5, 2, 4,试构造以此 4 个结点为叶子结点的二叉树。


算法之哈夫曼树

WPL=7´2+5´2+2´2+4´2= 36

算法之哈夫曼树

WPL=7´3+5´3+2´1+4´2= 46

算法之哈夫曼树

WPL=7´1+5´2+2´3+4´3= 35

哈夫曼树就是最优二叉树的最优解

算法之哈夫曼树

哈夫曼树:

     满足完全二叉树的条件即为哈夫曼树,哈夫曼算法最先要经过以下几个步骤:

    1  先要构造出哈夫曼树

    2  从哈夫曼树中找到最优解(即哈夫曼算法)

    3  构造好的最优解进行哈夫曼编码

    4  编码后应用实战

代码例子就不举例了,随便什么语言都行










 


        

相关文章: