blue bubbles template 6 tree.pdf · 235012 : data structure and algorithms...

Post on 29-Oct-2019

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

235012 : Data Structure and Algorithms

Chapter 6

ตนไม (Tree)

Chapter 1

235012

Data Structure and Algorithms

235012 : Data Structure and Algorithms

โครงสรางทวไปของตนไม

Non-Linear Data Structure

Hierarchical Relationship

Root - จดยอดของตนไม

Node - จดทมการแตกกงกานสาขาออกไป

Branch or Link - กงกานสาขาทเชอมตอระหวางโหนด

235012 : Data Structure and Algorithms

ลกษณะของโครงสรางขอมลแบบตนไม

Root

Node

Branch/ Link

235012 : Data Structure and Algorithms

การเรยกชอสวนตางๆ ของตนไม

โหนดราก (Root Node) โหนดแรกของตนไม

โหนดแม(Parent Node) node ทม degree > 0

โหนดลก Children) node ทอยล าดบลางของอกโหนดหนง

โหนดพนอง (sibling) โหนดทอยในระดบเดยวกนมโหนดแมรวมกน

โหนดใบ (Leaf Node) node ทม degree = 0

235012 : Data Structure and Algorithms

การเรยกชอสวนตางๆ ของตนไม

ระดบ Level ระยะทางจาก ราก จนถงโหนดนนๆ

ความสง (height) หรอ

ความลก (depth)

ระดบสงสดของโหนดใบ บวกดวย 1

สวนยอยของตนไม

(Sub trees)

โหนดทอยในต าแหนงสบทอดของโหนดทเปนราก

235012 : Data Structure and Algorithms

สวนยอยของตนไม (Sub-Tree)

ทกโหนดเปน root ของ sub-tree ของตวมนเอง

R เปน root ของ subtree A,B,C,D A เปน root ของ subtree E,F,G F เปน root ของ subtree J C เปน subtree ทมแต root C

235012 : Data Structure and Algorithms

Root

Parents

Leaves

Children sibling

(A)

(B)

(H)

(C)

(E)

235012 : Data Structure and Algorithms

ตนไมแบบทวภาค (Binary Tree)

Tree ทแตละ node มจ านวน sub tree <= 2

(แตละ node ม degree <= 2 )

235012 : Data Structure and Algorithms

Empty หรอ

Null Tree

235012 : Data Structure and Algorithms

1

2

3

4

1

2 3

2 3 4 4 4

4

Fig.A Fig.B

235012 : Data Structure and Algorithms

ตนไมส าหรบคนหาแบบทวภาค (Binary Search Tree)

คอ Tree แบบทวภาค แตมเงอนไขเพมเตมคอ ขอมลของโหนดลก

ดานซายจะตองมคานอยกวาโหนดพอ และขอมลโหนดลก

ดานขวาจะตองมคามากกวาโหนดพอเสมอ

7

5

1

12

17 9 3

235012 : Data Structure and Algorithms

การแทนตนไมแบบทวภาคในคอมพวเตอร

การแทนโดยอาศยอารเรย

o ใชอารเรย 3 อารเรยในการจดเกบ

o ใชอารเรย 1 มตอารเรยเดยวในการจดเกบ

การแทนโดยอาศย Linklisted

235012 : Data Structure and Algorithms

การแทนโดยใชอารเรย 3 อารเรยในการจดเกบ

จะใชอารเรยทมขนาดเทากนจ านวน 3 ชด คอ

data – เกบขอมลในแตละ node

left – เกบต าแหนงของ node ลกทางดานซายมอ

right – เกบต าแหนงของ node ลกทางดานขวามอ

ถา node ใดไมม node ลก ใหเกบคา 0 (แทน NULL)

และใชตวแปร root เกบต าแหนงของ node แรกใน tree

235012 : Data Structure and Algorithms

