Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Tree
1. • Introduction Trees
• Binary Trees
Thammarat Simarojana
• Tree Traversal
Department of Business Computer • Expression Trees
Faculty of Management Sciences • Binary Search Trees
Rajabhat Rajanagarindra University • AVL Trees
1
2
– เปนที่รวมรวมโหนดตาง ๆ และมีคุณสมบัติ Recursively – ราก (Root) สมาชิกตัวแรกที่อยูบนสุดของทรีมี 1 ตัวเทานั้น
– ประกอบดวยสมาชิกที่เรียกวา โหนด (Node) ซึ่งอาจจะเปน – โหนด (Node) สมาชิกแตละตัวในทรี
Empty Tree หรือ Tree ที่ประกอบดวย N โหนด – โหนดพอแม (Parent Node) โหนดที่มีโหนดยอยเปนสวนประกอบ
ตั้งแต 1 ขึ้นไป
– แตละโหนดเชื่อมกัน เสนที่เชื่อม เรียกวา Edge – โหนดลูก (Child Node) เปนโหนดยอยของโหนดแมจะมี 2 ชนิด คือ
– Tree ประกอบ N โหนดจะมี Edge ทั้งหมด N-1 เสน • โหนดลูกดานซาย
• โหนดลูกดานขวา
3 4
2. root
– ลีฟโหนด (Leaf Node) เปนโหนดสุดทายที่ไมมีโหนดลูกยอย parent node A 0
อีก
B C 1
– ความลึก หรือ ความสูง (Depth or High) คาตัวเลขความลึก G H 2
child node B D E
หรือความสูง สูงสุดของทรี
F J K 3
L 4
Leaf node depth = 4
5 6
A A A A
B C B C B C B C
D E G H D E G H D E G H D E G H
F J K F J K F J K F J K
L L L L
Sibling is B, C Sibling is D, E Ancestor D is B, A Ancestor F is E, B, A
7 8
3. A A • โหนดของทรีเปน 0 หรือไมมีโหนดที่เรียกวา Empty
• โหนดแตละโหนดสามารถมีสมาชิกไดไมเกิน 2 โหนด
B C B C
• กําหนดเรียกชื่อทรียอยดานซายวา Left Subtree และ ทรียอยทาง
D E G H D E G H
ดานขวาวา Right Subtree
F J K F J K
A A A
L L
B C B C B C
Descendant B : D, E, F Descendant C : G, H, J, K, L
D D D D
9 10
• การเก็บไบนารีทรีในหนวยความจํา มี 2 แบบ
– เก็บแบบลิงคลิสต ROOT INFO
– เก็บแบบอารเรย (แบบเรียงลําดับ) LEFT RIGHT
A
• การเก็บไบนารีทรีแบบลิงคลิสต A
B C
– ใชอารเรย 3 อารเ รยขนานกันคือ INFO, LEFT และ RIGHT และใชตัวแปรพอยเตอร ROOT ดัง
รายละเอียดดังนี้
• INFO[k] เก็บขอมูลของโหนด N x D x E x x G x H
• LEFT[k] เก็บตําแหนงของโหนดลูกดายซายของโหนด N
x F x J x x K x
• RIGHT[k] เก็บตําแหนงของโหนดลูกดายซายของโหนด N
• ROOT เก็บตําแหนงรากของทรี ถาทรีวาง ROOT=NULL x J x
• AVIAL เก็บโหนดที่ลบหรือโหนดวางของทรี
11 12
5. • เปน Binary Trees
• โหนดทุกโหนดตองมีสมาชิก 2 โหนด A A A
• ระดับของโหนดใบ (Leaf Node) จะตองอยูในระดับเดียวกัน
B C B C
• คํานวณหาจํานวนโหนดไดจาก 2r+1-1 เมื่อ r เปนความลึกของทรี
เชน ความลึก (dept) = 5 จะมีจํานวนโหนดไดเทากับ
D E F G
26- 1 = 63 โหนด
17 18
• เปน Binary Trees
• ระดับของโหนดปลายตางกันเพียง 1 ระดับ
• ปลายโหนดที่ระดับสุดทายจะตองเริ่มตนจากดานซายมือสุดกอน
แลวจึงทยอยไลชิดมาทางดานขวามือ โดยไมเวนชวง
19 20
6. • แตละโหนดมีสมาชิก 0 หรือ 2 โหนด ไบนารีแบบขยาย : 2 - ทรี
• กรณีที่โหนดใดมีลูก 2 โหนด เรียกวา โหนดใน (Internal node)
• กรณีที่โหนดใดมีลูก 0 โหนด เรียกวา โหนดนอก (External node) Internal node
External node
21 22
General Tree Binary Tree
• หมายถึง Tree ที่มีสมาชิกไดไมจํากัดจํานวน
A
B E F
C D G H I
23 24
7. A A
A A
B E F B E F B
B E F
C D G H I C D G H I C E
C D G H I D F
A A G
H
B E F B E F
D D I
C G H I C G H I
25 26
กระทําได 3 วิธี คือ เปนการทองเขาไปใน Tree จากบนลงลาง และจากซาย
– พรีออรเดอร (Pre-order) หรือ โหนด-ซาย-ขวา (NLR) ไปขวาทีละระดับ โดยเริ่มจาก Root Node
– อินออรเดอร (In-order) หรือ ซาย-โหนด-ขวา (LNR)
จากภาพ ดานขวา เมื่อทําการ Traverasal แบบ Breath – First จะได
– โพสทออรเดอร (Post-order) หรือ ซาย-ขวา-โหนด (LRN)
A A
– พรีออรเดอร = A BDECF
B C B C
– อินออรเดอร = D B E A C F Breath – First =
F D E F
– โพสออรเดอร = D E B F C A D E
27 28
8. หมายถึง Binary Trees ที่มีคุณสมบัติดังตอไปนี้ 1. แปลงนิพจนจาก infix เปน Postfix
1. Leaf เก็บ Operand เชน A B C 12 14 20 เปนตน 2. Push Postfix ทีละตัวเขาสแตก (Stack)
3. ถา Push Postfix เปน
2. Root และ Internal node เก็บ Operator เชน + - * / ^ ( ) • Operand ให Push ลงสแตก (Stack)
3. Subtree เปน Sub expression • Operator ใหทําการสราง Tree แลว Push ลงสแตก (Stack) คือ
– เอาตัว Operator เปน Root Node
– เอา Top of Stack เปน Right Subtree
– เอา Top of Stack - 1 เปน Left Subtree
29 30
• ตัวอยางเชน (a+(b*c))+(((d*e)+f)*g) เมื่อทํา • แปลง infix เปน Postfix จะได ab+cde+**
เปน Expression Tree จะไดรูป ดังนี้
+
+ *
a b +
a * + g
b c * f a b
d e
31 32
9. + c d e + c +
a b a b • ไบนารีเซิรชทรี : การคนหาขอมูลในไบนารีทรี โดยจะใชเวลาในการคนหา
d e
2 ความยากงายของการแทรก หรือลบขอมูลขึ้นอยูกับ
โครงสรางตอไปนี้
• อารเรยท่มการจัดเรียง เราสามารถคนหาไดงายโดยใชเวลา
ี ี
*
+ * f(n) = O(log2n) แตการแทรกหรือลบขอมูลยุงยาก
a b c + + * • ลิงคลิสต เราสามารถลบหรือแทรกขอมูลไดงาย แตยุงยากในการคนหา โดยใช
เวลา f(n) = O(n)
a b c +
d e
d e
ab+cde+** 33 34
Binary Search Trees
Binary Search Trees
(Find)
ขอใดเปน Binary Search Tree (Max and Min)
(Insert)
8 6 6
3 10 2 8 2 8 (Built)
7 19 1 4 1 4 (Remove)
3 3 7
35 36
10. (Max and Min)
(Max
(Find)
• คาต่ําสุด ใหเคลื่อนไปทาง Left Sub Tree ของโหนดใด ๆ จนกวา
ตัวอยาง ตองการคนหา 20 โหนดนั้นจะไมมี Left Sub Tree
• คาสูงสุด ใหเคลือนไปทาง Right Sub Tree ของโหนดใด ๆ จนกวา
่
1) 20 < 38 ไปทางซาย
2) 20 > 14 ไปทางขวา โหนดนั้นจะไมมี Right Sub Tree
3) 20 < 23 ไปทางซาย 38 6
4) 20 > 18 ไปทางขวา
14 56
82 2 8
8 23 45
18 70
1 4 7 9
20
3
37 38
(Insert) (Built)
การสรางไบนารีเซิรชทรี : ใชหลักการเดียวกับการคนหาและแทรก
6 6 ตัวอยาง จงสรางไบนารีเซอรซทรีจาก 40, 60, 50, 33, 55, 11
โดยสรางทีละ Node
2 8 2 8
1 4 1 4
40 40 40 40
60 60 33 60
3 3 5
50 50
(1) ITEM=40 (2) ITEM=60 (3) ITEM=50 (4) ITEM=33
39 40
12. • ถา N มีโหนดลูก 2 โหนด โดยกําหนดให S(N) คือ inorder ของ
โหนด N (ซึ่ง S(N) จะไมมีโหนดลูกดานซาย) ทําการลบโหนด N • ถูกคนควาโดย Adel’son - Velskii และ Landis
ออกจาก Tree โดยลบ S(N) จาก Tree กอน แลวจึงแทนโหนด N • ความสูงของตนไมยอยดานซายและดานขวาตางกันไมเกิน 1 ระดับ
ใน Tree ดวย S(N) • เปน Binary Search Trees
60 60 • การตรวจสอบวาเปน AVL Tree หรือไม มี balance factor ตรวจสอบโดย
25 balance factor = ความสูงของตนไมยอยซาย - ความสูงของตนไมยอยขวา ซึ่ง
25 75 33 75 คาของแฟกเตอรนี้ของแตละโหนดในตนไมตองเปน 0, 1 หรือ -1 เทานั้นจึง
15 50 66 15 50 66 จะเปน AVL Tree
33 33
44 44 45 46
AVL Trees
a 2 1 1 2 b
• บํารุงรักษางาย
1 0 0 0 0 0 0 1
• เปน Binary Search Trees ชนิดพิเศษ
• ความสูงของ Left Subtree กับ Right Subtree ตางกันไมเกิน 1 0 0 0 0
• ตอง Balance Tree 2 1
2 2
• ความลึกของ Tree เปน O(log N)
c 1 0 0 1 1 1 0 0 d
0 0 0 0 0 0 0 0
47 48
13. b
a
• ถาในระหวางการใชงานตนไมที่มีการเพิ่มหรือลบโหนดแลว ทําให
คาของ balance factor ไมเปนไปตามนิยามแฟคเตอร ก็ตองมีการ
ปรับตนไมโดยวิธีการหมุน ซึ่งมีอยู 2 แบบ
– หมุนครั้งเดียว (Single Rotation)
c d – หมุนสองครั้ง (Double Rotation)
49 50
1 3
A A
0 0 2 0
• การหมุนครั้งเดียว กระทําได 2 แบบ คือ B C B D
– กระทําที่ Left Subtree 1 D
0
E C
– กระทําที่ Right Subtree 0 E 0
• การหมุน 2 ครั้ง กระทําได 2 แบบ คือ
5 5
– กระทําที่ Left Subtree
2 8 2 7
– กระทําที่ Right Subtree
1 4 7 1 4 6 8
51 3 6 3 52
14. 2 4
2 2
1 3 1 4 1 4 2 5
4 3 5 1 3 6
3 5
5 6
53 54
(Double Rotation) (Double Rotation)
K3 K2 K1 K2
K1 K1 K3
D K3 A
K2 K1 K3
K2
A A B C D
D B C
B C A D
B C
Left - Right double rotation Right - Left double rotation
55 56
16. 1. จงตอบคําถามตอไปนี้โดยดูจาก Tree
1.1 Root Node คือ โหนดใด
A
1.2 Leaf Node คือโหนดใด
1.3 Parent Node ของ F คือโหนดใด
End of Chapter 1.4 ตนไมตนนี้มีความสูง (High) เทาไหร
B C
1.5 Sibling Node ของ G คือโหนดใด
D E F G
1.6 Ancestor Node ของ I คือโหนดใด
1.7 Descendant Node ของ H คือโหนดใด H I J
1.8 ตนไมตนนี้เปน Binary Trees หรือไม
เหตุใดจึงคิดเชนนั้น K
1.9 ตนไมตนนี้เปน Complete Binary Trees
หรือไม เหตุใดจึงคิดเชนนั้น
61 L 62
2. จงแปลง General Trees เปน Binary Trees 3. จงแสดงผลลัพธหลังจากการทองเขาไปในตนไม (Tree Traversals)
3.1 แบบ Pre-order
A 3.2 แบบ In-order A
3.3 แบบ Post-order
B C
B C D E 3.4 แบบ Breath – First
D E F G
F G H I
H I J
J K L K L
63 64
17. 4. จงสราง Expression Trees จากนิพจนตอไปนี้ 7. จงสรางตนไม AVL จากขอมูลที่กําหนดใหตอไปนี้
4.1 A * B + C / D - E 7.1 15 31 52 50 48 9 60 57 28
4.2 A + ( B * C ) - ( D / E ) 7.2 44 19 51 16 15 23 54 47 62
4.3 ( A / B ) + ( C – D * E ) + F 7.3 I H N L M F D B K C G E J A O
5. จงสราง Binary Search Trees จากขอมูล ดังนี้
42 31 45 78 96 12 26 40 52 56 35 10
6.. จากตนไมในขอ 5. จงปรับปรุงตนไมเมื่อลบ 96 12 31 42
65 66