c language - 11 เทคนิคอัลกอริทึมแบบ greedy

15
04/01/57 Advance Computer Programming: .กิตตินันท์ น้อยมณี 1 เทคนคอัลกอรทมแบบ Greedy Advance Computer Programming รหัสวชา 32090207 . กิตตินันท์ น้ 1อยมณี 1 เนอหา 1. Introduction 2. Shortest Path (Dijkstra) 3. Knapsack Problem with Greedy Algorithm . กิตตินันท์ น้ 1อยมณี 2 Introduction . กิตตินันท์ น้ 3อยมณี 3 Introduction Greedy แปลวละโมบ หรอ ความละโมบ Greedy Algorithm เป็นอัลกอรมท่งายๆ ไมม ความซับซอนอะไร แคเลอกทางท่ดูด่สุดใน ขณะนั นๆ ก็พอ เชน ไดกําไรมากท ่สุดโดยท ่เสยหายนอยท่สุด เชน ใชเวลานอยท่สุดแตไดผลลัพธมากท่สุด . กิตตินันท์ น้ 1อยมณี 4

Upload: -

Post on 14-Aug-2015

86 views

Category:

Software


5 download

TRANSCRIPT

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 1

เทคนิคอัลกอริทึมแบบ

Greedy

Advance Computer Programming

รหัสวิชา 32090207

อ. กิตตินนัท์ น้1อยมณี 1

เนื้อหา

1. Introduction

2. Shortest Path (Dijkstra)

3. Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 2

Introduction

อ. กิตตินนัท์ น้3อยมณี 3

Introduction

• Greedy แปลว่า ละโมบ หรือ ความละโมบ

• Greedy Algorithm เป็นอัลกอริทึมที่ง่ายๆ ไม่มี

ความซับซ้อนอะไร แค่เลือกทางที่ดูดีที่สุดใน

ขณะนั้นๆ ก็พอ

• เช่น ได้กําไรมากที่สุดโดยที่เสียหายน้อยที่สุด

• เช่น ใช้เวลาน้อยที่สุดแต่ได้ผลลัพธ์มากที่สุด

อ. กิตตินนัท์ น้1อยมณี 4

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 2

Introduction

ตัวอย่างยังคงมีมากกว่านั้น เช่น

• ปัญหาการทอนเหรียญ

• การเลือกกิจกรรม (Activity Select Problem)

• การเลือกของ Knapsack Problem

• ปัญหาการบริการลูกค้าให้มีเวลาในการรอน้อยที่สดุ

• ปัญหาการจัดการตารางงานเมื่อมี Deadline

อ. กิตตินนัท์ น้1อยมณี 5

Introduction

ตัวอย่างยังคงมีมากกว่านั้น เช่น

• ปัญหา Minimum Spanning Tree

• Huffman Code

• Prefix Code

• ฯลฯ

อ. กิตตินนัท์ น้1อยมณี 6

อ้างอิงข้อมลูดีๆ จาก อาจารย์กรงุ สินอภิรมย์สราญhttp://pioneer.netserv.chula.ac.th/~skrung/2301365/Lecture009.html

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้7อยมณี 7

Shortest Path (Dijkstra)

• Dijkstra อ่านว่า ไดค์สตรา

• Shortest Path หรือ วิถีสั้นที่สุด

• มันก็คือกราฟแบบมีน้ําหนักและมีทิศทาง

• หลักการคล้ายๆ ปัญหาของนักท่องเที่ยวที่

ต้องการไปเที่ยวให้ครบทุกเมืองโดยใช้ระยะทางที่

สั้นที่สุด

อ. กิตตินนัท์ น้1อยมณี 8

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 3

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 9

12

34

510 100

20

40

1030

20

80

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 10

1

100

แทนเมืองต่างๆ

แทนระยะห่างระหว่างเมืองและเส้นทางที่ต้องเดิน

Shortest Path (Dijkstra)

• ตาม Greedy Algorithm คือการเลือกทางที่ดีที่สุด

สั้นที่สุดโดยพิจารณาเฉพาะเหตุการณ์เฉพาะหน้า

เท่านั้น

อ. กิตตินนัท์ น้1อยมณี 11

Shortest Path (Dijkstra)

LOOP V

0 {1} 0

อ. กิตตินนัท์ น้1อยมณี 12

1 2 3 4 5

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 4

Shortest Path (Dijkstra)

LOOP V

0 {1} 0

อ. กิตตินนัท์ น้1อยมณี 13

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100 0+80 0+30 0+10

อ. กิตตินนัท์ น้1อยมณี 14

1 2 3 4 5

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

อ. กิตตินนัท์ น้1อยมณี 15

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 10

อ. กิตตินนัท์ น้1อยมณี 16

1 2 3 4 5

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 5

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 17

12

34

510 100

20

40

1030

20

80