A 2 3 B 6 4 C 7 0 E 8 5 H 0 0 D 0 0 F 0 0 G 0 0

data left right 1

root 1 2 3 4 5 6 7 8

A

B C

D E F

G H

ตวอยาง

ขอมลในหนวยความจ า General binary tree

235012 : Data Structure and Algorithms

การแทนโดยใชอารเรย 1 มตอารเรยเดยวในการจดเกบ

ก าหนดต าแหนงชองในอารเรยใหแตละ node โดย

เรมตงแต level 0 , 1 , … , k ตามล าดบ

แตละ level จะเรมจาก node ทางดานซายสดไปถงโหนดทางขวา

สด ตามล าดบ

ลกษณะเปนการนบชองจากบนลงลาง, ซายไปขวา

การก าหนดต าแหนงเชนนจะไมสนใจวามขอมลของโหนดนนจรง

หรอไม (Fix ต าแหนงอารเรยไว)

235012 : Data Structure and Algorithms

1 A B C

D E G

F

H I

2 3 4 5 6 7

8 9 10 11 12 13 14 15

A B C D E - F G - - H - - - I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

general binary tree

ขอมลในหนวยความจ า

ตวอยาง

235012 : Data Structure and Algorithms

จะไดความสมพนธระหวาง tree และ อารเรย ดงน

ถา binary tree มความสงเทากบ h จะตองใชอารเรยทมขนาด

2h – 1 ในการจดเกบ

parent ของโหนด i ใดๆ จะอยทต าแหนง i/2 ถา i ไมเทากบ 1

left child ของโหนด i ใดๆ จะอยทต าแหนง 2i

right child ของโหนด i ใดๆ จะอยทต าแหนง 2i + 1

235012 : Data Structure and Algorithms

การแทนโดยอาศย link listed

เปนวธการจดเกบทมประสทธภาพ เนองจากไมเกดปญหาการ

จองขอมลมากหรอนอยเกนไป

โดยขอมลแตละ node ของ tree จะประกอบไปดวย

data – เกบขอมลในแตละ node

Lptr – เกบ address ของ node ลกทางดานซายมอ

Rptr – เกบ address ของ node ลกทางดานขวามอ

235012 : Data Structure and Algorithms

ตวอยาง

235012 : Data Structure and Algorithms

Assignment : จงเขยนภาพแสดงการจดเกบขอมลในหนวยความจ า Binary

Tree ดวยวธตอไปน

1. ใชอารเรยทมขนาดเทากนจ านวน 3 ชด 2. ใชอารเรย 1 มตอารเรยเดยวในการจดเกบ 3. การแทนโดยอาศย link-listed

235012 : Data Structure and Algorithms

ใชอารเรยทมขนาดเทากนจ านวน 3 ชด

A 4 3 B 2 1 C 0 -1 D -1 -1 E -1 -1

data left right 5

root 5 4 3 2 1

ใชอารเรย 1 มตอารเรยเดยวในการจดเกบ

F -1 -1 0

A B C D E F

เฉลย !!!

235012 : Data Structure and Algorithms

การแทนโดยอาศย link-listed

A

B

null D null null E null

C null

null F null

เฉลย !!!

235012 : Data Structure and Algorithms

23

Assignment : จงเขยนภาพแสดงการจดเกบขอมลในหนวยความจ า Binary

Tree ดวยวธตอไปน

1. ใชอารเรยทมขนาดเทากนจ านวน 3 ชด 2. ใชอารเรย 1 มตอารเรยเดยวในการจดเกบ 3. การแทนโดยอาศย pointer

235012 : Data Structure and Algorithms

จากการขอมลในอารเรยตอไปน เขยนเปนโครงสรางขอมล Binary Tree ไดอยางไร

2 7 5 2 6

data left right 0

root

1 2 3 4 5 9 6

0

5 11 4

7 8

เฉลย !!!

235012 : Data Structure and Algorithms

