第八章 深入探討樹狀結構

29
1 第第第 第第第第第第第第

Upload: anson

Post on 13-Jan-2016

66 views

Category:

Documents


0 download

DESCRIPTION

第八章 深入探討樹狀結構. 目次. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第八章  深入探討樹狀結構

1

第八章 深入探討樹狀結構

Page 2: 第八章  深入探討樹狀結構

2

目次

8.1 m-way 搜尋樹8.2 B-tree

8.3 動動腦時間8.4 練習題解答

Page 3: 第八章  深入探討樹狀結構

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 搜尋樹。

Page 4: 第八章  深入探討樹狀結構

4

8.1 m-way 搜尋樹 (con.t)

Ex :下圖為 3-way 搜尋樹,共有 12 個鍵值

a

23, 48

12, 17

38 , 45

55, 6028, 32b c d

e f g

25 70

Page 5: 第八章  深入探討樹狀結構

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)

節點 格式abcdefg

2, b, (23, c),(48, d)2, 0, (12, 0), (17, 0)2, e, (28, 0), (32, f)2, 0, (55, 0), (60, g)1, 0, (25, 0)2, 0, (38, 0), (45, 0)1, 0, (70, 0)

Page 6: 第八章  深入探討樹狀結構

6

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

12 , x

5 , 7

Page 7: 第八章  深入探討樹狀結構

7

8.1 m-way 搜尋樹 (con.t)

(4) 加入 6

(5) 加入 8

(6) 加入 4

12 , x

5 , 7

6 , x

8 , 12

5 , 7

6 , x

8 , 12

5 , 7

6 , x4 , x

Page 8: 第八章  深入探討樹狀結構

8

8.1 m-way 搜尋樹 (con.t)

(7) 加入 3

(8) 加入 10

8 , 12

5 , 7

6 , x3 , 4

8 , 12

5 , 7

6 , x3 , 4

10 , x

Page 9: 第八章  深入探討樹狀結構

9

8.1 m-way 搜尋樹 (con.t)

8.1.2 m-way 搜尋樹的刪除 刪除方法與二元搜尋樹相同

– 樹葉節點:直接刪除– 非樹葉節點:以左子樹中最大鍵值或右子樹中最小鍵值

取代之 假設有一棵 3-way 搜尋樹如下:

8 , 12

5 , 7

6 , x3 , 4

10 , x

Page 10: 第八章  深入探討樹狀結構

10

8.1 m-way 搜尋樹 (con.t)

– 刪除 3 ,則直接刪除

– 刪除 8

8 , 12

5 , 7

6 , x4 , x

10 , x

10,12

5 , 7

6 , x4 , x

Page 11: 第八章  深入探討樹狀結構

11

8.1 m-way 搜尋樹 (con.t)

– 刪除 12

– 刪除 7

– 刪除 10

10 , x

5 , 7

6 , x4 , x

5 , 10

6 , x4 , x

5 , 6

4 , x

Page 12: 第八章  深入探討樹狀結構

12

8.2 B-tree

何謂 B-tree ?– 一棵 order 為 m 的 B-tree 是一 m-way 搜尋樹– 可以是空樹– 假若高度≧ 1 必需滿足以下的特性:

樹根至少有二個子節點,亦即節點內至少有一鍵值 除了樹根外,所有非失敗節點(即內部節點)至少有

個子節點,至多有 m 個子節點。此表示至少應有 – 1個鍵值,至多有 m–1 個鍵值 ( 表示大於 m/2 的最小正整數 )

所有的樹葉節點皆在同一階層

2m

2m

2m

Page 13: 第八章  深入探討樹狀結構

13

8.2 B-tree (con.t)

3-way 搜尋樹 vs. order 為 3 的 B-tree

– 左圖不屬於 B-tree of order 3 ,主要是因為樹葉節點不在同一階層上

20

40

10,30

6,8 50,70

a

b c d

e

30

500

7040

8,10

15,17 206

a

b c

d e f g h

Page 14: 第八章  深入探討樹狀結構

14

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') 加入其父節點。如下圖所示:

2m

2m

2m

2m

2m 2

m 2m 2

m

2m

2m

P P'

K

Page 15: 第八章  深入探討樹狀結構

15

8.2 B-tree (con.t)

Ex :此處的 B-tree 為 order 5 ,表示最多鍵值數為 4

50

20 , 40 60 , 70 , 80

5,10 25,30 45,48 53,54 62,67 72,76 85,90,95

a

b c

d e f g h i j

Page 16: 第八章  深入探討樹狀結構

16

8.2 B-tree (con.t)

– 加入 88 由於 j 節點的鍵值少於 m–1 即 4 個,則直接加入即可

50

20 , 40 60 , 70 , 80

5,10 25,30 45,48 53,54 62,67 72,76 85,88,90,95

a

b c

d e f g h i j

Page 17: 第八章  深入探討樹狀結構

17

8.2 B-tree (con.t)

– 加入 98 ,由於 j 節點已有 m–1 個鍵值 ( 即 4 個 ) ,因此必須將 j 節點劃分為二, j 、 k ,然後選出 K = K3 = 90 ,並組成( 90,k )加入 c 節點

2m

50

20 , 40 60 , 70 , 80 , 90

5,10 25,30 45,48 53,54 62,67 72,76 95,98

a

b c

d e f g h i j

85,88k

Page 18: 第八章  深入探討樹狀結構

