資料結構之哈夫曼樹 紅黑樹

2021-08-04 20:31:09 字數 1604 閱讀 2769

1、哈夫曼樹又稱為最優二叉樹或帶權路徑長度最短的二叉樹。其顯著的特點是帶權值的節點都是葉子節點,權值越小的節點,其到根節點的路徑長度越長,反之,則越短。哈夫曼樹可以有效的應用於壓縮,我們可以把待壓縮的檔案中的字元的出現次數作為權值,權值越大的,距離根節點越近,字元編碼越少。一般在節點左邊的路徑可用「0」表示,在節點右邊的路徑用「1」表示。詳細可參照:

2、二叉樹作為資料儲存的工具具有重要的優勢:可以快速地找到乙個給定關鍵字的資料項,並且可以快速地插入和刪除資料項。其他的資料儲存結構,例如陣列、有序陣列以及鍊錶,執行這些操作卻很慢。因此,二叉樹似乎是理想的資料儲存結構。

遺憾的是,二叉搜尋樹有乙個很麻煩的問題。如果樹中插入的是隨機資料,則執行效果很好。但是,如果插入的是有序的資料(17、21、28、36.....)或者逆序的資料(36,28,21,17,......),速度就變得特別慢。因為當前插入的數值有序時,二叉樹就是非平衡的了。而對於非平衡樹,它的快速查詢(插入、刪除)指定資料項的能力就喪失了。

解決非平衡樹問題的方法:紅-黑樹,它是增加了某些特點的二叉搜尋樹,此外,還有2-3-4樹,2-3樹,外部儲存等。

當樹沒有分支時(只有左子樹或右子樹的情況下),它其實就是乙個鍊錶。在這種情況下,查詢的速度下降到o(n),而不是平衡樹的o(logn)。對於隨機資料的實際數量來說,一棵樹特別不平衡的情況是不大可能的。但是,可能會有一部分有序資料使樹部分非平衡。搜尋部分非平衡樹的時間介於o(n)~o(logn)之間,這取決於樹的不平衡程度。

為了能以較快的時間o(logn)來搜尋一棵樹,需要保證樹總是平衡的。紅-黑樹的平衡是在插入的過程中(刪除時也是,但暫時忽略這個問題)取得的。對於乙個要插入的資料項,插入例程要檢查不會破壞樹一定的特徵。如果破壞了,程式就會進行糾正,根據需要更改樹的結構。通過維持樹的特徵,保持了樹的平衡。

紅-黑樹特徵:

1、節點都是有顏色的;(顏色便於標記,在節點類中增加乙個資料字段,可以是boolean型的(isred),以此來表示顏色的資訊)

2、在插入和刪除的過程中,要遵循保持這些顏色的不同排列的規則;

紅-黑規則:

(1)每個節點或者是黑色,或者是紅色。

(2)根節點是黑色。

(3)每個葉子節點(nil)是黑色。[注意:這裡葉子節點,是指為空(nil或null)的葉子節點!]

(4)如果乙個節點是紅色的,則它的子節點必須是黑色的。

(5)從乙個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。

規則5的另一種陳述是所有從根到葉子節點路徑上的黑色高度必須相同。所謂的黑色高度是指在從根到葉節點的路徑上的黑色節點的數目。

如果存在重複關鍵字。則把有相同關鍵字的資料項分配到其他也有相同關鍵字資料項的兩側很重要。比如關鍵字的序列為50,50,50,要把第二個50放到第乙個50的右邊,並且把第三個50放到第乙個50的左邊。否則,樹將不平衡。在插入演算法中,用某種隨機的過程處理相同關鍵字節點的分配問題。但是,如果要找到所有相同的關鍵字,插入過程就變得複雜了。因此不允許有關鍵字相同的資料項能使問題變得簡單一些。

關於紅黑樹需要注意以下幾點:

a)新插入的節點是紅色的;

b)關於插入的處理:換色和旋轉。具體如下:

如果叔叔節點是紅色的,則換色;《換色》

如果叔叔節點是黑色,則細分為ll,lr,rr,rl四種情況;《旋轉》

具體見:

資料結構之哈夫曼樹

現在,我們經常會使用壓縮和解壓縮軟體來處理文件,因為它除了可以減少文件在磁碟上的空間外,還有重要的一點,就是我們可以在網路上一壓縮的形式傳輸大量資料,是的儲存和傳遞都更加高效。那麼壓縮而不出錯是如何做到的呢?簡單說,就是把我們要壓縮的文字進行重新編碼,今天我們就介紹一種最基本的壓縮編碼方法 哈夫曼編...

資料結構 樹 哈夫曼樹

下列敘述錯誤的是 b a.一棵哈夫曼樹的帶權路徑長度等於其中所有分支結點的權值之和 b.當一棵具有n 個葉子結點的二叉樹的wpl 值為最小時,稱其樹為哈夫曼 樹,其二叉樹的形狀是唯一的 c.哈夫曼樹是帶權路徑長度最短的樹,路徑上權值較大的結點離根較近 d.哈夫曼樹的結點個數不能是偶數 對n n 2 ...

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...