จากการขอมลในอารเรยตอไปน เขยนเปนโครงสรางขอมล Binary Tree ไดอยางไร

2 7 5 2 6 9 5 11 4

เฉลย !!!

2

Binary tree traversals Expression Tree Binary Search Tree (BST) AVL Tree Heaps

ตนไมแบบทวภาค (Binary tree)

27

ตนไมแบบทวภาค (binary tree) หมายถง tree ทแตละ node มจ านวน subtree <= 2

( แตละ node ม degree <= 2 )

28

Empty หรอ Null Tree

29

Complete และ Nearly Complete Binary Tree

Binary tree traversals 30

1. Depth-first traversals เปนการทองเขาไปในทรดวยการเดนทางจากรทโหนดไปยงโหนดลก ๆ

2. Breath-first traversals ประมวลผลทละ Level จากบนลงลาง

Depth-first traversals 31

มการบญญตค ายอเพอใชงานดงน

N แทน root node

L แทน left sub tree

R แทน right sub tree

ม 3 วธทนยมใชกนอยางแพรหลาย

Pre-order traversals

In-order traversals

Post-order traversals

32

N L R L N R L R N

Depth-first tarversals

33

แบบ Pre-order

N L R

algorithm preOrder (val root <node pointer>)

1 if (root is not null)

1 process(root)

2 preOrder(root->leftSubtree)

3 preOrder(root->rightSubtree)

2 return

แบบ Pre-Order Traversal

Y

R

X A

D C

G

start

R

Result

A C D X Y G

stop

N L R

35

แบบ Inorder

L N R

algorithm inOrder (val root <node pointer>)

1 if (root is not null)

1 inOrder(root->leftSubtree)

2 process(root)

3 inOrder(root->rightSubtree)

2 return

แบบ In-Order Traversal

Y

R

X A

D

G

start

C

Result

A D R G Y X

stop

L N R

C

37

แบบ Post-order

L R N

algorithm postOrder (val root <node pointer>)

1 if (root is not null)

1 postOrder(root->leftSubtree)

2 postOrder(root->rightSubtree)

3 process(root)

2 return

แบบ Post-Order Traversal

R

X A

D C

start

C

Result

D A G Y X R

stop

L R N

A

B C

D

G

E F

H I

Pre-order – NLR

In-order – LNR

Post-order - LRN

A B D G C E H I F

D G B A H E I C F

G D B H I E F C A

40

Pre-order – NLR

In-order – LNR

Post-order - LRN

2 7 2 6 5 11 5 9 4

2 7 5 6 11 2 5 4 9

2 5 11 6 7 4 9 5 2

algorithm breathFirst (val root <node pointer>)

1 p = root

2 while (p not null)

1 process(p)

2 if (p->left not null)

1 enqueue(p->left)

3 if (p->right not null)

1 enqueue(p->right)

4 if (not emptyQueue)

1 dequeue(p) else

1 p = null

3 return

Breath-first

A

B C

D

G

E F

H I

Breath-first A B C D E F G H I

43

Expression Tree

หมายถง Binary Tree ทมคณสมบตดงตอไปน

1. Leaf เกบ Operand

2. Root และ Internal node เกบ Operator

3. Subtree เปน Sub expression

ตวอยาง

45

การทองใน Expression Tree

1. Pre-order Traversal

2. Post-order Traversal

3. In-order Traversal

Prefix Expression

Postfix Expression

Infix Expression

Pre-order Traversal

+ * a + b c d

1 if (root is not null)

1 print(root->token)

2 prefix(root->leftSubtree)

3 prefix(root->rightSubtree)

2 return

Post-order Traversal

a b c + * d +

1 if (root is not null)

1 postfix(root->leftSubtree)

2 postfix(root->rightSubtree)

3 print(root->token)

2 return

Inorder Traversal

1 if (root is not null)

1 if root->token is operand

1 print(root->token)

else