ระยะทางรวม = 10 Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 10

อ. กิตตินนัท์ น้1อยมณี 18

1 2 3 4 5

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 10

อ. กิตตินนัท์ น้1อยมณี 19

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10

อ. กิตตินนัท์ น้1อยมณี 20

1 2 3 4 5

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 6

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+10 10

อ. กิตตินนัท์ น้1อยมณี 21

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

อ. กิตตินนัท์ น้1อยมณี 22

1 2 3 4 5

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20

อ. กิตตินนัท์ น้1อยมณี 23

1 2 3 4 5Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 24

12

34

510 100

20

40

1030

20

80

ระยะทางรวม = 20

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 7

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20

อ. กิตตินนัท์ น้1อยมณี 25

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+20 20+40 20

อ. กิตตินนัท์ น้1อยมณี 26

1 2 3 4 5

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+2040

20+4060 20

อ. กิตตินนัท์ น้1อยมณี 27

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+2040

20+4060 20

3 {2} 40

อ. กิตตินนัท์ น้1อยมณี 28

1 2 3 4 5

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 8

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 29

12

34

510 100

20

40

1030

20

80

ระยะทางรวม = 40 Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+2040

20+4060 20

3 {2} 40

อ. กิตตินนัท์ น้1อยมณี 30

1 2 3 4 5

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+2040

20+4060 20

3 {2} 40 40+20

อ. กิตตินนัท์ น้1อยมณี 31

1 2 3 4 5Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+2040

20+4060 20

3 {2} 40 40+2060

อ. กิตตินนัท์ น้1อยมณี 32

1 2 3 4 5

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 9

Shortest Path (Dijkstra)

LOOP V

0 {1} 0 0+100100

0+8080

0+3030

0+1010

1 {5} 100 80 10+1020 10

2 {4} 20+2040

20+4060 20

3 {2} 40 40+2060

4 {3} 60อ. กิตตินนัท์ น้1อยมณี 33

1 2 3 4 5Shortest Path (Dijkstra)

LOOP C

0 {2, 3, 4, 5} 0 0+100100

0+8080

0+3030

0+1010

1 {2, 3, 4} 100 80 10+1020 10

2 {2, 3} 20+2040

20+4060 20

3 {3} 40 40+2060

4 60อ. กิตตินนัท์ น้1อยมณี 34

1 2 3 4 5

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 35

12

34

510 100

20

40

1030

20

80

ระยะทางรวม = 60 Shortest Path (Dijkstra)

• เมื่อเข้าใจวิธีคิดแล้ว ลองมาดู Pseudo Code กัน

อ. กิตตินนัท์ น้1อยมณี 36

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 10

Shortest Path (Dijkstra)Algorithm Dijkstra ( L[1…n, 1…n] ) : array[2…n]

C := {2, 3, 4, …, n}for i := 2 to n

D[i] := L[1, i]repeat n-2 times

v := some element of C minimizing D[v]C := C – {v}for each w ∈ C do

D[w] := min( D[w], D[v]+L[v, m] )return D

End Algorithmอ. กิตตินนัท์ น้1อยมณี 37

Shortest Path (Dijkstra)Algorithm Dijkstra ( L[1…n, 1…n] ) : array[2…n]

C := {2, 3, 4, …, n}for i := 2 to n

D[i] := L[1, i]repeat n-2 times

v := some element of C minimizing D[v]C := C – {v}for each w ∈ C do

D[w] := min( D[w], D[v]+L[v, m] )return D

End Algorithmอ. กิตตินนัท์ น้1อยมณี 38

เซ็ตของเมืองที่เหลือให้ D เก็บระยะทางของเมือง 1 กับเมืองทั้งหมด

เลือกเสร็จก็ลบเมืองนั้นไป

หาระยะทางที่นอ้ยที่สุด

Shortest Path (Dijkstra)

โดย

• v คือ เมืองที่เลือกไป (ที่ระยะสั้นที่สุด)

• C คือ เซ็ตของเมืองที่ยังไม่ได้ไป

• D คือ ค่าของการประมวลผลระยะทาง

อ. กิตตินนัท์ น้1อยมณี 39

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 40

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 11

Shortest Path (Dijkstra)

อ. กิตตินนัท์ น้1อยมณี 41

ลองทําด้วยตัวเองดูนะครับ???Knapsack Problem

with Greedy Algorithm

อ. กิตตินนัท์ น้42อยมณี 42

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 43

• Knapsack อ่านว่า แน๊บ-แซ่ก (Knapsack)

• แปลว่า เป้ หรือ กระเป๋าสายพายหลัง

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 44

• Knapsack Problem คือปัญหาในการเลือกของเพื่อ

หยิบใส่กระเป๋า โดยกระเป๋ามีความจุจํากัด (ไม่งั้น

ขาด)

