CS321 : Data Structure / Algorithm Analysismathcom.uru.ac.th/~beebrain/Slide/4122303A/Tree.pdf ·...

Preview:

Citation preview

โครงสร้างข้อมูลแบบทรี (Tree)

Tree

• โครงสร้างข้อมูลที่ได้เรียนมาในบทก่อน ๆ จะพบว่า ข้อมูลแต่ละตัวมีความสัมพันธใ์นรูปเชิงเส้น หรือแบบเชิง 1 มิติ

• โครงสร้างข้อมูลแบบไม่เชิงเส้น ซึ่งสามารถแสดงถึงความสัมพันธ์ที่ซับซ้อนกว่า และโครงสร้างขอ้มูลแบบไม่เชิงเส้นที่ส าคัญที่สุดคือ Tree เป็นความสัมพันธ์ระหว่าง node ที่เป็นล าดับชั้นลดหลั่นกัน( Hierarchical Relationship )

2

Tree

• รูปแบบของ tree ถูกน ามาประยุกต์ในหลาย ๆ ด้านเพื่อใช้ ในการแสดงความสัมพันธ์ระหว่างข้อมูล

ตัวอย่างการใช้ tree1 เพื่อใชใ้นการแสดงความสัมพันธ์ของ

ครอบครัว

2. แสดงแผนผังการจัดบุคคลในบริษัท โดยจัดล าดับตามต าแหน่ง

3. การจดัท าสารบัญหนังสือในแบบโครงสร้างของ tree

3

Tree

4

นิยามของ Tree

1. ในเชิง Math มีลักษณะเปน็รีเคอร์ซีฟ

2. Tree เป็น set จ ากดั T ที่มีสมาชิก 1 Node หรือ มากกว่า ซึ่งมี node พิเศษ 1 node เรียก Root

3. Node อื่นๆ ทีเ่หลือจะถกูแบ่งออกเป็นกลุ่มทีไ่มม่ีสมาชิกรว่มกัน

สมมุติชื่อคือ T1 ,, T2 ,… Tn ( n >= 0 )โดยมีโครงสร้างเป็น ต้นไม้ย่อย เรียก Subtree เมื่อ n คือจ านวนกลุ่มต้นไม้ย่อย

5

นิยามของ Tree

6

V0 เป็น root ของ Tree ที่มีสมาชิกคือ{ V1 , V2 , V3 , V4 , V5 , V6 , V7 }

ต้นไม้ย่อย T1

ต้นไม้ย่อย T2

นิยามของ Tree

7

V1 เป็น root ของ Tree ที่มีสมาชิกคือ { V3 , V4 }

ต้นไม้ย่อย T1ต้นไม้ย่อย

T2

นิยามของ Tree

8

V2 เป็น root ของ Tree ที่มีสมาชิกคือ

นิยามของ Tree

ความสัมพันธ์ ระหว่าง Root node กับ Sub Tree เป็นลักษณะ พ่อ กับลูก (Parent and child )

• พ่อ (Father) คือ node ที่เป็น root ของ Tree หรือroot ของ Subtree

• ลูก (child ) คือ node ที่เชื่อมโยงต่อจาก node ที่เป็นพ่อ

9

นิยามของ Tree

10

A

B D

E F GT

C

H

พ่อ (Father)

ลูก(child )พ่อ (Father)

ลูก(child )

ค าศัพท์ส าหรับ Tree

1. Brother Node : Node ที่มีพ่อแม่เดียวกัน

2. Branch / Edge ( เอดจ์) : กิ่งเป็นเส้นเชื่อม ระหว่างพ่อกับลูก

3. Degree : จ านวนลูก หรอื ต้นไม้ย่อยของแต่ละ node

4. Leaf node : (ลีฟโหนด) คือ Node ที่ไม่มีลกู Degree = 0

5. Branch Node : Node ที่ไม่ใช่ Root , Leaf Degreeไม่เป็น 0

11

12

1. Brother Node : Node ที่มีพ่อเดียวกัน2. Branch / Edge : กิ่งเป็นเส้นเชื่อม ระหว่างพ่อกับลูก

A

B D

E F GT

C

H Leaf Node

Brother Node = {BCD} {EF} {HT}

Branch Node

Branch/Edge

ค าศัพท์ส าหรับ Tree

13

A

B D

E F GT

C

HLeaf Node

4. Leaf node (ลีฟโหนด) คือ Node ที่ไม่มีลูก Degree = 05. Branch Node Node ที่ไม่ใช่ Root , Leaf Degreeไม่เป็น 0

Degree : จ านวนลูก หรอื ต้นไม้ย่อยของแต่ละ node

3

2 1 2

ค าศัพท์ส าหรับ Tree

14

A

B D

E F G T

C

H

Descendant ของ A

