哈夫曼樹的特點:①權值越大,離根節點越近;②樹中沒有度為1的結點,成為正則(嚴格)二叉樹;③樹的帶權路徑長度(wpl)最短。
應用於平常的壓縮檔案,是最基本的壓縮編碼。其原理是:如在網上傳送檔案在計算機中需要將檔案中的字元轉化成計算機語言(01語言),根據傳送的檔案中每個字元出現的頻率(即權值)構造哈夫曼樹,左樹為0,右樹為1,從而可以很有效地壓縮檔案。
注:哈夫曼編碼是字首碼編碼,過在解碼時不會出現歧義。
字首編碼:每乙個字元轉化成01語言後,都不是檔案中的任何其他字元的字首(如:a:0,b如果是00,則出現歧義,在解碼時00不知該解碼為aa還是b,這就不是字首編碼)
原因:因為哈夫曼樹中,任意字元都只出現在葉結點,通往任一葉結點的路徑都不可能通往其他葉結點,所以每個字元的編碼都是唯一的,而且解碼的過程是一次次從根節點走向葉結點的過程。
根據使用頻率為5個字元設計的哈夫曼編碼,不可能是(c)
a.111,110,10,01,00 b.000,001,010,011,1 c.100,11,10,1,0 d.001,000,01,11,10
解:哈夫曼編碼是字首編碼,c選項100,是10的字首
2.假設哈夫曼二叉樹只有0度和2度結點,根據使用頻率為5個字元設計哈夫曼編碼,則00,100,101,110,111為什麼不可能是其編碼?
3.設有13個值組成一棵哈夫曼樹(正則二叉樹),則哈夫曼樹共有25
個結點(葉結點數=2度結點數+1)
4.假設哈夫曼樹只有0度和2度結點,有n個葉結點的哈夫曼樹總結點為2n-1
個。5.從任意一結點出發到根的路徑上所經過的節點序列按其關鍵有序的是(d)
a.二叉排序樹 b.平衡二叉樹 c.哈夫曼樹 d堆
解:①二叉排序樹和平衡二叉樹都是中序有序,左《跟《右;②而哈夫曼樹每次合併構成新的節點,根節點是其兩個兒子結點的權值之和,只有當權值全為正數時才成立;③對要求父節點要比兒子節點都要大(小),所以從任意結點出發到根結點的過程,都死由小到大(或由大到小)有序的。
特點:
①堆的資料結構是完全二叉樹。
②大根堆、小根堆(大頂堆、小頂堆):根的值比左右兒子節點的值都大(小)
③排序思想:將乙個無序的序列調整為乙個堆,就可以找出這棵樹的最大(最小值),然後遞迴進行排序。
④堆與優先順序樹相似,都要求根結點要比左右兒子結點要大(小)(14年考到過一次)。
⑤時間複雜度:o(nlog₂n)
⑥空間複雜度o(1):空間複雜度與問題的規模、演算法輸入、以及演算法函式本身有關
⑦從根結點到任意葉結點(從任意葉結點到根節點)所經過的結點是有序的
⑧適用於關鍵字很多的場景,典型的例子就是,從10000個關鍵字中選出10個最小的,這種情況用堆排序最好。
與優先順序樹對比:
·約定優先值低的優先順序高
·優先順序樹每個結點儲存乙個元素
·根節點的優先順序大於(或小於)其兒子結點,即越接近根節點優先順序越高
·根節點優先順序高於兒子結點,則成為極大優先順序樹,反之成為極小優先順序樹。
例如:序列
堆的插入如完全二叉樹的插入一般,只能在葉子節點上插入,並重新調整新的堆:
如:刪除97,
一直往以97為根的左子樹走,若最小左子樹有右兒子r,則將97交換與r交換,若最小左子樹只有左兒子l,則將97與l交換
。反正是交換到最後面的葉子結點
1、特點:①屬於外部排序;
②其實就是k叉哈夫曼樹;
③每個記錄(結點)都需要進行兩次i/o操作;
④可算出所有結點代表的歸併段總的i/o運算元=書的帶權路徑長度。
2、例題:由置換-選擇排序的出9個對歸併段,其長度(記錄個數)依次為:9,30,12,18,3,17,2,6,24。
首先,記錄個數進行排序得:
然後,建立3叉哈夫曼樹:(計算帶權路徑長度時只計算葉結點即可)
1、特點:①k路歸併敗者樹的高度h=[log₂k]+1(向上取整,注:高度不包括最上層選出的結點),選出最值需要log₂k次。
②建樹時間複雜度:o(klog₂k),取最值時間複雜度:o(log₂k),空間複雜度o(1)
③排序思想:想用乙個較大的時間複雜度將待排序的關鍵字簡稱一顆滿足要求的樹,從中取出乙個關鍵字時,將新的關鍵字放在剛取出的關鍵字的位置,如此只會在一點上對樹的結構造成破壞,不會影響全域性,只需花較小的時間複雜度進行區域性調整,恢復結構,從而降低時間複雜度。(這是所有有關樹的排序的精髓)。簡單來說:
建樹——>插入、刪除——>區域性調整,恢復結構。
2、建立敗者樹:
設5個有序歸併段:f0 f1 f2 f3 f4,依次取各歸併段的第乙個記錄:
17,5,10,29,15;對應序號為0,1,2,3,4
3、調整敗者樹:
取出上述所得最小值5,用f1歸併段中5的下乙個關鍵字放在原來5的位置,再進行調整。
資料結構與演算法知識總結(二)
下面對常見的資料結構和常用演算法知識進行總結。我們知道資料結構研究物件可以分為邏輯資料結構和儲存 物理 資料結構兩種。但對資料結構進行分類,資料結構可分為很多種,如按照資料的邏輯結構對其進行簡單的分類,可以分為線性結構和非線性結構,而且還可以對這兩種結構進行細分,那就是平時所說的常見的人八大資料結構...
資料結構與演算法 知識總結二
一 堆疊的特點 後進先出。堆疊是一種特殊的線性表。簡稱為棧,是限定只能在表的一端進行插入和刪除操作的線性表。允許插入和刪除的一端為 棧頂 另一端為 棧底 將元素插入棧頂的稱為 入棧 進棧或壓棧 刪除棧頂元素的為 出棧 棧的兩種儲存結構 1 順序棧 採用順序結構儲存 2 鏈棧 採用鏈式結構儲存 堆疊的...
有關資料結構的知識17 5 1清北
1 include2 include3 include4 include5 include6 include7 include89 using namespace std 1011 過載運算子 12struct rec13 20 g,gg 21 鍊錶 22int v maxn next maxn c...