b樹的構造c C語言 資料結構 哈夫曼樹的性質

2021-10-13 18:46:24 字數 1366 閱讀 7611

基本概念

(1)路徑和路徑長度

若在一棵樹中存在著乙個結點序列k1、k2、…、kj,使得ki是ki+1的雙親(1≤i1到kj的路徑(path)。因樹中每個結點只有乙個雙親結點,所以它也是這兩個結點之間的唯一路徑。從k1到kj所經過的分支數稱為這兩點之間的路徑長度(path length),它等於路徑上的結點數減1。如在圖6-9(a)所示的二叉樹中,從樹根結點a到葉子結點g的路徑為結點序列a、e、f、g,路徑長度為3。

(2)結點的權和帶權路徑長度

在許多應用中,常常將樹中的結點賦上乙個有著某種實際意義的實數,我們稱此實數為該結點的(weight)。結點的帶權路徑長度(weighted path length,wpl)規定為從樹根結點到該結點之間的路徑長度與該結點上權的乘積。

(3)樹的帶權路徑長度

樹的帶權路徑長度定義為樹中所有葉子結點的帶權路徑長度之和,通常記為:

其中n表示葉子結點的數目,w

i和li分別表示葉子結點ki的權值和樹根結點到ki之間的路徑長度。

哈夫曼樹的定義

哈夫曼樹(huffman tree)又稱作最優二叉樹。它是n個帶權葉子結點構成的所有二叉樹中,帶權路徑長度wpl最小的二叉樹。因為構造這種樹的演算法最早是由哈夫曼於2023年提出的,所以被稱之為哈夫曼樹。

例如,有四個葉子結點a、b、c、d,分別帶權為9、4、5、2,由它們構成的三棵不同的二叉樹(當然還有其他許多種)分別如圖6-11(a)、6-11(a)和6-11(c)所示。

這三棵二叉樹的帶權路徑長度wpl分別為:

(a) wpl=9×2+4×2+5×2+2×2=40

(b) wpl=4×1+2×2+5×3+9×3=50

(c) wpl=9×1+5×2+4×3+2×3=37

其中圖6-11(c)樹的wpl最小,此樹就是哈夫曼樹。

從上面可以看出,根據n個帶權葉子結點所構成的二叉樹中,滿二叉樹或完全二叉樹不一定是最優二叉樹。權值越大的結點離樹根越近(即路徑長度越短)的二叉樹才是最優二叉樹。

1.除葉結點外,每個結點的度數都為2

2.葉結點數比非葉結點數多1

例:哈夫曼樹有10個葉子結點,該樹共有19個結點

資料結構 哈夫曼樹的構造和哈夫曼編碼06

哈夫曼編碼的 實現對於初學資料結構的同學可能會有些困難,沒有必要灰心,其實沒啥,學習就猶如攀登一座又一座的山峰,每當我們攻克乙個難點後,回首來看,也不過如此嘛。我們要做的就是不斷的去攀越學習上的山峰 不斷的超越過去的自己。尤其是我們程式設計師,不進則退,中國最不缺的就是人,肯定不缺替代你的程式設計師...

哈夫曼樹 (c語言)資料結構

include include include define n 100 typedef struct hfmshfmsnode typedef char hfmscode 動態分配陣列儲存哈夫曼編碼 定義結構體型別 void select hfmsnode ht,int len int s1,in...

構造哈夫曼樹演算法C C

一 哈夫曼樹的基本概念 最優二叉樹也稱哈夫曼樹,是指對於一組帶有確定權值的葉節點,構造的具有最小帶權路徑長度的二叉樹。二 哈夫曼樹的結構 假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。n個權值分別設為 w1 w2 wn,則哈夫曼樹的構造規則為 1 將w1 w2 wn看成是有n 棵樹的森林 每棵樹...