5. Descendant ลูกหลาน / Successor ผู้มาทีหลังDescendant ของ node x คือ ทุก node ที่ link ต่อ x ลงมาทั้งหมด

ค าศัพท์ส าหรับ Tree

15

Direct Descendant ของA

Immediate Successor / Direct Descendant/ Son ลูกหลานโดยตรง

A

B D

E F G T

C

H

ค าศัพท์ส าหรับ Tree

16

A

B D

E F G T

C

H

B และ A คือ Ancestor ของ E และ F

6. Ancestor บรรพบุรุษ / Predecessor ผู้มาก่อน Ancestor ของ node x คือ ทุก node ที่ Link อยูเ่หนือ x

ค าศัพท์ส าหรับ Tree

17

A

B D

E F G T

C

H

B คือ Father ของ E และ F

7. Immediate Predecessor / Direct Ancestor / Father

ค าศัพท์ส าหรับ Tree

ค าศัพท์ส าหรับ Tree

8 . Level ของ node (ระดบั)

- ระยะทางตามแนวดิ่งของ node ว่าอยู่ห่างจาก root เท่าไร

- เป็นหมายเลขแสดงระดับของ node ในต้นไม้

- ถ้า node มีระดับ L

-> node ที่เชื่อมต่อจากมันมีระดับ L+1

9. Height หรือ ระดับ( Level )ที่สูงสุดของ tree 18

19

A

B D

E F G T

C

H

Level : 1 . . . . . . . . . . . . . .

Level : 2 . . .

Level : 3

Height : 3ค าศัพท์ส าหรับ Tree

20

A

B D

E F G T

C

H

Level : 0 . . . . . . . . . . . . . .

Level : 1. . .

Level : 2

Height : 3หนังสือบางเล่ม

ค าศัพท์ส าหรับ Tree

21

R

TS

U V WX

Y Z

RootLevel 1

Level ….

Level …

Level …..

Subtree ของ node …….

Son of ….

Father of ….

Ancestors of …….

Descendant of …..

Height of a tree = ……………………...

Brother node of …….

ค าศัพท์ส าหรับ Tree

22

Notation: Node, children, edge, parent, ancestor, descendant, path, depth,

height, level, leaf node, subtree.

R

TS

U V WX

Y Z

Root

Internal node

Leaf

Level 1

Level 2

Level 3

Level 4 SubtreeSon of T

Father of V

Ancestors of V

Descendant of T

Height of a tree = 1+ max(depth of a node) = 4

Brother node of U

depth of a node = จ านวน ของ edge จาก root - node

ค าศัพท์ส าหรับ Tree

23

R

TS

U V WX

Y Z

9. ปา่ (Forest)

TS

U V WX

Y Z

ค าศัพท์ส าหรับ Tree

Ordered Tree (ออรเ์ดอร์ทร)ี หรือ ต้นไมท้ีม่ีแบบ

แผน

• Tree ที่ node ใด ๆ มี subtree หรือ degree ตั้งแต่ 2

ขึ้นไป

• โหนดต่าง ๆ ของต้นไม้นั้นมีความสัมพันธ์ที่แน่นอนประการหนึ่ง เช่น

ก่อน , ไปทางขวา , ไปทางซ้าย

• ถา้ไมม่ีความสัมพนัธ์ที่แน่นอน เราเรียกวา่

Ordted tree 24

Ordered Tree

25

A

B C

D

I J

A

B

D

F E

C

Ordered Tree

Ordered Tree

ตัวอย่างโครงสร้างทรี

• นิพจนท์างคณิตศาสตร์

• Decision Trees

• การแยกประเภทหนังสือในห้องสมุด

26

Tree

เราสามารถใช้โครงสร้างของ Tree ในการแทนนิพจน์ทางคณิตศาสตร์

โดยจัดให้

1. node สาขา (Branch node) เป็น node ส าหรับเครื่องหมายการค านวณ

2. ส่วน node ปลาย (Leaf node) เป็น node ส าหรับตัวถูกกระท าของเครื่องหมายการค านวณน้ัน ๆ

27

นิพจน์ทางคณิตศาสตร์

28

V1 * V2 – (V3 + V4 ^ V5 )

Tree

• Tree ชนิดนี้มักเกิดขึ้นในการประยุกต์เกี่ยวกับการเล่นเกม

หรืองานเกี่ยวกับการสร้างแบบจ าลองเหตุการณ์

ตัวอย่างการน าไปใช้ในการเล่นเกม โดยแตล่ะ node

ของ tree จะใช้แทนการตัดสินใจว่าจะเล่นต่อไปอย่างไร

tree ที่ใช้แทนการเล่นเกมน้ีเรียก ทรีเกม ( Game Tree )

ซึ่งขนาดของ ทรีเกม มักจะมีขนาดใหญ่

29

Decision Trees

30

Decision Trees