1 print(open parenthesis)

2 infix(root->leftSubtree)

3 print(root->token)

4 infix(root->rightSubtree)

5 print(close parenthesis)

2 return

( ( a * ( b + c ) ) + d )

+

A -

* D

B C

จงหา Expression ของ Binary Tree น

1. Pre-fix Expression (NLR)

2. Infix Expression (LNR)

3. Postfix Expression (LRN)

Assignment

+ A - * B C D

A + B * C - D

A B C * D - +

General Tree

หมายถง Tree ทสามารถม degree ไดไมจ ากดจ านวน

ขนตอน

1. ระบ chide ทอยดานซายสด

2. ใหเชอม node ทมพอเดยวกน ( node พนอง) เขาดวยกน

- ลบเสนเชอมโยงจาก node ทเปนพอไปยงลก ๆ ออกใหหมด

ยกเวน ลกทอยต าแหนงซายสด

3. เลอก son ทางซายและขวา ของแตละ node

- son ทางซาย คอ node ทอยใต node นน

- son ทางขวา คอ node ทอยขาง ๆ (ระดบเดยวกน / Brother )

การแปลง General Tree เปน Binary Tree

ตวอยาง การแปลง General Tree เปน Binary Tree

เรมตน A

B D

E F G T

C

H

1.ใหเชอม node ทมพอเดยวกน ( node พนอง) เขาดวยกน

การแปลง Tree ไปเปน Binary Tree

54

A

B D

F G T

C

H

ขนท 1

E

1.ใหเชอม node ทมพอเดยวกน ( node พนอง) เขาดวยกน

A

B D

F G T

C

H E 1. ลบเสนเชอมโยงจาก node ทเปนพอไปยง ลก ๆ ออกใหหมด

ยกเวน ลกทอยต าแหนงซายสด

ขนท 1-1

เลอก son ทางซายและขวา ของแตละ node

- son ทางซาย คอ node ทอยใต node นน

- son ทางขวา คอ node ทอยขาง ๆ

(ระดบเดยวกน / Brother ) 56

A

B

D

F G

T

C

H

E

ขนท 2

แบบฝกหด จงแปลง Tree ใหเปน Binary Tree

1

2

6

10

7

3 4 5

8 9

แบบฝกหด-เฉลย จงแปลง Tree ใหเปน Binary Tree

1

2

6

10 7

3

4

5 8

9

Binary Search Tree

เปน binary tree ทมคณสมบตพเศษ คอ ทก node ของ subtree ทางซายมคานอยกวา root ทก node ของ subtree ทางขวามคามากกวาหรอเทากบ root ทก ๆ subtree เปน binary search tree

>

ตวอยาง Binary Search Tree ทถกตอง

61

ตวอยาง Binary Search Tree ทไมถกตอง

ประโยชนของ Binary Search Tree

ตองการคนหาขอมล 1 ตวจากขอมลทงหมด 100,000 ตว

เกบในอารเรย : อาจตองคนหา 100,000 ครง

คนหาในอารเรยทละชอง

เกบใน BST : ลดจ านวนการคนหาลงไดสงสดเหลอเพยง 17 ครง(โดยประมาณ)

ถา root แบงขอมลเปน 2 สวนเทาๆกน

คนครงท 1 เหลอขอมล ½

คนครงท 2 เหลอขอมล ¼

...

สงทควรทราบเพมเตมเกยวกบ binary search tree

ถาเปน BST ทลกทางดานซายมคานอยกวาพอแม เราสามารถใช inorder traversal

เพอหาขอมลทเรยงล าดบกนได

ถาตองการหาขอมลทมคานอยทสด สามารถหาได leaf ทอยทางดานซายสดของทร

หรอจะเทากบ root ของ subtree ทางดานซายสด ถากรณ subtree นนไมมโหนดลก

ทางดานซาย

