ทรี (trees) - wordpress.com · 2011-11-01 ·...
TRANSCRIPT
ทร (Trees)
1 โครงสรางขอมล บทท 6 ทร
แนวคดพนฐานของทร (Basic Tree Concepts) (1) เปนโครงสรางชนดไมเชงเสน (non-Linear) คอ ลสตทสมาชกแตละตวสามารถ
มสมาชกตวถดไป (Successor) ไดมากกวาหนงตว
เปนไปตามความสมพนธในลกษณะแบบล าดบชน (Hierarchical
Relationship)
นยมน าไปใชเพอน าเสนอเปนแผนผงองคกร (Organization Chart) โครงสรางไดเรกทอร (Directory)
ทรประกอบดวยโหนด (Node) ทใชส าหรบบรรจขอมล
โครงสรางขอมล บทท 6 ทร 2
แนวคดพนฐานของทร (Basic Tree Concepts) (2) ทรประกอบดวยโหนด (Node) ทใชส าหรบบรรจขอมล
จะมกงเปนเสนทเชอมโยงโหนดเขาดวยกนทเรยกวาบรานซ (Branch)
จ านวนบรานซทสมพนธกบโหนดเรยกวาดกร (Degree)
โหนกแรกเรยกวารท (Root)
โหนดทกโหนดยกเวนรทโหนดจะมเพยง 1 สมาชกตวกอนหนา (Predecessor) ขณะทสมาชกตวถดไป (Successor) อาจเปน 0 หรอ 1 หรอมากกวา 1 กได
โหนดใบ (Leaf) โหนดใบทไมมบรานซเชอมโยงไปยงโหนดตวถดไป (โหนดทไมมตวตามหลง)
โครงสรางขอมล บทท 6 ทร 3
แนวคดพนฐานของทร (Basic Tree Concepts) (3) โหนดพอ (Parent) จะมโหนดตามหลง
โหนดทมตวกอนหนากคอโหนดลก (Child)
โหนดลกตงแตสองโหนดขนไปทมาจากพอเดยวกนเรยกโหนดพนอง (Siblings)
โครงสรางขอมล บทท 6 ทร 4
แนวคดพนฐานของทร (Basic Tree Concepts) (4)
โครงสรางขอมล บทท 6 ทร 5
A
H I G
F E
D C
B
Root
แนวคดพนฐานของทร (Basic Tree Concepts) (5) โหนดราก (Root Node) = > A (โหนดแรกส าหรบโครงสรางทร) โหนดพอ (Parents) = > A, B, C (โหนดทม สมาชกตวถดไป) โหนดลก (Children) = > B, E, F, C, D, G, H และ I (โหนดทมสมาชก
ตวกอนหนา) โหนดพนอง (Siblings) = > {B, E, F}, {C, D} และ {G, H, I} โหนดใบ (Leaf Node) = > C, D, E, G, H และ I (โหนดทไมม สมาชก
ตวถดไป) ดกรทงหมดของทร = > 8 ดกรทงหมดของโหนด F = > 3 จ านวนของ Leaf โหนด = > 6 ระดบความสงหรอความลกของทร = > Height = 2 + 1 = 3
โครงสรางขอมล บทท 6 ทร 6
แนวคดพนฐานของทร (Basic Tree Concepts) (6) ทรสามารถแบงยอยออกเปนซบทร (Subtrees)
ซบทร เปนโครงสรางทมการเชอมโยงถดจาดรทโหนด
โหนดแรกของซบทรกคอรทโหนดของซบทรนนๆ
โครงสรางขอมล บทท 6 ทร 7
A
B
C B
E
G H I
F
Subtree B
Root of Subtree I
รปแบบการน าเสนอโครงสรางขอมลทร (Tree Representation) (1) 1. แบบโครงสรางทรทวไป (General Tree) รปแบบการน าเสนอเหมอนผง
องคกรทวไปทลดหลนเปนล าดบชน
โครงสรางขอมล บทท 6 ทร 8
… …
…
… …
รปแบบการน าเสนอโครงสรางขอมลทร (Tree Representation) (2) 2. แบบยอหนา (Indented List) รปแบบคลายการเขยนโปรแกรมเชง
โครงสราง ทใชยอหนาเปนตวก าหนดรปแบบของโครงสรางในสวนระดบยอยๆ ลงไป
โครงสรางขอมล บทท 6 ทร 9
Computer Case . . CPU Controller ALU . . ROM 3.5” Disk . . CD-ROM . .
รปแบบการน าเสนอโครงสรางขอมลทร (Tree Representation) (3) 3. แบบวงเลบ (Parenthetical List) รปแบบมความคลายคลงกบการ
แทนขอมลดวยนพจนคณตศาสตรดวยการใชเครองหมายวงเลบก ากบ
โครงสรางขอมล บทท 6 ทร 10
Computer (Case (...) CPU (Controller ALU … ROM) 3.5” Disk (…) … CD-ROM (…) )
A (B (C D) E F (G H I))
ไบนารทร (Binary Trees) (1) คณสมบตส าคญคอ
เปนทรทสามารถมลกไดไมเกนสองโหนด
โครงสรางขอมล บทท 6 ทร 11
A
B
B C
E
F
Left subtree Right subtree
ไบนารทร (Binary Trees) (2) ไบนารทรในรปแบบตางๆ
โครงสรางขอมล บทท 6 ทร 12
No nodes (null tree)
A A
B
A
B
A
C B
A
C B
D E
A
C
B
A
C
B
1 2 3 4
5 6 7 8
คณสมบตของไบนารทร (Properties) (1) ความสงของไบนาร (Height of Binary Trees)
ความสงมากสดของทร (Maximum Height)
Hmax = N
ความสงนอยทสดของทร (Maximum Height)
Hmin = [log2N] + 1
จ านวนโหนดทนอยทสด (Minimum Nodes)
Nmin = H
จ านวนโหนดทมากทสด (Maximum Nodes)
Nmax = 2H - 1
โครงสรางขอมล บทท 6 ทร 13
คณสมบตของไบนารทร (Properties) (2) ความสมดล (Balance) ความสมดลของไบนารทรจะสามารถทราบไดจากคา
Balance Factor เทากบ
B = HL - HR
HL = ความสงของซบทรดานซาย
HR = ความสงของซบทรดานขวา
โครงสรางขอมล บทท 6 ทร 14
A
C B
D E
A
C
B HR = 1
HL = 2 HR = 2
HL = 0
Balance Factor = 1 Balance Factor = 2
ไบนารสมบรณและเกอบสมบรณ (Complete and Nearly Complete Binary Trees) (1)
ไบนารทรแบบสมบรณเปนไปตามสตร Nmax โหนดของซบทรดานซาย และซบทรดานขวาจะมจ านวนเทากน
โครงสรางขอมล บทท 6 ทร 15
A A
C B
A
C B
D E G F
ไบนารสมบรณและเกอบสมบรณ (Complete and Nearly Complete Binary Trees) (2)
ไบนารทรเกอบสมบรณเปนไปตามสตร Hmin เปนทรทมโหนดเตมทกโหนด ยกเวนในระดบสดทายทมโหนดเฉพาะทางดานซาย
โครงสรางขอมล บทท 6 ทร 16
A
C B
D E F
A
C B
D
A
C B
D E
การแทนไบนารทรในหนวยความจ า (Binary Trees Representations) (1)
การแทนไบนารทรดวยอารเรย กรณททรอยในรปแบบของไบนารทรแบบสมบรณ ล าดบต าแหนงขอมลในทรในแตละระดบดวยการเรยงจากซายไปขวา
โครงสรางขอมล บทท 6 ทร 17
A
C B
D E G F
A B C D E F G
การแทนไบนารทรในหนวยความจ า (Binary Trees Representations) (2)
การแทนไบนารทรดวยอารเรย กรณททรอยในรปแบบของไบนารทรแบบไมสมบรณหรอเกอบสมบรณ ล าดบต าแหนงกจะมการจดเรยงแตกตางไปจากเดม โดยการแปลงไบนารทไมสมบรณนมาเปนไบนารทรแบบสมบรณดวยการเพมโหนด
โครงสรางขอมล บทท 6 ทร 18
A
C B
D E
A B C D E
A
C B
D E
การแทนไบนารทรในหนวยความจ า (Binary Trees Representations) (3)
การแทนไบนารทรดวยลงกลสต - > ชวยแกปญหาการสญเสยพนทวางเปลา โดยแตละโหนดประกอบดวยขอมลส าคญอย 3 ฟลดดวยกนคอ ขอมลทบรรจอยในโหนด
พอยนเตอรทช ไปยงซบทรดานซาย
พอยนเตอรทช ไปยงซบทรดานขวา
โครงสรางขอมล บทท 6 ทร 19
การแทนไบนารทรในหนวยความจ า (Binary Trees Representations) (3)
การแทนไบนารทรดวยลงกลสต
โครงสรางขอมล บทท 6 ทร 20
A
B C
D E F G
A
B C
E G
การทองเขาไปในไบนารทร (Binary Tree Traversals) การทองเขาไปในทรจะมอย 2 วธดวยกนคอ
1. วธการทองแบบแนวลก (Depth-First Traversals)
2. วธทองแบบแนวกวาง (Breadth-First Traversals)
โครงสรางขอมล บทท 6 ทร 21
วธการทองแบบแนวลก (Depth-First Traversals) (1) เปนวธการทองเขาไปในทรดวยการเดนทางผานจากรทโหนดลงไปยงโหนดลกๆ มทง
ฝ งดานซายและดานขวา N แทน รทโหนด
L แทน ซบทรดานซาย
R แทน ซบทรดานขวา
วธการทองแบบแนวลก ประกอบดวย แบบพรออรเดอร (Preorder)
แบบอนออรเดอร (Inorder)
แบบโพสตออรเดอร (Postorder)
โครงสรางขอมล บทท 6 ทร 22
วธการทองแบบแนวลก (Depth-First Traversals) (2) แบบพรออรเดอร (Preorder Traversal : NLR)
จะเรมตนกระท าทรทโหนดกอนล าดบแรก ตามดวยซบทรดานซาย และซบทรดานขวา
โครงสรางขอมล บทท 6 ทร 23
N
L R
1
2 3
วธการทองแบบแนวลก (Depth-First Traversals) (4) แบบพรออรเดอร (Preorder Traversal : NLR)
โครงสรางขอมล บทท 6 ทร 24
Algorithm PreOrder (root) Traverse a binary tree in node-left-right sequence. Pre root is the entry node of a tree or subtree Post each node has been processed in order 1 if (root is not null) 1 process (root) 2 preOrder (leftSubtree) 3 preOrder (rightSubtree) 2 end if end preOrder
วธการทองแบบแนวลก (Depth-First Traversals) (5) แบบอนออรเดอร (Inorder Traversal : LNR)
จะเรมตนกระท าทซบทรดานซายกอนเปนล าดบแรก ตามดวยรทโหนด และทายสดคอซบทรดานขวา
โครงสรางขอมล บทท 6 ทร 25
N
L R
2
1 3
วธการทองแบบแนวลก (Depth-First Traversals) (6) แบบอนออรเดอร (Inorder Traversal : LNR)
โครงสรางขอมล บทท 6 ทร 26
Algorithm inOrder (root) Traverse a binary tree in left-node-right sequence. Pre root is the entry node of a tree or subtree Post each node has been processed in order 1 if (root is not null) 1 inOrder (leftSubtree) 2 process (root) 3 inOrder (rightSubtree) 2 end if end inOrder
วธการทองแบบแนวลก (Depth-First Traversals) (7) แบบโพสตออรเดอร (Postorder Traversal : LRN)
จะเรมตนกระท าทซบทรดานซายกอนเปนล าดบแรก ตามดวยซบทรดานขวา และทายสดคอรทโหนด
โครงสรางขอมล บทท 6 ทร 27
N
L R
3
1 2
วธการทองแบบแนวลก (Depth-First Traversals) (8) แบบโพสตออรเดอร (Postorder Traversal : LRN)
โครงสรางขอมล บทท 6 ทร 28
Algorithm postOrder (root) Traverse a binary tree in left-right-node sequence. Pre root is the entry node of a tree or subtree Post each node has been processed in order 1 if (root is not null) 1 preOrder (leftSubtree) 2 preOrder (rightSubtree) 3 process (root) 2 end if end postOrder
วธการทองแบบแนวลก (Depth-First Traversals) (9) วธทองแบบ Preorder
โครงสรางขอมล บทท 6 ทร 29
Processing order “Walking” Order
A
B
C D
E
F
A
B E
C D F
C D B A F E
วธการทองแบบแนวลก (Depth-First Traversals) (10) วธทองแบบ Inorder
โครงสรางขอมล บทท 6 ทร 30
Processing order “Walking” Order
A
B
C D
E
F
A
B E
C D F
C D B A F E
วธการทองแบบแนวลก (Depth-First Traversals) (11) วธทองแบบ Postorder
โครงสรางขอมล บทท 6 ทร 31
Processing order “Walking” Order
A
B
C D
E
F
A
B E
C D F
C D B A F E
วธการทองแบบแนวกวาง (Breadth-First Traversals) (1) เปนวธทองเขาไปในทรดวยการกระท าทละระดบจากบนลงลาง
เรมจากรทโหนดในแตละระดบตามแนวกวาง จากซายไปขวา จนครบทกระดบ
โครงสรางขอมล บทท 6 ทร 32
Processing order “Walking” Order
A
B
C D
E
F
A
B E
C D F
วธการทองแบบแนวกวาง (Breadth-First Traversals) (2)
โครงสรางขอมล บทท 6 ทร 33
A
F C D
E B
วธการทองแบบแนวกวาง (Breadth-First Traversals) (3)
โครงสรางขอมล บทท 6 ทร 34
Algorithm breadthFirst (root) Process tree using breadth-first traversal. Pre root is node to be processed Post tree has been process 1 set currentNode to root 2 createQueue (bfQueue) 3 loop (currentNode not null) 1 process (currentNode) 2 if (left subtree not null) 1 enqueue (bfQueue, leftSubtree) 3 end if 4 if (right subtree not null) 1 enqueue (bfQueue, rightSubtree) 5 end if 6 if (not emptyQueue (bfQueue)) 1 set currentNode to dequeue (bfQueue) 7 else 8 end if 4 end loop 5 destroyQueue (bfQueue) end breadthFirst
เอกซเพรสชนทร (Expression Trees) (1) เอกซเพรสชนทร กคอ ไบนารทร ซงการแทนนพจนในเอกซเพรสชนทรนน จะตองเปน
ตามคณสมบตดงตอไปน 1. ตวถกด าเนนการหรอโอเปอแรนดจะเกบไวทโหนดใบ (Leaf Node)
2. ตวด าเนนการหรอโอเปอเรเตอรจะเกบไวทรทโหนดหรอโหนดภายใน (Internal Nodes) ทไมใชโหนดใบ
3. ซบทร ในทนกคอนพจนยอย โดยจะมรทโหนดเปนตวโอเปอเรเตอร
โครงสรางขอมล บทท 6 ทร 35
+
*
+ a
d
b c
a * (b + c) + d a * (b + c) + d
เอกซเพรสชนทร (Expression Trees) (2) เอกซเพรสชนทรแบ Infix จะใชวธการทองเขาไปในทรแบบ Inorder
เอกซเพรสชนทรแบ Postfix จะใชวธการทองเขาไปในทรแบบ Postorder
เอกซเพรสชนทรแบ Prefix จะใชวธการทองเขาไปในทรแบบ Preorder
โครงสรางขอมล บทท 6 ทร 36
การทองเขาไปในเอกซเพรสชนทรแบบ Infix (1) เมอมการทองเพอพมพนพจนในรปแบบ Infix จะตองมการเพมเครองหมายวงเลบเปดทจดเรมตนตนของแตละนพจน
และจะปดดวยเครองหมายวงเลบปดทสวนปลายของนพจนนนๆ
โครงสรางขอมล บทท 6 ทร 37
*
+ a
d
b c
a * (b + c) + d ( a * (b + c) + d )
+ (
(
)
)
( )
การทองเขาไปในเอกซเพรสชนทรแบบ Infix (2)
โครงสรางขอมล บทท 6 ทร 38
Algorithm infix (tree) Print the infix expression for an expression tree. Pre tree is a pointer to an expressiontree Post the infix expression has been printed 1 if (tree not empty) 1 if (tree token is an operand) 1 print (tree token) 2 else 1 print (open parenthesis) 2 print (tree left sebtree) 3 print tree token) 4 print (tree right sebtree) 5 print (close parenthesis) 3 end if 2 end if end infix
การทองเขาไปในเอกซเพรสชนทรแบบ Postfix (1) ใชหลกการทองเดยวกนกบ Postorder
โครงสรางขอมล บทท 6 ทร 39
*
+ a
d
b c
a * (b + c) + d a b c + * d +
+
การทองเขาไปในเอกซเพรสชนทรแบบ Infix (2)
โครงสรางขอมล บทท 6 ทร 40
Algorithm postfix (tree) Print the infix expression for an expression tree. Pre tree is a pointer to an expressiontree Post the infix expression has been printed 1 if (tree not empty) 1 postfix (tree left subtree) 2 postfix (tree right subtree) 3 print (tree token) 2 end if end postfix
การทองเขาไปในเอกซเพรสชนทรแบบ Prefix (1) ใชหลกการทองเดยวกนกบ Perorder
โครงสรางขอมล บทท 6 ทร 41
*
+ a
d
b c
a * (b + c) + d + * a + b c d
+
การทองเขาไปในเอกซเพรสชนทรแบบ Infix (2)
โครงสรางขอมล บทท 6 ทร 42
Algorithm prefix (tree) Print the infix expression for an expression tree. Pre tree is a pointer to an expressiontree Post the infix expression has been printed 1 if (tree not empty) 1 print (tree token) 2 prefix (tree left subtree) 3 prefix (tree right subtree) 2 end if end prefix
เจเนอรลทร (General Trees) เปนทรทแตละโหนดสามารถมโหนดเพมเตมไดไมจ ากด
การแทรกโหนดในเจเนอรลทรสามารถท าไดหลายวธ การแทรกโหนดในเจเนอรลทรแบบ FIFO
การแทรกโหนดในเจเนอรลทรแบบ LIFO
โครงสรางขอมล บทท 6 ทร 43
การแทรกโหนดในเจเนอรลทรแบบ FIFO ท าการแทรกโหนดทต าแหนงปลายลสต (ต าแหนงทายคว)
โครงสรางขอมล บทท 6 ทร 44
A
E
D C
B F
Before insertion
A
E
D C
B F
After insertion
N
M
การแทรกโหนดในเจเนอรลทรแบบ LIFO ท าการแทรกโหนดทต าแหนงหนากลม (เปนไปตามโครงสรางแบบสแตก)
โครงสรางขอมล บทท 6 ทร 45
A
E
D C
B F
Before insertion
A
E
D C
B F
After insertion
F
M
การลบโหนดในเจเนอรลทรแบบ (General Tree Deletions) การลบโหนดจะลบไดเฉพาะโหนดใบเทานน
โหนดมลกจะไมสามารถถกลบออกไปได
ถามการยนยนการลบโหนดทมลก โปรแกรมจะแจง ไมสามารถลบได นอกจากจะท าการลบโหนดลกออกกอน
โครงสรางขอมล บทท 6 ทร 46
การแปลงเจเนอรลทรมาเปนไบนารทร (Changing a General Tree to a Binary Tree) (1)
การแปลงเจเนอรลทรมาเปนไบนารทร ม 3 ขนตอน 1. ใหก าหนดพอยนเตอรจากโหนดพอชไปยงโหนดลกฝ งซาย
2. เชอมโยงโหนดพนอง (Sibling) เขาดวยกน
3. ลบ Branch ทไมตองการออกทงหมด
หลงจากท าครบทง 3 ขนตอนแลว ใหปรบทรใหม กจะไดผลลพธออกมาเปนไบนารทร
โครงสรางขอมล บทท 6 ทร 47
การแปลงเจเนอรลทรมาเปนไบนารทร (Changing a General Tree to a Binary Tree) (2)
โครงสรางขอมล บทท 6 ทร 48
เจเนอรลทร
A
E
D C
B F
H G I
ก าหนดพอยนเตอรชไปยงลกฝ งซาย
A
E
D C
B F
H G I
การแปลงเจเนอรลทรมาเปนไบนารทร (Changing a General Tree to a Binary Tree) (3)
โครงสรางขอมล บทท 6 ทร 49
เชอมโยงโหนดพนอง ลบ Branch ทไมตองการออก
A
E
D C
B F
H G I
A
E
D C
B F
H G I
การแปลงเจเนอรลทรมาเปนไบนารทร (Changing a General Tree to a Binary Tree) (4)
โครงสรางขอมล บทท 6 ทร 50
ผลลพธทไดเปนไบนารทร
A
E
D
C
B
F
H
G
I
ไบนารเสรชทร (Binary Search Trees : BST) (1) ไบนารเสรชทร ถอเปนการน าไบนารทรมาประยกตใชงานเพอการคนหาขอมล
ไบนารเสรชทรประกอบดวยคณสมบตดงตอน 1. ทกๆ โหนดในซบทรดานซายตองมคานอยกวารทโหนด 2. ทก๐ โหนดในซบทรขางขวาตองมคามากกวาหรอเทากบรทโหนด 3. แตละซบทรจะตองเปนไบนารเสรชทร
K เปนคย
โครงสรางขอมล บทท 6 ทร 51
K
All < K All >= K
ไบนารเสรชทร (Binary Search Trees : BST) (2) ไบนารเสรชทรทถกตอง
โครงสรางขอมล บทท 6 ทร 52
17 17
6 19
17
6
3
17
6 19
17
22
19
14 3
ไบนารเสรชทร (Binary Search Trees : BST) (3) ไบนารเสรชทรทไมถกตอง
โครงสรางขอมล บทท 6 ทร 53
17
22 19
17
6 19
14 11
17
6 11
17
6 19
22 3
การทองเขาไปในไบนารเสรชทร (BST Traversals) (1)
โครงสรางขอมล บทท 6 ทร 54
23
18 44
12 20
วธการทองแบบ Preorder
35 52
NLR
การทองเขาไปในไบนารเสรชทร (BST Traversals) (2)
โครงสรางขอมล บทท 6 ทร 55
23
18 44
12 20
วธการทองแบบ Postorder
35 52
LRN
การทองเขาไปในไบนารเสรชทร (BST Traversals) (3)
โครงสรางขอมล บทท 6 ทร 56
23
18 44
12 20
วธการทองแบบ Inorder
35 52
LNR
การคนหาขอมลในไบนารเสรชทร (BST Search) (1) การคนหาโหนดทมคาต าสด (Find the Smallest Node)
โหนดทมคาต าสดคอ 12 อยในต าแหนงโหนดใบดานซายของทร การคนหาโหนดทเกบคาต าสดในทร ดวยการเดนตามบรานซทางซายมอไปจนกระทงถง
โหนดใบ
กจะคนพบโหนดทมคาต าสดในไบนารเสรชทร
โครงสรางขอมล บทท 6 ทร 57
23
18 44
12 20 35 52
การคนหาขอมลในไบนารเสรชทร (BST Search) (2)
โครงสรางขอมล บทท 6 ทร 58
Algorithm findSmallestBST (root) This algorithm finds the smallest node in a BST. Pre root is a pointer to a nonempty BTS or subtree Return address of smallest node 1 if (left subtree empty) 1 return (root) 2 end if 3 Return findSmallestBST (left Subtree) end findSmallestBST
การคนหาขอมลในไบนารเสรชทร (BST Search) (3) การคนหาโหนดทมคาสงสด (Find the Largest Node)
การคนหาจะเรมตนจากรทโหนด และเดนตามไปยงบรานชฝ งขวา
จนกระทงพบโหนดทมคาสงสด
โครงสรางขอมล บทท 6 ทร 59
Algorithm findLargestBST (root) This algorithm finds the largest node in a BST. Pre root is a pointer to a nonempty BTS or subtree Return address of largest node 1 if (right subtree empty) 1 return (root) 2 end if 3 Return findSmallestBST (right Subtree) end findLargestBST
การคนหาขอมลในไบนารเสรชทร (BST Search) (4) การคนหาโหนดตามทตองการ
(Find a Requested Node) การคนหาขอมลทตองการ - >
แทนขอมลไบนารเสรชทรในหนวยความจ าแบบอารเรยกบการคนหาแบบไบนาร
ก าหนดคา Target ทตองการคนหา เมอไดคาทตองการคนหาน าไปเปรยบเทยบกบรทโหนด
ถามคานอยกวารทโหนดกเปรยบเทยบคา Target กบทรดานซายเทานน
ถามคามากกวารทโหนดกเปรยบเทยบคา Target กบทรดานขวาเทานน
จนพบ
สมมต ให Target = 20
โครงสรางขอมล บทท 6 ทร 60
23
18 44
12 20 35 52
12 18 20 13 35 44 52
Sequenced array
Search point in binary search
การคนหาขอมลในไบนารเสรชทร (BST Search) (5)
โครงสรางขอมล บทท 6 ทร 61
Algorithm searchBST (root, targetKey) Search a binarysearch tree for a givenvalue. Pre root is the root to a binary tree or subtree targetKey is the key value requested Return the node address if the value is found null if the node is not in the tree 1 if (empty tree) not found 1 return null 2 end if 3 if (targetKey < root) 1 return searchBST (left subtree, targetKey) 4 else if (targetKey > root) 1 return searchBST (right subtree, targetKey) 5 else found target key return root 6 end if end searchBST
การด าเนนงานในไบนารเสรชทร (BST Operation) (1) การแทรกโหนด (Insertion)
การแทรกโหนดใน BST จะด าเนนการแทรกทต าแหนงโหนดใบ หนอโหนดทคลายใบ
กระท าการแทรกทโหนดใบในต าแหนงทยงคงไวซงคณสมบตของ BST
โครงสรางขอมล บทท 6 ทร 62
23
18 44
12 20 35 52
23
18 44
12 20 35 52
19
Before inserting After inserting 19
การด าเนนงานในไบนารเสรชทร (BST Operation) (2)
โครงสรางขอมล บทท 6 ทร 63
23
18 44
12 20 35 52
23
18 44
12 20 35 52
19
After inserting 38 After inserting 23
38 19 38 23
การด าเนนงานในไบนารเสรชทร (BST Operation) (3)
โครงสรางขอมล บทท 6 ทร 64
Algorithm addBST (root, newNode) Insert node containing new data into BST using recursion. Pre root is address of current node in a BST NewNode is address of node containing data Post newNode inserted into the tree Return address of potential new tree root 1 if (empty tree) 1 set root to newNode 2 return newNode 2 end if Locate null subtree for insertion 3 if (newNode < root) 1 return addBST (left subtree, targetKey) 4 else if (targetKey > root) 1 return addBST (right subtree, targetKey) 5 end if end addBST
การด าเนนงานในไบนารเสรชทร (BST Operation) (4)
โครงสรางขอมล บทท 6 ทร 65
1
9
newNode
1
9
1
2
1
9
2
0
9
newNode < root go left
1
9
1
2 2
0
9
newNode > root go fight
1
9
1
2 2
0
9
Subtree empty Insert here
1
9
1
2 2
0
9
การด าเนนงานในไบนารเสรชทร (BST Operation) (5) การลบโหนด (Insertion)
การลบโหนดออกจากไบนารเสรชทร มความเปนไปได 4 ประการ 1. กรณโหนดทตองการลบไมมลก ใหด าเนนการลบไดทนท 2. กรณโหนดทตองการลบมเฉพาะซบทรดานขวา ใหท าการลบโหนดดงกลาวทง
และดงซบทรดานขวาขนมาแทน 3. กรณโหนดทตองการลบมเฉพาะซบทรดานซาย ใหท าการลบโหนดดงกลาวทง
และดงซบทรดานซายขนมาแทน 4. กรณโหนดทตองการลบมสองโหนดซบทร (ทงดานซายและขวา) ม 2 แนวทาง
ใหด าเนนการหาโหนดทมคามากทสดในซบทรดานซายของโหนดทตองการลบ และเคลอนยายมาแทนทต าแหนงโหนดทถกลบ
ใหด าเนนการหาโหนดทมคานอยทสดในซบทรดานขวาของโหนดทตองการลบ และเคลอนยายมาแทนทต าแหนงทโหนดถกลบ
โครงสรางขอมล บทท 6 ทร 66
การด าเนนงานในไบนารเสรชทร (BST Operation) (6)
โครงสรางขอมล บทท 6 ทร 67
Algorithm deleteBST (root, newNode) This algorithem deletes a node from a BST. Pre root is reference to node to be deleted dltKey is key of node to be deleted Post node deleted Return true if node deleted, false if not found 1 if (empty tree) 1 return false 2 end if 3 if (dltKey < root) 1 return deleteBST (left subtree, targetKey) 4 else if (dlkKey > root) 1 return deleteBST (right subtree, targetKey) 5 end if
การด าเนนงานในไบนารเสรชทร (BST Operation) (7)
โครงสรางขอมล บทท 6 ทร 68
Delete node found-test for leaf node 1 if (no left subtree) 1 make right subtree the root 2 return ture 2 else if (no right subtree) 1 make left subtree the root 2 return ture 3 else 1 save root in deleteNode 2 set largest to largestBST (left subtree) 3 move data in largest to deleteNode 4 return deleteBST (left subtree of deleteNode, key of largest) 4 end if 6 End if end deleteBST
การด าเนนงานในไบนารเสรชทร (BST Operation) (7)
โครงสรางขอมล บทท 6 ทร 69
dltNode 1
7
9 2
3
5
Node to be delete
11
23
2
1 1
7
2
0 2
2
1
7
9 2
3
5
Largest key on Left subtree
11 2
1 1
7
2
0 2
2
Find dltKey Find largest
การด าเนนงานในไบนารเสรชทร (BST Operation) (8)
โครงสรางขอมล บทท 6 ทร 70
1
7
9 2
2
5
Node largest data here
11 2
1 1
7
2
0 2
2
1
7
9 2
2
5
Largest node deleteed
11 2
1 1
7
2
0
Move largest data Delete largest node
เอวแอลเสรชทร (AVL Search Trees) (1) AVL Tree คอ ไบนารเสรชทรทเมอน าความสงของซบทรมาหกลบกนแลวจะตองมคาไม
มากไปกวา 1 ถอวาเปนทรทมความสมดล AVL Tree คอ ไบนารเสรชทรทซบทรดานซาย และซบทรดานขวาจะมคา Balance
Factor เทากบ +1, 0 หรอ -1 เทานน
+1 หมายถง ซายสง (Left Hight : LH)
0 หมายถง สงเทากน (Even Hight : EH) -1 หมายถง ขวาสงสด (Right Hight : RH)
ความสงของทรสงผลตอความเรวในการคนหาขอมล ทรมความสงมากขน ท าใหเราตองท าการเปรยบเทยบคาขอมลมากขนในระหวางทองไปในทร
โครงสรางขอมล บทท 6 ทร 71
|HL - HR| <= 1
เอวแอลเสรชทร (AVL Search Trees) (2)
โครงสรางขอมล บทท 6 ทร 72
8
12
14
18
20
23
44
52 BST ทไมมความสมดล
23
18 44
12 20
8 14
52
AVL Tree
เอวแอลเสรชทร (AVL Search Trees) (3)
โครงสรางขอมล บทท 6 ทร 73
23
18 44
12 20
8 14
52
รายละเอยดแสดงความสงของทร
18
12 20
8 14
LH
LH
LH
EH EH
EH EH
EH
RH
44
52
EH
RH
EH EH
EH EH
ความสมดลของทร (Balancing Trees) (1) เมอมการเพมโหนดหรอลบโหนดออกจากทร ท าใหทรไมสมดลได
(Unbalancede) ถามการตรวจสอบพบวาทรไมสทดล จ าเปนตองด าเนนการปรบความสมดลเสยใหม
ดวยวธการหมนโหนด (Rotating Nodes)
ส าหรบทรทไมสมดล สามารถเกดขนไดดวย 4 กรณดงตอไปน Left of Left (ซบทร LH ของทร LH)
Right of Right (ซบทร RH ของทร RH)
Right of Left (รท LH ซบทรซาย RH)
Left of Right (รท RH ซบทรขวา LH)
โครงสรางขอมล บทท 6 ทร 74
ความสมดลของทร (Balancing Trees) (2)
โครงสรางขอมล บทท 6 ทร 75
Case 1 : Left of Left (ความไมสมดลของทร)
18
12 20
8 14
4 Insert 4
EH
EH EH
LH
EH
18
12 20
8 14
4
LH
EH LH
LH
EH
EH
Before After
Unbalanced
ความสมดลของทร (Balancing Trees) (3)
โครงสรางขอมล บทท 6 ทร 76
Case 2 : Right of Right (ความไมสมดลของทร)
14
12 20
18 23
44 Insert 44
EH
EH EH
RH
EH
14
12 20
8 23
44
EH
EH RH
RH
RH
EH
Before After
Unbalanced
ความสมดลของทร (Balancing Trees) (4)
โครงสรางขอมล บทท 6 ทร 77
Case 3 : Right of Left (ความไมสมดลของทร)
18
12 20
4 14
13 Insert 13
EH
EH EH
RH
EH
18
12 20
4 14
13
EH
EH
RH
LH
EH
Before After
Unbalanced
RH
ความสมดลของทร (Balancing Trees) (4)
โครงสรางขอมล บทท 6 ทร 78
Case 4 : Left of Right (ความไมสมดลของทร)
14
12 20
18 44
19 Insert 19
EH
EH EH
RH
EH
14
12 20
18 44
19
RH
EH
RH
EH
Before After
Unbalanced
EH EH
กรณท 1 : Left of Left (1) การหมนโหนดทไมสมดลไปทางขวา (แบบงาย)
โครงสรางขอมล บทท 6 ทร 79
20
18
12
EH
LH
LH
Unbalanced (left of Left)
After inserting 12
20
18
12
EH
EH
EH
After rotation
Rotate right
กรณท 1 : Left of Left (2) การหมนโหนดทไมสมดลไปทางขวา (แบบซบซอนยงขน)
โครงสรางขอมล บทท 6 ทร 80
18
12
8
LH
LH
LH
Unbalanced (left of Left)
After inserting 4 After rotation
4
12
EH
EH
EH
20
12
8
8
EH
LH
EH
4 12
EH EH
EH
18
Rotate right
กรณท 2 : Right of Right (1) การหมนโหนดทไมสมดลไปทางซาย (แบบงาย)
โครงสรางขอมล บทท 6 ทร 81
20
18
12
EH
RH
RH
Unbalanced (Right of Right)
After inserting 20
20
18
12
EH
EH
EH
After rotation
Rotate left
กรณท 2 : Right of Right (2) การหมนโหนดทไมสมดลไปทางซาย (แบบซบซอนยงขน)
โครงสรางขอมล บทท 6 ทร 82
14
12
18
RH
EH
RH
After inserting 44 After rotation
44
23
EH
EH
RH
20
20
14
18
EH
EH
EH
12 44
EH EH
RH
23
Rotate left
Unbalanced (Right of Right)
กรณท 3 : Right of Left (1) การหมนโหนดหนงไปทางซาย และหมนอกโหนดหนงไปทางขวา (แบบงาย)
โครงสรางขอมล บทท 6 ทร 83
12
4
8
EH
RH
LH
12
8
4
EH
EH
EH
First Rotate left
12
8
4
EH
LH
LH
Second Rotate Right
กรณท 3 : Right of Right (2) การหมนโหนดหนงไปทางซาย และหมนอกโหนดหนงไปทางขวา(แบบซบซอนยงขน)
โครงสรางขอมล บทท 6 ทร 84
23
18
12
EH
LH
LH
Original tree After left rotation
14
52
EH
EH
RH
44
20
4
16
RH
RH
EH
First Rotate 12 left
23
18
14
EH
LH
LH
16
52
EH
LH
RH
44
20
12
4
LH
EH
EH
Second Rotate 18 right
กรณท 3 : Right of Right (3) การหมนโหนดทไมสมดลไปทางซาย (แบบซบซอนยงขน)
โครงสรางขอมล บทท 6 ทร 85
After Right rotation
23
18
14
EH
EH
LH
16
52
EH
LH
RH
44
20
12
4
EH
EH
EH
กรณท 4 : Left of Right (1) การหมนโหนดหนงไปทางขวา และหมนอกโหนดหนงไปทางซาย (แบบงาย)
โครงสรางขอมล บทท 6 ทร 86
12
44
18
EH
LH
RH
44
18
12
EH
EH
EH
Second Rotate left 12
18
44
EH
RH
RH
First Rotate Right
กรณท 4 : Right of Right (2) การหมนโหนดหนงไปทางขวา และหมนอกโหนดหนงไปทางซาย(แบบซบซอนยงขน)
โครงสรางขอมล บทท 6 ทร 87
18
12
EH
EH
RH
Original tree After Right rotation
52
LH
LH
44
23
20
EH
First Rotate Right 18
12
RH
EH
RH
20 44
EH
RH
23
52
EH
Second Rotate left
กรณท 4 : Right of Right (3) การหมนโหนดหนงไปทางขวา และหมนอกโหนดหนงไปทางซาย(แบบซบซอนยงขน)
โครงสรางขอมล บทท 6 ทร 88
After left rotation
23
18
EH
EH
EH
12 20
EH
RH
44
52
EH
ฮพ (Heaps) (1) โครงสรางทรแบบฮพ คอ
ไบนารทรทซบทรดานซาย และ ซบทรดานขวาจะมคานอยกวา (หรอเทากบ) โหนดพอ
รทโหนดของฮพทรจะรบประกนวามคามากทสดในทร
คณสมบต เปนไบนารทรแบบสมบรณหรอเกอบสมบรณ
คยของโหนดพอจะตองงมคามากกวาหรอเทากบคยโหนดลก (Max-Heaps)
โครงสรางขอมล บทท 6 ทร 89
K <= K
K
K <= K
ฮพ (Heaps) (2)
โครงสรางขอมล บทท 6 ทร 90
12
12
24
8 18
44
23
6 10
ฮพ (Heaps) (3)
โครงสรางขอมล บทท 6 ทร 91
24
12
24
8
18
24
44
6 10
12
8
10
44
24
6 18
ฮพทไมตรงคณสมบต
ฮพ (Heaps) (4)
โครงสรางขอมล บทท 6 ทร 92
56
78
32
45 8
การแทนโครงสรางฮพในหนวยความจ า
23 19
78 56 32 45 8 23 19
การสรางฮพ (1) Reheap Up (1)
สลบ Node กบ Parent จนกกวาจะถกต าแหนง ปรบล าดบ ดวยการน าสมาชกล าดบทายใหลอยขนไปยงทรจนกระทงอยในต าแหนง
เหมาะสมตรงตามคณสมบตของฮพ
โครงสรางขอมล บทท 6 ทร 93
การสรางฮพ (2) Reheap Up (2)
โครงสรางขอมล บทท 6 ทร 94
21
42
32
16 12 20 30
13 15 10 25
Original tree : not a heap
การสรางฮพ (3) Reheap Up (3)
โครงสรางขอมล บทท 6 ทร 95
21
42
32
16 25 20 30
13 15 10 12
Last element (25): move up
การสรางฮพ (4) Reheap Up (4)
โครงสรางขอมล บทท 6 ทร 96
25
42
32
16 21 20 30
13 15 10 12
Move up again : tree is a heap
การสรางฮพ (5) Reheap Down (1)
สลบ Node กบ Child ทมคามากกวา ปรบล าดบ ดวยการดนโหนดทเปนรทลงต าไปในฮพจนกระทงอยในต าแหนงทเหมาะสม
ตรงตามคณสมบตของฮพ
โครงสรางขอมล บทท 6 ทร 97
การสรางฮพ (6) Reheap Down (2)
โครงสรางขอมล บทท 6 ทร 98
21
10
32
16 12 20 30
13 15
Original tree : not a heap
การสรางฮพ (7) Reheap Down (3)
โครงสรางขอมล บทท 6 ทร 99
21
32
10
16 12 20 30
13 15
Root moved down (right)
การสรางฮพ (8) Reheap Down (4)
โครงสรางขอมล บทท 6 ทร 100
21
32
30
16 12 20 10
13 15
Moved down again : tree is a heap
การสรางฮพ (9) Ex การสรางฮพทเรมตนจากทรวางเปลา และมการแทรกขอมลตามล าดบ
30, 35, 5, 50, 64, 80, 24, 51
โครงสรางขอมล บทท 6 ทร 101
30
Insert 30
30
Insert 35
35
35
30
35
30 5
Insert 5
การสรางฮพ (10) Ex การสรางฮพทเรมตนจากทรวางเปลา และมการแทรกขอมลตามล าดบ
30, 35, 5, 50, 64, 80, 24, 51
โครงสรางขอมล บทท 6 ทร 102
Insert 50
35
30 5
50
35
50 5
30
50
35 5
30
การสรางฮพ (11) Ex การสรางฮพทเรมตนจากทรวางเปลา และมการแทรกขอมลตามล าดบ
30, 35, 5, 50, 64, 80, 24, 51
โครงสรางขอมล บทท 6 ทร 103
Insert 64
50
35 5
30 64
50
64 5
30 35
64
50 5
30 35
การสรางฮพ (12) Ex การสรางฮพทเรมตนจากทรวางเปลา และมการแทรกขอมลตามล าดบ
30, 35, 5, 50, 64, 80, 24, 51
โครงสรางขอมล บทท 6 ทร 104
Insert 80
64
50 5
30 35 80
64
50 80
30 35 5
80
50 64
30 35 5
การสรางฮพ (12) Ex การสรางฮพทเรมตนจากทรวางเปลา และมการแทรกขอมลตามล าดบ
30, 35, 5, 50, 64, 80, 24, 51
โครงสรางขอมล บทท 6 ทร 105
Insert 24
80
50 64
30 35 5 24
Insert 51
80
50 64
30 35 5 24
51
การสรางฮพ (12) Ex การสรางฮพทเรมตนจากทรวางเปลา และมการแทรกขอมลตามล าดบ
30, 35, 5, 50, 64, 80, 24, 51
โครงสรางขอมล บทท 6 ทร 106
Insert 51
80
50 64
51 35 5 24
30
80
51 64
50 35 5 24
30
การลบฮพ (1) การลบโหนดภายในฮพ จะตองมการปรบปรงโครงสรางทรใหม (Restructure)
เพอใหคงคณสมบตของฮพทร
โครงสรางขอมล บทท 6 ทร 107
80
51 64
50 35 5 24
30
80 51 64 50 35 5 24 30
Heap
To be deleted
การลบฮพ (2)
โครงสรางขอมล บทท 6 ทร 108
51
50 64
30 35 5 24
51 50 64 30 35 5 24
Heap
อางอง โอภาส เอยมสรวงศ
โครงสรางขอมล (Data Structures) เพอการออกแบบโปรแกรมคอมพวเตอร.—กรงเทพฯ : ซเอดยเคชน, 2549.
โครงสรางขอมล บทท 7 กราฟ 109