• ระบบการจดัท า Catalog ของห้องสมดุ ส่วนใหญ่จะใช้

โครงสรา้งของทรี

เช่นตัวอย่างระบบดวิวี่ ( Dewey Decimal System )

ซึ่งจะจัดเปน็ระบบลดหลั่นลงมา โดยเริ่มจากความรู้กว้าง ๆ

ก่อน แล้วแยกออกเป็นแผนกย่อยตามสาขาวชิาที่ละเอียดขึ้น

หรือลักษณะการจดัท าสารบัญหนังสือ ที่มีการจัดท าเป็น

หัวข้อเรื่องใหญ่ และมหีัวข้อย่อยในแต่ละเรื่อง เป็นต้น

31

การแยกประเภทหนังสือในห้องสมุด

32

การแทนโครงสร้างต้นไม้ในคอมพิวเตอร์

Array Implementation

33

Linked Lists Implementation

34

Binary Tree(ต้นไม้ทวิภาค)

• ในแต่ละ node จะมี subtree หรือ degree ได้ไม่เกิน 2

• ถ้ามี subtree เดียว ต้องระบุดว้ยว่า เป็น node ทางซา้ย

หรือทางขวา ของ Root

35

T = NULL

Binary Tree

มองในเชิง Math ค าจ ากัดความของ Binary tree จะเป็นrecursive

• เป็น set จ ากดัของ node ที่อาจเป็น set ว่าง หรือประกอบด้วยnode ที่เรียก Root และ node ที่เหลือแบง่ออกเปน็ subtree ที่ไม่มี node ร่วมกัน โดย subtree กจ็ะเป็น binary tree ด้วย

• Left และ Right Subtree

36

T = NULL

Binary Tree

Binary Tree Example

37

Max depth = 3

Height = 4Right sonLeft son

Binary Tree

Complete Binary Trees

38

15

165

ความสัมพันธ์ระหว่างระดับและจ านวน node

n = 2l -1 เมื่อ l คือ max level

Binary Tree

3 12 201

Array Implementation

39

----10--8--6--4--2--Right Sibling

--9--7--5--3--1----Left Sibling

--------------108642Right Child

------------1197531Left Child

54433221100--Parent

11109876543210Position

Binary Tree

Linked List Implementation

40

DATA

RsonLson

Binary Tree

41

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

การแปลง tree ไปเป็น binary tree • โครงสร้าง Tree มักมี degree > 2

• ดังนั้นการสร้างจึงต้องก าหนด เขตเชื่อมโยงให้พอ

• บาง node ใชค้รบ บาง node ไม่ครบ

42

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

43

R

TS

U V WX

Y Z

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

ขั้นตอน

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

- ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยังลูก ๆ ออกให้หมด

ยกเว้น ลูกที่อยู่ต าแหน่งซ้ายสุด

2. เลือก son ทางซ้ายและขวา ของแต่ละ node

- son ทางซ้าย คือ node ทีอ่ยู่ใต้ node นั้น

- son ทางขวา คือ node ที่อยู่ข้าง ๆ (ระดบัเดียวกัน / Brother )

44

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

45

เริ่มต้น A

B D

E F G T

C

H

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

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

46

A

B D

F G T

C

H

ขั้นที่ 1

E

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

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

47

A

B D

F G T

C

HE

1. ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยัง ลูก ๆ ออกให้หมด ยกเว้น ลูกที่อยู่ต าแหน่งซ้ายสุด

ขั้นที่ 1-1

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

48

A

B

D

FG

T

C

H

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

- son ทางซ้าย คือ node ทีอ่ยู่ใต้ node นัน้ - son ทางขวา คือ node ทีอ่ยู่ข้าง ๆ

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

ขั้นที่ 2

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

แบบฝึกหัด

49

จงแปลง Tree ให้เป็น Binary Tree

1

2

6

10

7

3 4 5

8 9

A

C

G

B

ED F

J K L M

CB

A

D

การแปลง Forest ไปเป็น binary tree

• ท าแบบเดียวกนักับ การแปลง tree ไปเป็น binary tree

• คือ เชื่อม Root เข้าด้วยกัน และท าในส่วนของ Subtree ด้วย

50

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

51

A

B

D

C

เริ่มต้น

E

GF H

J K

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

52

A

B

D

C

Step 1

E

GF H

J K

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

53

A

B

D

C

E

GF

HJ

KStep 2

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

54

Binary Search Tree

55

ต าแหน่งของการเอา node เข้าไปไว้ใน tree จะขึ้นกับข้อมูลที่เก็บในแต่ละ Node และลักษณะ Tree

*** ไม่สามารถก าหนด ต าแหน่งได้65

40 75

70 9530 55

35 80

โดยโครงสร้างของทรีแบบนี้ คือค่า key หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของ node

ที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของ node

ที่อยู่ทางขวา

Binary Search Tree

56