ในท านองเดยวกน เรากสามารถหาขอมลทมคามากทสดไดเชนเดยวกน

operation ทตองท าใน BST

BST ม operation ทส าคญอย 2 operation คอ

การเพมโหนด

เพมแลวโหนดใหมตองเปน Leaf เทานน

เพมในต าแหนงทยงคงคณสมบตของ Binary Search Tree ไว

การลบโหนด

65

ตวอยาง การเพมขอมลใน Binary Search Tree

66

การลบโหนด ใน BST 67

ตองพจารณาวา Node ทจะลบนนตรงกบกรณ

1. ไมม Child

2. มเฉพาะ Right Subtree

3. มเฉพาะ Left Subtree

4. มทง Left และ Right Subtree

<== ลบไดเลย

<== ดง Right Subtree ขนมา

<== ดง Left Subtree ขนมา

น าคาทมากทสดของ Left Subtree มา

แทน

68

ตวอยาง กรณท 1 ไมมโหนดลก

23

18 X X 44 X X before delete 44

23 X

18 X X after delete 44

69

ตวอยาง กรณท 2 มเฉพาะ right subtree

23

18 X X 44 X

before delete 44

46 X X

58 X

after delete 44

23

18 X X

46 X X

58 X

70

ตวอยาง กรณท 3 มเฉพาะ left subtree

23

18 X X 44 X

before delete 44

36 X X

28 X

23

18 X X

after delete 44

36 X X

28 X

71

ตวอยาง กรณท 4 มโหนดลกทง 2 ขาง

23

18 44 X

before delete 23

20 X X 10 X X

20

18 X 44 X

after delete 23 10 X X

การสราง BST

insert ขอมลเขาไปทละ 1 โหนด

เชน 10 15 8 14 13 12

10 X X

insert 10 insert 15

10 X

15 X X

insert 8

10

15 X X 8 X X

73

insert 14 10

15 X 8 X X

14 X X

insert 13 10

15 X 8 X X

14 X

13 X X

insert 12 10

15 X 8 X X

14 X

13 X

12 X X

65

40 75

70 95 30 55

35 80

65 40 75 30 55 35 70 95 80

ตวอยาง

75

65

40 75

70 95 30 55

35 80

40 ADD

ซ ำ !! 1. ทงไปเลย

76

65

40 75

70 95 30 55

35 80

40 ADD

ซ ำ !!

2 . เกบควำมถ Node ทซ ำ

2

77

65

40 75

70 95 30 55

35 80

40 ADD

3. ใช Link list มำเชอม 40 ซ ำ !!

แบบฝกหด สราง Binary Search Tree จากการ Add ขอมลตามล าดบ

65 40 30 70 75 55 35 95 80

คณภาพของ BST ขนอยกบการกระจายคาของขอมล

ถามขอมลทเกอบเรยงหรอเรยงกนอยแลว จะท าใหเกด BST ทไมสมดล

เชน ชดขอมล 10 12 18 24 35

10 X 12 X

18 X 24 X

25 X X

80

ขอเสย : ความเรวในการคนหาขอมลจะแย (กรณแยทสดคอตองเปรยบเทยบ n

ครง)

ป 1960 นกคณตศาสตรชาวรสเซยไดพฒนาเทคนคในการจดรปแบบของ BST

โดยปรบแตงโหนดใหสมดลหรอเกอบสมดล ทกครงทมการเพมหรอลบขอมล และ

ยงคงคณสมบตของ BST อย

เรยกตนไมชนดนวา AVL tree หรอ ตนไมความสงสมดล

AVL tree (Adel’son, Vel’skii and Landis) 81

Height-balanced binary search tree หรอ ตนไมความสงสมดล

คอ BST ชนดหนงทมคณสมบตเพมเตมคอ

ทก subtree ม balance factor (bf) แตกตางกนไมเกน 1 [-1, 0, +1]

bf คอ ความสงของ left subtree ลบดวย ความสงของ right subtree