18

8.2 B-tree (con.t)

– 加入 91

– 加入 93

50

20 , 40 60 , 70 , 80 , 90

5,10 25,30 45,48 53,54 62,67 72,76 91,95,98

a

b c

d e f g h i j85,88

k

50

20 , 40 60 , 70 , 80 , 90

5,10 25,30 45,48 53,54 62,67 72,76 91,93,95,98

a

b c

d e f g h i j85,88

k

Page 19: 第八章  深入探討樹狀結構

19

8.2 B-tree (con.t)

– 加入 99 ,以同樣的方法將 k 劃分為 k , l 並組成( 95, l )加入 c 節點,由於 c 節點已有 m–1 個鍵值,若再加入一鍵值勢必也要劃分 c 節點為二,其為 c 、 m ,並將( 80, m )加入其父節點 a

50 , 80

20 , 40

5,10 25,30 45,48 53,54 62,67 72,76 98,99

a

b c

d e f g h i j85,88

k

60 , 70 90 , 95

91,93l

m

Page 20: 第八章  深入探討樹狀結構

20

8.2 B-tree (con.t)

8.2.2 B-tree 的刪除方法– 一為刪除的節點是樹葉節點– 二為刪除的節點為非樹葉節點 – 我們以 B-tree of order 5 如下圖來說明。假設已找到相

關的節點 P50

20 , 30 60 , 80

10,15 25,26 35,40,45 55,59 65,70,75 85,90

Page 21: 第八章  深入探討樹狀結構

21

8.2 B-tree (con.t)

刪除的節點是樹葉節點– 刪除鍵值 X 後,若 P 節點還有大於或等於– 1 個鍵值,

則刪除完畢,因為尚符合 B-tree 的定義,此處的 m 為 5 。如將下圖的鍵值 70 刪除,結果為下圖所示:

50

20 , 30 60 , 80

10,15 25,26 35,40,45 55,59 65,75 85,90

Page 22: 第八章  深入探討樹狀結構

22

8.2 B-tree (con.t)

– 刪除鍵值 X 後,若 P 節點的鍵值小於 – 1 個,其不符合 B-tree 的定義,因此必須調整。我們分四種情況說明:(1) 找右邊最近的兄弟節點 p’ ,若 p’ 尚有大於或等於 個鍵值,則將取出 P 的父節點 Pf 中最大的鍵值放入 P ,然後從 p’ 節點取出最小的鍵值放入 P 的父節點 Pf ,如將下圖的鍵值 26 刪除

2m

2m

50

20 , 35 60 , 80

10,15 25,30 40,45 55,59 65,70,75 85,90P P'

Pf

Page 23: 第八章  深入探討樹狀結構

23

8.2 B-tree (con.t)

(2) 若在 P 節點右邊找不到有一節點含有大於或等於 個鍵值時,則找其左邊的兄弟節點,若有一左兄弟節點 q‘ ,則從 P 的父節點 Pf 取出最小鍵值放入 P ,然後從 q‘ 中取出最大的鍵值放入 P 的父節點 Pf 。若欲刪除 85 ,情形如下圖所示:

2m

50

20 , 35 60 , 75

10,15 25,30 40,45 55,59 65,70 80,90Pq'

Pf

Page 24: 第八章  深入探討樹狀結構

24

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 值 50

20 , 30

10,15 25,26 35,40,45 52,55,59 85,90igfed

b c

65,70,75

60 , 80

h

Page 25: 第八章  深入探討樹狀結構

25

8.2 B-tree (con.t)

– 若刪除 50 ,找到 P’ 節點為 g ,從中取出最小值 52 ,並代替 50

52

20 , 30

10,15 25,26 35,40,45 55,59 85,90igfed

b c

65,70,75

60 , 80

h

a

Page 26: 第八章  深入探討樹狀結構

26

8.2 B-tree (con.t)

– 若此時再刪除 52 ,由於從 P‘ 節點 ( 即 g) 找到鍵值 55代替 52 後,其鍵值數小於 – 1 個鍵值,此時就好比刪除樹葉節點 g 的情形,可向其右兄弟節點 h 借一鍵值 65(因為在節點的鍵值個數大於 – 1 ),其結果如下所示:

2m

2m

a

55

20 , 30

10,15 25,26 35,40,45 59,60 85,90igfed

b c

70,75

65 , 80

h

Page 27: 第八章  深入探討樹狀結構

27

8.2 B-tree (con.t)

– 若繼續刪除 55 ,找到 P‘ 節點為 g ,將最小值 59 代替55 ,由於其鍵值數小於 – 1 個鍵值,且其兄弟節點 h也沒有大於 – 1 的鍵值,故將 g 、 h 與 c 的鍵值 65 合併於 g' 節點,結果如下圖所示:

2m

2m

59

20 , 30

10,15 25,26 35,40,45 60,65,70,75 85,90

ig'fed

b c

80

a

Page 28: 第八章  深入探討樹狀結構

28

8.2 B-tree (con.t)

– 此時 c 節點的鍵值數小於 – 1 ,且其兄弟節點的鍵值數不大於 – 1 ,故將 b 、 c 與 a 節點合併為 a' ,結果如下:

2m

2m

20 , 30 , 59 , 80

10,15 25,26 35,40,45 60,65,70,75 85,90

igfed

a'

Page 29: 第八章  深入探討樹狀結構

29

8.2 B-tree (con.t)