ทรี (trees) - wordpress.com · 2011-11-01 ·...

Post on 23-May-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related