bf = | HL - HR |

| bf | <= 1

82

0

-1

-2

-3

-4

-5

-6

-7

0 0

0 0 0

1 -1

1

83

AVL tree

unbalanced BST

การเพม , ลบโหนดออกจาก AVL Tree

ใชวธการเดยวกนกบการเพม , ลบ โหนดจาก BST

การเพม – เพมทต าแหนงทเปน leaf เทานน

การลบ – ม 4 กรณ

หลงจากเพม – ลบ โหนดทกๆ ครง

ตองสราง Balancing Tree เพอคงคณสมบตของ AVL Tree

Balancing Tree (หลกการท าตนไมใหสมดล)

คอการปรบตนไมทไมเปน AVL tree ใหเปน AVL tree

( | bf | <= 1 , | HL - HR | <= 1 )

เกดขนทกครงหลงการเพมหรอลบโหนด ซงท าใหตนไมขาดคณสมบตของ AVL tree

ไป

มกรณทตองจ าอย 4 กรณ คอ

- SLR (single left rotation) - SRR (single right rotation)

- DLR (double left rotation) - DRR (double right rotation)

SLR (single left rotation) 86

ใชในกรณทโหนดลางสด ทไมสมดลม bf = -2 (right subtree ของโหนดนสงกวา

left subtree อย 2) ดงนนจงตองมการหมนไปทางซาย

และโหนดลกทางดานขวาของโหนดขางบนม bf = -1 (right subtree ของโหนดนก

ยงสงกวา left subtree อย 1) ซงหมายความวาตนไมมการเอยงไปทางดานขวา

ตลอด ดงนนจงหมนไปทางซายแคครงเดยว

87 10 20

30

(-2)

(-1)

(0)

20

10 30 (0) (0)

(0)

10 20

30

(-2)

(-1)

(-1,1) A

B

D C

กรณม 3 โหนด

10 20

30

(0)

(-1,1)

A B D C

(0)

กรณทวไป เปลยนต าแหนงของ

subtree B

88

SLR

SRR (single right rotation) 89

ใชในกรณทโหนดลางสดทไมสมดลม bf = 2 (left subtree ของโหนดนสงกวา right

subtree อย 2) ดงนนจงตองมการหมนไปทางขวา

และโหนดลกทางดานซายของโหนดนม bf = 1 (left subtree ของโหนดนกยงสง

กวา right subtree อย 1) ซงหมายความวาตนไมมการเอยงไปทางดานซายตลอด

ดงนนจงหมนไปทางขวาแคครงเดยว

90 30 20

10

(2)

(1)

(0)

20

10 30 (0) (0)

(0)

30 20

10

(2)

(1)

(-1,1) D

C

B A

กรณม 3 โหนด

10 20

30

(0)

(-1,1)

A B D C

(0)

กรณทวไป เปลยนต าแหนงของ subtree C

91 SRR

DLR (double left rotation) 92

ใชในกรณทโหนดลางสด ทไมสมดลม bf = -2 (right subtree ของโหนด

นสงกวา left subtree อย 2) ดงนนจงตองมการหมนไปทางซาย

แตโหนดลกทางดานขวาของโหนดขางบน ม bf = 1 (right subtree ของ

โหนดลกกลบต ากวา left subtree อย 1) ซงหมายความวาตนไมมการ

เอยงไปทางดานขวาและดานซาย ดงนนจงหมนไปทางซาย 2 ครง

93 10 30

20

(-2)

(1)

(0)

20

10 30 (0) (0)

(0)

10 30

20

(-2)

(1)

(-1,1) A

D

C B

กรณม 3 โหนด

10 20

30

(0)

(0,-1)

A B D C

(1,0)

กรณทวไป เปลยนต าแหนงของ subtree B,C

94 DLR

case ท 1

95

DLR

case ท 2

+

DRR (double right rotation) 96

