1 / 17

外張樹

外張樹. 外張樹是一種二元搜尋樹. 藍色區域所有的鍵值都 ≥ 20. 請注意,兩個擁有相同數值的鍵值,可能相距遙遠. BST 規則: 條目只儲存於內部節點上 儲存於 v 左子樹節點的鍵值,小於等於 v 所儲存的鍵值 儲存於 v 右子樹節點的鍵值,大於等於 v 所儲存的鍵值 中序走訪會依順序回傳鍵值. 黃色區域所有的鍵值都 ≤ 20. 在外張樹中進行搜尋 : 一開始與在 BST 中相同. 搜尋會在樹中向下前進,直到找到項目或達到外部節點為止 例子 : 搜尋鍵值 11. BST 的搜尋範例 ( 續 ). 搜尋鍵值 8 ,終止於內部節點.

chana
Download Presentation

外張樹

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. 外張樹 外張樹

  2. 外張樹是一種二元搜尋樹 藍色區域所有的鍵值都 ≥ 20 請注意,兩個擁有相同數值的鍵值,可能相距遙遠 • BST規則: • 條目只儲存於內部節點上 • 儲存於v左子樹節點的鍵值,小於等於v所儲存的鍵值 • 儲存於v右子樹節點的鍵值,大於等於v所儲存的鍵值 • 中序走訪會依順序回傳鍵值 黃色區域所有的鍵值都≤ 20 外張樹

  3. 在外張樹中進行搜尋:一開始與在BST中相同 • 搜尋會在樹中向下前進,直到找到項目或達到外部節點為止 • 例子:搜尋鍵值11 外張樹

  4. BST的搜尋範例 (續) • 搜尋鍵值8,終止於內部節點 外張樹

  5. 外張樹會在每次操作之後進行旋轉 (即便是搜尋) • 新的操作:外張 • 外張會利用旋轉將節點移動到根節點 • 向右旋轉 • 令節點y的左子節點x成為y的父節點,y則成為x的右子節點 • 向左旋轉 • 令節點x的右子節點y成為x的父節點,x則成為y的左子節點 外張樹

  6. 外張: • 「x是左左孫節點」意指x是其父節點的左子節點,而後者本身也是其父節點的左子節點 • p 為 x的父節點,g 為 p的父節點 外張樹

  7. 各種外張情形的視覺化表示 zig zig zig zig 外張樹

  8. 外張範例 1. (旋轉前) • 令 x = (8,N) • x為其父節點的右子節點,其父節點則為其祖父節點的左子節點 • 繞著p向左旋轉,然後繞著g向右旋轉 2. (第一次旋轉後) 3. (第二次旋轉後) x 還不是根節點,所以我們會再次進行外張 外張樹

  9. 2. (旋轉後) 1. (進行旋轉前) x 為根節點了,所以停止 外張範例(續) • 現在 x 是根節點的左子節點 • 繞著根節點向右旋轉 外張樹

  10. 外張的範例結果 之前 • 樹可能不會更平衡 • 例如外張 (40,X) • 之前,最淺的葉節點深度為3,最深的為7 • 之後,最淺的葉節點深度為1,最深的為8 第一次外張後 第二次外張後 外張樹

  11. 外張樹的定義 • 外張樹是一種節點在存取 (搜尋或更新) 之後會被外張的二元搜尋樹 • 所存取之最深的內部節點會被外張 • 外張花費 O(h) 時間,其中 h 為樹的高度 – 在最糟狀況下仍為 O(n) • O(h) 次旋轉,每次為 O(1) 外張樹

  12. 外張樹與有序字典 • 在每次操作之後,有哪些節點會被外張? 外張樹

  13. 外張樹的攤銷分析 • 每次操作的執行時間正比於進行外張的時間 • 定義 rank(v) 為 以 v 為根節點之子樹上節點數目的對數 (以 2 為底) • 時間成本:zig = $1, zig-zig= $2, zig-zag= $2 • 因此,外張深度為d的節點,成本 = $d. • 想像我們在外張樹的每個節點 v 上,都存了 rank(v) 元的電子幣 (只是為了分析之便) 外張樹

  14. 每次 zig 的成本 • 在 x 進行一次 zig 成本最多為 rank’(x) - rank(x): • 成本 = rank’(x) + rank’(y) - rank(y) - rank(x) < rank’(x) - rank(x). 外張樹

  15. 每次 zig-zig 與 zig-zag 的成本 • 在 x 進行一次 zig-zig 或 zig-zag 的成本最多為 3(rank’(x) - rank(x)) - 2. • 證明:參見書籍 zig zig zig zig 外張樹

  16. 外張的成本 • 在根節點為 r 的樹中,外張深度為 d 的節點 x 的成本: • 最多為 3(rank(r) - rank(x)) - d + 2: • 證明:外張 x 會花費 d/2 次外張的次步驟: 外張樹

  17. 外張樹的效能 • 回想:節點的排位是其大小的對數 • 因此,任何外張操作的攤銷成本為 O(log n) • 事實上,此項分析對於任何合理的rank(x)定義來說都是成立的 • 這意味著外張樹確實可以進行調整,以在某些情況下用遠快於 O(log n) 的速度對於常用的項目進行搜尋 外張樹

More Related