โดยโครงสร้างของทรีแบบนี้ คือ ค่าkey หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของโหนดที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของโหนดที่อยู่ทางขวา

65

40 75

70 9530 55

35 80

Binary Search Tree

57

โดยโครงสร้างของทรีแบบนี้ คือ ค่าkey หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของโหนดที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของโหนดที่อยู่ทางขวา

65

40 75

70 9530 55

35 80

Binary Search Tree

58

Ken , 45

Jim , 35 Mandy , 15

Bobby , 60 Jone , 40 Patty , 60

John , 20

คีย์หลักคือชื่อหรืออายุ ?

Binary Search Tree

59

การสร้าง Binary Search Tree

- การสร้างจะ เป็นการ Add สมาชิก 1 ตัว ( node ) เข้าไปใน Tree

- เริ่มหาที่ Root เสมอ และท่องไปตาม node ต่าง ๆ ตามล าดับ เพื่อ

หาต าแหน่งที่เหมาะสมส าหรับ node ใหม่

Binary Search Tree

60

65

65ADD Root

65 40 75 30 55 35 70 95 80

Binary Search Tree

61

65

40

40ADD

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

62

65

40 75

75ADD

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

63

65

40 75

30

30ADD

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

64

65

40

30 55

55ADD

75

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

65

65

40

30 55

35

35ADD

75

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

66

65

40 75

7030 55

35

70ADD

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

67

65

40 75

7030 55

35

95ADD

95

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

68

65

40 75

70 9530 55

35 80

80ADD

การสร้าง Binary Search Tree

69

65

40 75

70 9530 55

35 80

สรุป การสร้าง Binary search Tree ตามล าดับ ดังต่อไปนี้

65 40 75 30 55 35 70 95 80

การสร้าง Binary Search Tree

70

65

40 75

70 9530 55

35 80

40ADD

ซ้ า !! 1. ทิ้งไปเลย

การสร้าง Binary Search Tree

71

65

40 75

70 9530 55

35 80

40ADD

ซ้ า !!

2 . เก็บความถี่ Node ที่ซ้ า

2

การสร้าง Binary Search Tree

72

65

40 75

70 9530 55

35 80

40ADD

3. ใช้ List list มาเชื่อม40ซ้ า !!

การสร้าง Binary Search Tree

73

แบบฝึกหดั

สร้าง Binary Search Tree จากการ Add ข้อมูล

ตามล าดับ

65 40 30 70 75 55 35 95 80

การสร้าง Binary Search Tree

74

Complete Binary Tree

Complete Binary Trees

75

15

165

ความสัมพันธ์ระหว่างระดับและจ านวน node

n = 2l -1 เมื่อ l คือ max level

Complete Binary Tree

3 12 201

76

65

40 70

75 8035 55

Height : 3

จ านวน Node ทั้งหมด n

n = 2 l - 1 เมือ l คือ Max level ของ Tree

Complete Binary Tree

77

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

78

65

40 70

75 8035 55

n = 2l-17 = 2l-1

2l = 7+1 = 8 = 23

ถ้า n = 7 node ได้ Complete Binary Tree มีความสูงเท่าใด ?

n = 2l-1n+1 = 2l

log2( n+1) = log2 2l

log2( n+1) = lHeight (l) = max level = log2( n+1)

Complete Binary Tree

79

การท่องเข้าไปใน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 อยู่หลัง)

80

การท่องเข้าไปใน Binary Tree• Binary Tree จะประกอบด้วย Subtree

และใน Subtree ประกอบด้วย Subtree ย่อยๆ อีก ดังนั้นเพื่อให้ง่าย จะแทน root ของ subtree ใดๆ ด้วย จะได้

81

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

82

A

B C

D E F

G H ILeft Subtree Right Subtree

Root node

Inorder Traversal

83

ดังนั้นการท่องเข้าไปใน 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

84

A

B C

D E F

G H ILeft Subtree Right Subtree

Root node

Preorder Traversal

85

ดังนั้นการท่องเข้าไปใน 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

86

A

B C

D E F

G H ILeft Subtree Right Subtree

Root node

Preorder Traversal

87

ดังนั้นการท่องเข้าไปใน 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 แบบ Postorder

3. เยี่ยม Root

88

A

B C

D E F

G H ILeft Subtree Right Subtree

Root node

Postorder Traversal

89

ดังนั้นการท่องเข้าไปใน 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

90

A

B C

D E F G

Tree Traversal

• Inorder

91

A

B C

D E F G

Tree Traversal

• Postorder

92

A

B C

D E F G

แบบฝึกหัด

93

จงท่องเข้าไปใน Binary Tree ต่อไปนี้ในแบบPreorder, Inorder และ PostOrder

A

B D

C

+

A -

* D

B C

A

B C

D

E

E

G

1.

2.

3.

Recommended