1 / 11

AVL 樹

AVL 樹. AVL 樹的定義. AVL 樹是平衡的 AVL 樹是一種 二元搜尋樹 , 其中 對於所有 T 的內部節點 v 而言 , v 的子節點高度最多只會相差 1. AVL 樹的例子,節點旁邊顯示了其高度. AVL 樹的高度. 事實 :儲存 n 個鍵值的 AVL 樹 高度 為 O(log n). 證明 :讓我們求解 n(h) 的界限:高度為 h 之 AVL 樹最少會有多少個內部節點 我們很容易可知 n(1) = 1 與 n(2) = 2

Download Presentation

AVL 樹

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AVL樹 AVL樹

  2. AVL樹的定義 • AVL 樹是平衡的 • AVL 樹是一種二元搜尋樹,其中對於所有T的內部節點 v 而言,v 的子節點高度最多只會相差1 AVL 樹的例子,節點旁邊顯示了其高度 AVL樹

  3. AVL樹的高度 • 事實:儲存 n 個鍵值的 AVL 樹高度為 O(log n). • 證明:讓我們求解n(h) 的界限:高度為h之AVL樹最少會有多少個內部節點 • 我們很容易可知 n(1) = 1 與 n(2) = 2 • 針對 n > 2,高度為h之AVL 樹包含根節點、一個高度為n-1的AVL子樹、以及另一個高度為n-2的子樹 • 也就是說,n(h) = 1 + n(h-1) + n(h-2) • 已知 n(h-1) > n(h-2),我們可知 n(h) > 2n(h-2)。所以 n(h) > 2n(h-2), n(h) > 4n(h-4), n(h) > 8n(n-6), … (透過歸納法), n(h) > 2in(h-2i) • 求解基本狀況我們可得:n(h) > 2 h/2-1 • 取對數:h < 2log n(h) +2 • 因此AVL樹的高度為 O(log n) AVL樹

  4. AVL樹的插入 • 插入與在二元搜尋樹中相同 • 永遠透過擴展外部節點來完成 • 範例: AVL樹

  5. 三節點重構 • 令 (a、b、c) 為x、y、z的中序走訪串列 • 執行要令b成為三節點中最高的節點所需的旋轉 情形2:雙重旋轉 (c 向右旋轉,然後a 向左旋轉) (其他兩種情形是對稱的) 情形1:單一旋轉 (將 a 向左旋轉) AVL樹

  6. 插入範例(續) 未平衡… …平衡 AVL樹

  7. 重構 (以單一旋轉) • 單一旋轉: 單一旋轉 單一旋轉 AVL樹

  8. 重構 (以雙重旋轉) • 雙重旋轉: 雙重旋轉 雙重旋轉 AVL樹

  9. AVL樹的移除 • 移除一開始與二元搜尋樹相同,也就是說被移除的節點會變為空的外部節點。其父節點w可能會產生不平衡的狀況 • 例子: AVL樹

  10. 移除後的重新平衡 • 令z為從w沿樹向上走訪所遭遇到第一個未平衡的節點。此外,令y為z擁有較大高度的子節點,然後令x為y擁有較大高度的子節點 • 我們執行 restructure(x) 來復原z的平衡 • 由於此種重構有可能會破壞樹中其他較高節點的平衡,我們必須持續檢查平衡擲到達到T的根節點為止 AVL樹

  11. AVL樹的執行時間 • 單次重構為 O(1) • 使用鏈結結構的二元樹 • 尋找為 O(log n) • 樹的高度為 O(log n),不需重構 • 插入為 O(log n) • 一開始的尋找為 O(log n) • 沿著樹向上進行重構,維護高度為 O(log n) • 移除為 O(log n) • 一開始的尋找為 O(log n) • 沿著樹向上進行重構,維護高度為 O(log n) AVL樹

More Related