ใชในกรณทโหนดลางสดทไมสมดลม bf = 2 (left subtree ของโหนดนสงกวา right

subtree อย 2) ดงนนจงตองมการหมนไปทางขวา

แตโหนดลกทางดานซายของโหนดน ม bf = -1 (left subtree ของโหนดนกลบต า

กวา right subtree อย 1) ซงหมายความวาตนไมมการเอยงไปทางดานซายและ

ดานขวา ดงนนจงหมนไปทางขวา 2 ครง

97 30 10

20

(2)

(-1)

(0)

20

10 30 (0) (0)

(0)

30 10

20

(2)

(-1)

(1,-1) D

A

C B

กรณม 3 โหนด

10 20

30

(0)

(-1,0)

A B D C

(0,1)

กรณทวไป เปลยนต าแหนงของ subtree B,C

98

0

DRR

case ท 1

99 DRR

case ท 2

Heaps หวขอวนน

Heaps โครงสรางของ heap heap operation

Reheap Up , Reheap Down การแทน heap ในหนวยความจ า heap sort (application of heap) ขอดของ heap sort

100

Heap

คอ binary tree ทมคณสมบต คอ แตละ subtree คาของ root >= child เสมอ (Max-heap) หรอ แตละ subtree คาของ root <= child เสมอ (Min-heap) เปน complete binary tree หรอ nearly complete

binary tree Heap ไมใช binary search tree

101

ตนไมทวภาคแบบสมบรณ (complete binary tree)

คอ binary tree ทม node เตมทก level (ทก node ทไมใช leaf ม child

ทงดานซายและดานขวา)

102

nearly complete binary tree คอ binary tree ทม node เตมทก level ยกเวน level สดทาย และ

node ใน level สดทายอยเรยงกนทางซายมอ

103

โครงสรางของ Max-heap 104

< <

คาทมากทสดอยท root เสมอ

โครงสรางของ Min-heap 105

> >

คาทนอยทสดอยท root เสมอ

ตวอยาง Heap ทถกตอง 106

ตวอยาง Tree ทไมใช Heap 107

Heap Operation 1. Insert & Reheap Up Insert โหนดใหมท level ลางสด ณ ต าแหนงวางดานซายสด (ท าให

ยงคงสภาพของ nearly complete หรอ complete binary tree อย) Reheap Up ปรบ tree หลงจาก insert ใหเปน heap

2. Delete & Reheap Down Delete ท Root เทานน และน า Node ท level ลางสดต าแหนงขวาสด

ขนมาแทน (ท าใหยงคงสภาพของ nearly complete หรอ complete binary tree อย)

Reheap Down ปรบ tree หลงจาก delete ใหเปน heap

108

Reheap Up สลบทระหวางโหนดท insert เขามากบ Parent ของมนเองตามหลกของ

heap ท าซ ากบโหนดเดมจนกวาจะอยต าแหนงทถกตอง

109

a heap

110

ตวอยาง

Reheap Down สลบทระหวางโหนดทต าแหนง root (โหนดทพงสลบทมาหลงจาก

delete) กบโหนดลกของมนเองจนกวาโหนดนนจะอยต าแหนงทถกตอง (เลอกโหนดลกตามหลกของ heap) ท าซ าจนกวา root จะอยต าแหนงทถกตอง

111

a heap

112

ตวอยาง

Delete

113

การแทน heap ในหนวยความจ า นยมแทน heap ลงในอารเรย 1 มต เนองจากคณสมบตของการเปน nearly

complete ของตวมนเอง ขอมลทจดเกบลงในอารเรยจะเรยงตอกนไปตามล าดบจากซายไปขวาของแต

ละ level ใน heap จะไดความสมพนธของต าแหนงขอมลใน heap คอ

parent ของโหนด i ใดๆ = i/2 ถา i <> 1 left child ของโหนด i ใดๆ = 2i right child ของโหนด i ใดๆ = 2i + 1

