赫夫曼樹(Huffman)——帶權路徑長度最短的樹(又稱最優樹)編碼
定義:spa
路徑:.net
從樹中一個結點到另外一個結點之間的分支構成這兩個結點間的路徑翻譯
路徑長度:blog
路徑上的分支數ci
樹的路徑長度:get
從樹根到每個結點的路徑長度之和博客
結點的帶權路徑長度:二叉樹
從該結點到樹根之間的路徑長度與結點上權的乘積二進制
樹的帶權路徑長度:
樹中全部帶權節點的路徑長度之和
赫夫曼樹的定義:
有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