Upload
vokhanh
View
235
Download
0
Embed Size (px)
Citation preview
การแปลง Forest ไปเป็น binary tree
• ท าแบบเดียวกนักับ การแปลง tree ไปเป็น binary tree
• คือ เชื่อม Root เข้าด้วยกัน และท าในส่วนของ Subtree ด้วย
1
การแปลง Forest ไปเป็น Binary Tree
2
A
B
D
C
เริ่มต้น
E
GF H
J K
การแปลง Forest ไปเป็น Binary Tree
3
A
B
D
C
Step 1
E
GF H
J K
การแปลง Forest ไปเป็น Binary Tree
4
A
B
D
C
E
GF
HJ
KStep 2
การแปลง Forest ไปเป็น Binary Tree
5
Binary Search Tree
6
ต าแหน่งของการเอา node เข้าไปไว้ใน tree จะขึ้นกับข้อมูลที่เก็บในแต่ละ Node และลักษณะ Tree
*** ไม่สามารถก าหนด ต าแหน่งได้65
40 75
70 9530 55
35 80
โดยโครงสร้างของทรีแบบนี้ คือค่า key หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของ node
ที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของ node
ที่อยู่ทางขวา
Binary Search Tree
7
โดยโครงสร้างของทรีแบบนี้ คือ ค่าkey หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของโหนดที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของโหนดที่อยู่ทางขวา
65
40 75
70 9530 55
35 80
Binary Search Tree
8
โดยโครงสร้างของทรีแบบนี้ คือ ค่าkey หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของโหนดที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของโหนดที่อยู่ทางขวา
65
40 75
70 9530 55
35 80
Binary Search Tree
9
Ken , 45
Jim , 35 Mandy , 15
Bobby , 60 Jone , 40 Patty , 60
John , 20
คีย์หลักคือชื่อหรืออายุ ?
Binary Search Tree
10
การสร้าง Binary Search Tree
- การสร้างจะ เป็นการ Add สมาชิก 1 ตัว ( node ) เข้าไปใน Tree
- เริ่มหาที่ Root เสมอ และท่องไปตาม node ต่าง ๆ ตามล าดับ เพื่อ
หาต าแหน่งที่เหมาะสมส าหรับ node ใหม่
Binary Search Tree
11
65
65ADD Root
65 40 75 30 55 35 70 95 80
Binary Search Tree
12
65
40
40ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
13
65
40 75
75ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
14
65
40 75
30
30ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
15
65
40
30 55
55ADD
75
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
16
65
40
30 55
35
35ADD
75
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
17
65
40 75
7030 55
35
70ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
18
65
40 75
7030 55
35
95ADD
95
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
19
65
40 75
70 9530 55
35 80
80ADD
การสร้าง Binary Search Tree
20
65
40 75
70 9530 55
35 80
สรุป การสร้าง Binary search Tree ตามล าดับ ดังต่อไปนี้
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
21
65
40 75
70 9530 55
35 80
40ADD
ซ้ า !! 1. ทิ้งไปเลย
การสร้าง Binary Search Tree
22
65
40 75
70 9530 55
35 80
40ADD
ซ้ า !!
2 . เก็บความถี่ Node ที่ซ้ า
2
การสร้าง Binary Search Tree
23
65
40 75
70 9530 55
35 80
40ADD
3. ใช้ List list มาเชื่อม40ซ้ า !!
การสร้าง Binary Search Tree
24
แบบฝึกหดั
สร้าง Binary Search Tree จากการ Add ข้อมูล
ตามล าดับ
65 40 30 70 75 55 35 95 80
การสร้าง Binary Search Tree
การลบข้อมูล
• การลบข้อมูล ของ Binary Tree ต้องพิจารณาดังนี้1. ถ้าเป็น leaf node สามารถลบได้ทันที
2. ถ้าโหนดที่จะลบ มีลูกเพียง 1 ตัว สามารถลบได้เลย และหลังจากที ่Parent ถูกลบ ให้ชี้ address ไปยังลูกแทน
3. ถ้าโหนดที่จะลบมี subtree ซ้ายและ ขวาจะต้องเลือกโหนดของ Tree ย่อยทางซ้าย หรือขวามาแทน โดยพิจารณาค่าที่มากที่สุดของ Tree ย่อยซ้าย หรือจะเลือก ค่าน้อยสุดของ Tree ย่อยขวา
25
26
65
40 75
70 9530 55
35 80
ลบ 80
27
65
40 75
70 9530 55
35
ลบ 80
28
65
40 75
70 9530 55
35
ลบ 30
29
65
40 75
70 9535 55
ลบ 30
30
65
40 75
70 9535 55
ลบ 65
31
55
40 75
70 9535
ลบ 65
70
40 75
9535 55
32
Complete Binary Tree
Complete Binary Trees
33
15
165
ความสัมพันธ์ระหว่างระดับและจ านวน node
n = 2l -1 เมื่อ l คือ max level
Complete Binary Tree
3 12 201
34
65
40 70
75 8035 55
Height : 3
จ านวน Node ทั้งหมด n
n = 2 l - 1 เมือ l คือ Max level ของ Tree
Complete Binary Tree
35
65
40 70
75 8035 55
Height : 3
Max level = 1 n = 21-1 = 1Max level = 2 n = 22-1 = 3Max level = 3 n = 23-1 = 7
Complete Binary Tree
36
65
40 70
75 8035 55
n = 2x-17 = 2x-1
2x = 7+1 = 8 = 23
ถ้า n = 7 node ได้ Complete Binary Tree มีความสูงเท่าใด ?
n = 2x-1n+1 = 2x
log2( n+1) = log2 2x
log2( n+1) = x Height (x) = max level = log2( n+1)
Complete Binary Tree
37
การท่องเข้าไปในBinary Tree
(Binary Tree Traversals)
การท่องเข้าไปใน Binary Tree• การท่องเข้าไปใน Binary Tree คือ การเข้าไปเยี่ยม node ต่างๆ node ละ 1 ครั้ง จนครบทุก node
อย่างมีแบบแผน
• การเยี่ยมอาจเป็นการเข้าไปอ่านข้อมลู หรือ ประมวลผลใดๆ
• หลักการส าคัญของการท่องเข้าไปใน Binary Tree คือ เยี่ยม Root ( R ) , Subtree ด้านซ้าย ( TL ) , Subtree ด้านขวา ( TR )
ซึ่งมีอยู่ 3 วิธี (ขึ้นอยู่กับว่าจะเยี่ยมสว่นใดก่อน)1. Inorder Traversal
จะเยี่ยม TL R TR ( Root อยู่ข้างใน)2. Preorder Traversal
จะเยี่ยม RTL TR ( Root อยู่ก่อน)3. Postorder Traversal
จะเยี่ยม TL TR R ( Root อยู่หลัง)
38
การท่องเข้าไปใน Binary Tree• Binary Tree จะประกอบด้วย Subtree
และใน Subtree ประกอบด้วย Subtree ย่อยๆ อีก ดังนั้นเพ่ือให้ง่าย จะแทน root ของ subtree ใดๆ ด้วย จะได้
39
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
E
G H I
A
C
F
B
D
Inorder Traversal
• Inorder Traversalจะเยี่ยม TL R TR ( Root อยู่ข้างใน)
1. เย่ียม Left Subtree แบบ Inorder2. เยี่ยม Root3. เยี่ยม Right Subtree แบบ Inorder
40
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Inorder Traversal
41
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Inorder จะได้ DGBAECHFI
1 E
G H I
A
C
F
B
D
เข้าไปใน Subtree ย่อยสุดทางซ้ายก่อนแล้ว Root ของ Subtree นั้นแล้วเข้าไปใน Subtree ทางขวา
2
3
4
5
6
7
8
9
Preorder Traversal
• Preorder Traversalจะเยี่ยม RTL TR ( Root อยู่ก่อน)
1. เยี่ยม Root 2. เยี่ยม Left Subtree แบบ Preorder3. เยี่ยม Right Subtree แบบ Preorder
42
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Preorder Traversal
43
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Preorder จะได ้ ABDGCEFHI
3 E
G H I
A
C
F
B
D
เข้าไปใน Root ของ Subtree นั้นก่อนแล้วเข้าไปใน Subtree ทางซ้ายแล้วเข้าไปใน Subtree ทางขวา
4
2
1
6
5
8
7
9
Preorder Traversal
• Preorder Traversalจะเยี่ยม RTL TR ( Root อยู่ก่อน)
1. เย่ียม Root 2. เยี่ยม Left Subtree แบบ Preorder3. เยี่ยม Right Subtree แบบ Preorder
44
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Preorder Traversal
45
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Preorder จะได ้ ABDGCEFHI
3 E
G H I
A
C
F
B
D
เข้าไปใน Root ของ Subtree นั้นก่อนแล้วเข้าไปใน Subtree ทางซ้ายแล้วเข้าไปใน Subtree ทางขวา
4
2
1
6
5
8
7
9
Postorder Traversal
• Postorder Traversalจะเยี่ยม TL TRR ( Root อยู่หลัง)
1. เยี่ยม Left Subtree แบบ Postorder2. เยี่ยม Right Subtree แบบ Postorder3. เยี่ยม Root
46
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Postorder Traversal
47
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Postorder จะได ้ GDBEHIFCA
2 E
G H I
A
C
F
B
D
เข้าไปใน Subtree ทางซ้ายก่อนแล้วเข้าไปใน Subtree ทางขวาแล้วเข้าไปใน Root ของ Subtree นั้น
1
3
9
4
8
5
7
6
Tree Traversal
• Preorder
48
A
B C
D E F G
Tree Traversal
• Inorder
49
A
B C
D E F G
Tree Traversal
• Postorder
50
A
B C
D E F G
แบบฝึกหัด
51
จงท่องเข้าไปใน Binary Tree ต่อไปนี้ในแบบPreorder, Inorder และ PostOrder
A
B D
C
+
A -
* D
B C
A
B C
D
E
E
G
1.
2.
3.
52
AVL Tree
AVL Tree
• AVL Tree คือ binary search tree ทีม่ีเงื่อนไขสมดุล ของทร ีแต่ละโหนดมีความสูงของแต่ละทรยี่อยต่างกันไม่เกิน 1
• หลักทั่วไปคือ แต่ละโหนดจะมีทรีย่อยซ้ายและ ทรีย่อยขวาซึ่งจะมีความสูงเท่ากัน และจะมีการปรับความสมดุลจะต้องมีใน ทุกๆ โหนด
• AVL Tree เหมือนกับ Binary Tree ทุกอยา่งแต่จะมี ทรยี่อยซ้ายและขวาต่างกันได้สูงสุดคือ -1 0 1
• จะเรียกค่า ความต่างของ ทรยี่อยซ้ายและ ทรีย่อยขวาว่า บารานซ์เฟกเตอร์
53
54
6
2 8
7
80
1 4
1
-1 1
010
0
55
6
2 8
780
1 4
2
-1 0
0
00
0
การหมุน
• ค่าของบารานซ์แฟคเตอร ์ในแต่ละโหนดมีได้ไม่เกิน -1 0 1 ถ้าระหว่างที่มีการเพ่ิมข้อมูลลงใน Binary แล้ว ท าให้ ทรเีสียสมดุล ไม่เป็น AVL Tree จะต้องมีการปรับทรีใหม่โดยวิธีการหมุน ซึ่งมี 2 วิธีคือ
• หมุน 1 ครั้ง
• หมุน 2 ครั้ง
56
การหมุน 1 ครงั
• การหมุน 1 ครัง้ สามารถท าได้ 2 ลักษณะคอื หมุนซ้ายกับหมุนขวา
การหมุนขวา
57
k2
k1
T1 T2
T3
k2
k1
T1 T2 T3
หมุนขวา
• ให้ K2 และ K1 เป็นโหนด T1 T2 T3 เป็น subtree
• ให้ K2 เป็นโหนดที่เกิดวิกฤต
ท าโดยที่ K1 <K2
สมาชิกทุกตัวที่อยู่ใน T1 < K1
สมาชิกทุกตัวใน T3 > k2
สมาชิกทุกตัวใน T2 อยู่ระหว่าง K1 และ K2
58
k2k1
T1
T2
T3
หมุนซ้าย
• ให้ K2 และ K1 เป็นโหนด T1 T2 T3 เป็น subtree
• ให้ K2 เป็นโหนดที่เกิดวิกฤต
ท าโดยที่ K1 > K2
สมาชิกทุกตัวที่อยู่ใน T1 < K2
สมาชิกทุกตัวใน T3 > k1
สมาชิกทุกตัวใน T2 อยู่ระหว่าง K1 และ K2
59
k2k1
T3
T2
T1
k1k2
T3
T2
T1
ตัวอย่าง
• สร้าง AVL Tree จากเลข 1 ถงึ 7 ตามล าดับ
60
12
31
2
3
61
1
2
34
5
1
2
4
3 5
62
1
2
4
3 5
6
2
45
1 63
63
2
45
1 63
7
2
46
1 73 5
การหมุน 2 ครัง้
ในบางกรณี ไม่สามารถที่จะปรับ โดยการหมุนเพียง 1 ครั้งได้ จ าเป็นต้องปรับ 2 ครั้งคือ หมุนซ้าย 1 ครั้งและขวา 1 ครั้ง (Left-right rotation) หรือ หมุนขวา 1 ครัง้และ หมุนซ้าย 1 ครั้ง(right-left rotation)
64
Left-right rotation
65
k1
k2
T3
T2
T1
T4
k3
k2
k1
T3
T2
T1
T4
k3
k2
k1
T3
T2
T1
T4
k3
Right-left rotation
66
k2
k3
T3
T2
T1
T4
k1
k2k1
T2
T3
T4
T1
k3
k2
k3
T3
T2
T1
T4
k1
ตัวอย่าง
67
2
46
1 73 515
14
2
46
1 143 5
7 15
68
2
46
1 143 5
7 15
13
2
47
1 143 6
5 1513
เพิ่มข้อมูลต่อ โดยเพิ่ม 12 11 8 9 8.5 ตามล าดับ
69
2
47
1 143 6
5 1513
แบบฝึกหัด
ท าการสร้าง binary Tree ตามข้อมูลดังนี้ 39 15 20 40 45 11 60 48 5 2 7 30 80 70 22 13 8 33 จากนั้นท าการ search แบบ Preorder inorder และ Postorder
ท าการเพ่ิมข้อมูล ให้เป็นแบบ AVL Tree โดยเพิ่มข้อมูลดงันี้ 6 9 43 42 14 17 19 วาดภาพขึ้นตอนการเพิ่มข้อมูลลง Tree และปรับ Tree ให้ Balance
70