114

115 [1]

[2] [3]

[4] [5] [6] [7]

[1] [2] [3] [1] [4] [5] [6] [7]

Heap sort (Application of heap)

ส าหรบ heap ขอมลทมคาสงสด/ต าสดจะเกบอยท root คณสมบตดงกลาว + ลกษณะการเกบขอมล สามารถน ามาชวย

ในการเรยงล าดบขอมลได 1. น าขอมลเขาในลกษณะของ heap จนหมด 2. delete ทละโหนด จนหมด

ขอมลท delete จะสลบทกบโหนดสดทายแทน ล าดบของขอมลท delete เรยงจาก มาก -> นอย คาในอารเรย เรยงจาก นอย -> มาก

116

117

1. insert 14

14 14

70

2. insert 70 3. reheap up

70

14

ก าหนดใหขอมลน าเขาคอ 14 , 70 , 32 , 100 , 65 , 56

ขนท 1 น าขอมลเขา heap ทละโหนดจนหมด

4. insert 32

70

14 32

70

14 32

100

5. insert 100 6. reheap up

100

70 32

14

118

7. insert 65

100

70 32

14 65

100

70 32

14 65 56

7. insert 56

100

70 56

14 65 32

8. reheap up

ในหนวยความจ า

100 70 56 14 65 32

119

1. delete 100

32

70 56

14 65 100

70

65 56

14 32 100

2. reheap down

3. delete 70

32

65 56

14 70 100

4. reheap down

65

32 56

14 70 100

ขนท 2 delete ขอมลทละโหนดจนหมด (สลบกบโหนดสดทายแทนตดจาก heap )

120

5. delete 65 6. reheap down

7. delete 56 8. reheap down

14 32 56

65 70 100

56 32 14

65 70 100

14 32 56

65 70 100

32 14 56

65 70 100

121

9. delete 32

14 32 56

65 70 100

10. delete 14

14 32 56

65 70 100

เหลอโหนดเดยว ไมตองปรบ heap

สนสดการท างาน ขอมลเรยงล าดบแลว

[1] [2] [3] [4] [5] [6] ขนท 1 สราง heap 1. insert 14 14 2. insert 70 14 70 3. reheap up 70 14

122 ในการเขยนโปรแกรมจรงจะเปนการจดการกบอารเรยทแทนโครงสราง heap ดงนนจากตวอยางขางตน ส งทจะเกดในหนวยความจ าจะเปนการเปลยนแปลงคาขอมลในอารเรยแทน

[1] [2] [3] [4] [5] [6] 4. insert 32 70 14 32 5. insert 100 70 14 32 100 6. reheap up 100 70 32 14 7. insert 65 100 70 32 14 65 8. insert 56 100 70 32 14 65 56 9. reheap up 100 70 56 14 65 32 ขนท 2 delete heap 100 70 56 14 65 32 1. สลบ 100 กบ 32 32 70 56 14 65 100 2. ปรบ heap 70 65 56 14 32 100

123

[1] [2] [3] [4] [5] [6] 3. สลบ 70 กบ 32 32 65 56 14 70 100 4. ปรบ heap 65 32 56 14 70 100 5. สลบ 65 กบ 14 14 32 56 65 70 100 6. ปรบ heap 56 32 14 65 70 100 7. สลบ 56 กบ 14 14 32 56 65 70 100 8. ปรบ heap 32 14 56 65 70 100 9. สลบ 32 กบ 14 14 32 56 65 70 100 10. ปรบ heap 14 32 56 65 70 100 11. สนสดการเรยงล าดบ 14 32 56 65 70 100

124

1. จงสราง min-heap จากขอมลตอไปน 23 15 17 13 31 10 2 4 29 14 5 2. จงแสดงวธการลบขอมลจาก min-heap ทไดจากขอ 1 ทละขนตอน

125

การบาน

top related