1 / 29

第八章 深入探討樹狀結構

第八章 深入探討樹狀結構. 目次. 8.1 m-way 搜尋樹 8.2 B-tree 8.3 動動腦時間 8.4 練習題解答. 8.1 m-way 搜尋樹. 何謂 m-way 搜尋樹? 一棵 m-way 搜尋樹,所有節點的分支度均小於或等於 m 可以是空樹 倘若 T 不是空樹,則必須具備下列的性質: 節點的型態是 n, A 0 , (K 1 , A 1 ), (K 2 , A 2 ),…, (K n , A n ) ,其中 A i 是子樹的指標 0≦i≦n< m ; n 為節點上的鍵值數, K i 是鍵值 1≦i≦n< m

anson
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. 目次 8.1 m-way 搜尋樹 8.2 B-tree 8.3 動動腦時間 8.4 練習題解答

  3. 8.1 m-way 搜尋樹 • 何謂m-way 搜尋樹? • 一棵m-way搜尋樹,所有節點的分支度均小於或等於 m • 可以是空樹 • 倘若T不是空樹,則必須具備下列的性質: • 節點的型態是 n, A0, (K1, A1), (K2, A2),…, (Kn, An),其中 Ai 是子樹的指標 0≦i≦n< m;n 為節點上的鍵值數,Ki 是鍵值1≦i≦n< m • 節點中的鍵值是由小至大排列的,因此Ki < Ki+1, 1≦i< n。 • 子樹Ai的所有鍵值均小於鍵值Ki+1,0<i< n。 • 子樹An的所有鍵值均大於Kn,而且A0的所有鍵值均小於K1。 • Ai指到的子樹,0≦i≦n亦是m-way搜尋樹。

  4. a 23, 48 d b c 55, 60 12, 17 28, 32 g f e 25 70 38 , 45 8.1 m-way 搜尋樹 (con.t) • Ex:下圖為 3-way 搜尋樹,共有12個鍵值

  5. 8.1 m-way 搜尋樹 (con.t) • 下圖為上圖中每個節點之 3-way搜尋表示法 • 由於3-way搜尋樹,每個節點的型態是 n, A0, (K1, A1), (K2, A2),…,(Kn, An),因此 a 節點的格式為 2, b, (23, c), (48, d)

  6. 5 , 7 12 , x 8.1 m-way 搜尋樹 (con.t) 8.1.1 m-way搜尋樹的加入 • 以 3-way 搜尋樹為例,依序將 5,7,12,6,8,4,3,10加入到搜尋樹,其中 x 表示目前無鍵值存在 (1) 加入5 (2) 加入7 (3) 加入12 5 , x 5 , 7

  7. 5 , 7 6 , x 4 , x 8 , 12 5 , 7 6 , x 12 , x 5 , 7 6 , x 8 , 12 8.1 m-way 搜尋樹 (con.t) (4) 加入6 (5) 加入8 (6) 加入4

  8. 5 , 7 6 , x 3 , 4 8 , 12 5 , 7 3 , 4 8 , 12 6 , x 10 , x 8.1 m-way 搜尋樹 (con.t) (7) 加入3 (8) 加入10

  9. 5 , 7 6 , x 3 , 4 8 , 12 10 , x 8.1 m-way 搜尋樹 (con.t) 8.1.2 m-way 搜尋樹的刪除 • 刪除方法與二元搜尋樹相同 • 樹葉節點:直接刪除 • 非樹葉節點:以左子樹中最大鍵值或右子樹中最小鍵值 取代之 • 假設有一棵3-way搜尋樹如下:

  10. 5 , 7 6 , x 4 , x 10,12 5 , 7 6 , x 4 , x 8 , 12 10 , x 8.1 m-way 搜尋樹 (con.t) • 刪除 3,則直接刪除 • 刪除 8

  11. 5 , 7 6 , x 4 , x 10 , x 5 , 10 6 , x 4 , x 5 , 6 4 , x 8.1 m-way 搜尋樹 (con.t) • 刪除 12 • 刪除 7 • 刪除 10

  12. 8.2 B-tree • 何謂 B-tree? • 一棵 order 為 m 的 B-tree 是一 m-way搜尋樹 • 可以是空樹 • 假若高度≧1必需滿足以下的特性: • 樹根至少有二個子節點,亦即節點內至少有一鍵值 • 除了樹根外,所有非失敗節點(即內部節點)至少有 個子節點,至多有m個子節點。此表示至少應有 –1個鍵值,至多有m–1個鍵值( 表示大於m/2的最小正整數) • 所有的樹葉節點皆在同一階層

  13. a a 30 10,30 c b b d 500 8,10 c 6,8 50,70 20 d h g e f e 6 20 15,17 70 40 40 8.2 B-tree (con.t) • 3-way搜尋樹 vs. order 為 3 的 B-tree • 左圖不屬於B-tree of order 3,主要是因為樹葉節點不在同一階層上

  14. K P P' 8.2 B-tree (con.t) • B-tree的加入方法 • 從 B-tree 中開始搜尋,假使加入的鍵值 X 在 B-tree 中找不到,則加入 B-tree 中。假設加入到 P 節點,若 • 該節點少於 m–1 個鍵值,則直接加入 • 該節點的鍵值已等於 m–1,則將此節點分為二,因為一棵order為m的B-tree,最多只能有m–1個鍵值 節點P: –1, A0, (K1, A1), …, (K –1, A –1) 節點P’:m– , A , (K +1, A +1), …, (Km, Am) 並且將K 和P'節點組成(K , P')加入其父節點。如下圖所示:

  15. a 50 b c 20 , 40 60 , 70 , 80 d f e g j h i 5,10 25,30 62,67 45,48 53,54 72,76 85,90,95 8.2 B-tree (con.t) • Ex:此處的 B-tree 為 order 5,表示最多鍵值數為 4

  16. a 50 b c 20 , 40 60 , 70 , 80 d f i e g j h 5,10 25,30 62,67 45,48 53,54 72,76 85,88,90,95 8.2 B-tree (con.t) • 加入88由於 j 節點的鍵值少於m–1即4個,則直接加入即可

  17. a 50 b c 20 , 40 60 , 70 , 80 , 90 d e f g h i j k 5,10 25,30 45,48 85,88 95,98 62,67 53,54 72,76 8.2 B-tree (con.t) • 加入98,由於 j 節點已有m–1個鍵值(即4個),因此必須將 j 節點劃分為二,j、k,然後選出K = K3 = 90,並組成(90,k)加入c節點

  18. a 50 b c 20 , 40 60 , 70 , 80 , 90 d e f g h i j k 5,10 25,30 45,48 85,88 62,67 53,54 72,76 91,95,98 a 50 b c 20 , 40 60 , 70 , 80 , 90 d e f g h i j k 5,10 25,30 45,48 85,88 62,67 53,54 72,76 91,93,95,98 8.2 B-tree (con.t) • 加入91 • 加入93

  19. a 50 , 80 m b c 90 , 95 20 , 40 60 , 70 d e f g i h j l k 5,10 25,30 45,48 85,88 62,67 53,54 72,76 91,93 98,99 8.2 B-tree (con.t) • 加入99,以同樣的方法將 k 劃分為 k,l 並組成(95, l)加入 c 節點,由於 c 節點已有 m–1個鍵值,若再加入一鍵值勢必也要劃分 c 節點為二,其為 c、m,並將(80, m)加入其父節點 a

  20. 50 20 , 30 60 , 80 10,15 25,26 35,40,45 55,59 65,70,75 85,90 8.2 B-tree (con.t) 8.2.2 B-tree的刪除方法 • 一為刪除的節點是樹葉節點 • 二為刪除的節點為非樹葉節點 • 我們以 B-tree of order 5 如下圖來說明。假設已找到相關的節點 P

  21. 50 20 , 30 60 , 80 10,15 25,26 35,40,45 55,59 65,75 85,90 8.2 B-tree (con.t) • 刪除的節點是樹葉節點 • 刪除鍵值 X 後,若 P 節點還有大於或等於–1個鍵值,則刪除完畢,因為尚符合B-tree的定義,此處的m為5。如將下圖的鍵值 70 刪除,結果為下圖所示:

  22. 50 Pf 20 , 35 60 , 80 P P' 10,15 25,30 40,45 55,59 65,70,75 85,90 8.2 B-tree (con.t) • 刪除鍵值 X 後,若P節點的鍵值小於 –1個,其不符合B-tree的定義,因此必須調整。我們分四種情況說明: (1) 找右邊最近的兄弟節點p’,若p’尚有大於或等於 個鍵值,則將取出 P 的父節點 Pf 中最大的鍵值放入 P,然後從 p’ 節點取出最小的鍵值放入 P 的父節點Pf,如將下圖的鍵值 26 刪除

  23. Pf 50 20 , 35 60 , 75 q' P 10,15 25,30 40,45 55,59 65,70 80,90 8.2 B-tree (con.t) (2) 若在 P 節點右邊找不到有一節點含有大於或等於 個鍵值時,則找其左邊的兄弟節點,若有一左兄弟節點q‘,則從 P 的父節點 Pf 取出最小鍵值放入 P,然後從 q‘ 中取出最大的鍵值放入 P 的父節點Pf。若欲刪除85,情形如下圖所示:

  24. 50 b c 20 , 30 60 , 80 e f h d g i 10,15 25,26 35,40,45 52,55,59 65,70,75 85,90 8.2 B-tree (con.t) • 刪除的節點為非樹葉節點 • 假若 P 節點的型態為 n,A0,(K1,A1), (K2,A2),…,(Kn,An),其中Ki = x,1≦i≦n。刪除 k 時找尋其右子樹中的最左邊的樹葉節點 P’,在 P’ 中找一個最小值 y,將 y 代替Ki值,如下圖,注意!也可以找尋其左子樹中最右邊的樹葉節點 P’,在 P’中找一最大值 y,將 y 代替Ki值

  25. a 52 b c 20 , 30 60 , 80 e f h d g i 10,15 25,26 35,40,45 55,59 65,70,75 85,90 8.2 B-tree (con.t) • 若刪除 50,找到 P’ 節點為 g,從中取出最小值52,並代替50

  26. 55 b c 20 , 30 65 , 80 a e f h d g i 10,15 25,26 35,40,45 59,60 70,75 85,90 8.2 B-tree (con.t) • 若此時再刪除 52,由於從 P‘ 節點(即g)找到鍵值55代替52後,其鍵值數小於 –1個鍵值,此時就好比刪除樹葉節點g的情形,可向其右兄弟節點h借一鍵值65(因為在節點的鍵值個數大於 –1),其結果如下所示:

  27. a 59 b c 20 , 30 80 e f d g' i 10,15 25,26 35,40,45 60,65,70,75 85,90 8.2 B-tree (con.t) • 若繼續刪除55,找到 P‘ 節點為 g,將最小值59代替55,由於其鍵值數小於 –1個鍵值,且其兄弟節點h也沒有大於 –1的鍵值,故將g、h與c的鍵值65合併於g'節點,結果如下圖所示:

  28. a' 20 , 30 , 59 , 80 d e i g f 10,15 25,26 35,40,45 60,65,70,75 85,90 8.2 B-tree (con.t) • 此時c節點的鍵值數小於 –1,且其兄弟節點的鍵值數不大於 –1,故將b、c與a節點合併為a',結果如下:

  29. 8.2 B-tree (con.t)

More Related