• เหมือนกับการเดินเข้าไปในถ้าํแล้วเจอเพชรเม็ดโต

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 12

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 45

• ตามหลักการของ Greedy Algorithm แล้ว คือการ

หยิบเพชรออกจากถ้ําโดยให้ได้มูลค่าเยอะที่สุด

• สิ่งที่ต้องระวังมากที่สุดก็คือ จะต้องระวังกระเป๋า

ขาด เพราะหยิบเพชรหนักเกินความจุของกระเป๋า

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 46

• สมมติว่ามีเพชรอยู่ทั้งหมด 5 ก้อน (n = 5)

• มูลค่าของเพชรทั้งหมดเรียงกันดังนี้

• น้ําหนักของเพชรทั้งหมดเรียงกันดังนี้

0 1 2 3 4

Vi 1 6 18 22 24

0 1 2 3 4

Wi 1 2 5 6 7

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 47

• และให้ความจุของกระเป๋าเท่ากับ 11 (wx=11)

• อัตราส่วนระหว่าง Value ต่อ Weight ได้ดังนี้

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 3.43

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 48

• สรุปได้ข้อมูลดังนี้

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 3.43

0 1 2 3 4

Vi 1 6 18 22 24

0 1 2 3 4

Wi 1 2 5 6 7

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 13

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 49

ดังนั้น การหยิบของใส่กระเป๋าก็มีวิธีการอยู่ดังนี้

(Select Function)

1. Min(Wi)

2. Max(Vi)

3. Max(Vi/Wi)

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 50

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 3.43

0 1 2 3 4

Vi 1 6 18 22 24

0 1 2 3 4

Wi 1 2 5 6 7

0 1 2 3 4 Value1 1 1 0 0 25Min(Wi)

1

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 51

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 3.43

0 1 2 3 4

Vi 1 6 18 22 24

0 1 2 3 4

Wi 1 2 5 6 7

0 1 2 3 4 Value1 1 0 0 1 31Max(Vi)

2Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 52

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 3.43

0 1 2 3 4

Vi 1 6 18 22 24

0 1 2 3 4

Wi 1 2 5 6 7

0 1 2 3 4 Value0 0 1 1 0 40Max(Vi/Wi)

3

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 14

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 53

0 1 2 3 4 Value0 0 1 1 0 40Max(Vi/Wi)

3

0 1 2 3 4 Value1 1 0 0 1 31Max(Vi)

2

0 1 2 3 4 Value1 1 1 0 0 25Min(Wi)

1

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 54

• ดังนั้นหากเลือก Max(Vi/Wi) จะทําให้ได้มูลค่ามาก

ที่สุดคือ 40 โดยที่น้ําหนักพอดีกับความจุของ

กระเป๋าพอดี

• แต่ทว่า !! Greedy Algorithm ยังไม่ใช่กระบวนการคิดที่เหมาะกับ Knapsack Problem

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 55

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 4

0 1 2 3 4

Vi 1 6 18 22 28

0 1 2 3 4

Wi 1 2 5 6 7

0 1 2 3 4 ValueMax(Vi/Wi)

3

หากเปลี่ยน V4 เป็น 28 แล้วลองใช้ Greedy Algorithm ดูอีกรอบ

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 56

0 1 2 3 4

Vi / Wi 1 3 3.6 3.67 4

0 1 2 3 4

Vi 1 6 18 22 28

0 1 2 3 4

Wi 1 2 5 6 7

0 1 2 3 4 Value1 1 0 0 1 35Max(Vi/Wi)

3

ทําให้ Max(Vi/Wi) เลือก V4 เป็นอันดับแรก จึงได้ Xi = 1 1 0 0 1

04/01/57

Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 15

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 57

• ด้วยเหตุนี้จึงทําให้ Greedy Algorithm อาจจะยังไม่เหมาะสมในการแก้ปัญหา Knapsack Problem

• โดยยังคงต้องการฟังก์ชันในการเลือกวัตถุที่ดีที่สุดในแต่ละรอบก่อน จึงจะทําให้ได้คําตอบโดยรวมที่ดีที่สุด

• Greedy จะไม่สนใจภาพรวมของปัญหา จะสนใจแต่เหตุการณ์เฉพาะหน้าเท่านั้น

อ. กิตตินนัท์ น้1อยมณี 58

Algorithm KnapsackGD( w[n], v[n], wx ) : array[n]for i := 0 to n-1

x[i] := 0weight := 0y := {0, 1, 2, …, n-1}while weight < wx and y ≠ 0

i := the best remaining Object in yif weight + w[i] ≤ wx then

x[i] := 1weight := weight + w[i]

y := y – {i}return x

End Algorithm

Select Function

Knapsack Problem with Greedy Algorithm

อ. กิตตินนัท์ น้1อยมณี 59

ลองทําด้วยตัวเองดูนะครับ???