C Language - 12 เทคนิคอัลกอริทึมแบบ...

8
04/01/57 Advance Computer Programming: .กิตตินันท์ น้อยมณี 1 เทคนคอัลกอรทมแบบ Dynamic Algorithm Programming (DAG) Advance Computer Programming รหัสวชา 32090207 . กิตตินันท์ น้ 1อยมณี 1 เนอหา 1. Introduction 2. Knapsack problem with DAG . กิตตินันท์ น้ 1อยมณี 2 Introduction . กิตตินันท์ น้ 3อยมณี 3 Introduction หลักการคเราไมทราบวากรณไหนคอกรณท่ด ่สุด เราไมรู คําตอบวาจรงๆ จะตองตอบวาอะไร ดังนั เม่อเราไมรู เราจงตอง เดาโดยเราจะตอง เดาหรอสุ มไปในทุกๆ กรณท สามารถเกดขนได แลเลอกเอาเฉพาะกรณท่ได้ ผลลัพธ์ท่ด่สุด . กิตตินันท์ น้ 1อยมณี 4
  • Upload

    -
  • Category

    Software

  • view

    54
  • download

    5

Transcript of C Language - 12 เทคนิคอัลกอริทึมแบบ...

Page 1: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

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

(DAG)Advance Computer Programming

รหัสวิชา 32090207

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

เนื้อหา

1. Introduction2. Knapsack problem with DAG

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

Introduction

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

Introduction

• หลักการคือ เราไม่ทราบว่ากรณีไหนคือกรณีที่ดีที่สุด เราไม่รู้คําตอบว่าจริงๆ จะต้องตอบว่าอะไร

• ดังนั้น เมื่อเราไม่รู้เราจึงต้อง “เดา”• โดยเราจะต้อง “เดา” หรือสุ่มไปในทุกๆ กรณีที่สามารถเกิดขึ้นได้ แล้วเลือกเอาเฉพาะกรณีที่ได้ผลลัพธ์ที่ดีที่สุด

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

Page 2: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

Introduction

• ปรกติแล้วจะใช้แก้ปัญหาเชิง Optimization• ลักษณะการทํางานของ DAG จะคล้ายกับ Divide-

and-Conquer

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

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

หมายเหตุ: Divide-and-Conquer จะใช้ในกรณีที่การคํานวณของปญัหายอ่ย (Sub-problem) ไม่ขึ้นต่อกัน เรียกลักษณะการทาํงานอยา่งนี้ว่า Top-down approach คือการซอยยอ่ยปญัหาต่างๆ ออกเป็นชิ้นเล็กๆ แล้วจัดการแก้ปัญหาจากปัญหาเล็กๆ ก่อน แล้วค่อยรวมกันไปเพือ่ไปหาคาํตอบโดยรวม

Introduction

• แต่ DAG จะใช้ในกรณีที่การคํานวณของปัญหาย่อย (Sub-problem) ขึ้นต่อกัน ซึ่งมีลักษณะการทํางานในเชิง (Bottom-up Approach) โดยจะเริ่มจากปัญหาขนาดเล็กก่อน แล้วค่อยรวมกันจนได้ปัญหาหลัก

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

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

Knapsack problem with DAG

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

Knapsack problem with DAG

• จะต้องทําการเก็บคําตอบของแต่ละรอบการทํางานเอาไว้ เพื่อเปรียบเทียบหาคําตอบที่ดีที่สุด

• ดังนั้นเราจะดูทุกกรณีที่น่าจะเกิดขึ้นได้

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

Page 3: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

1 2 3 4 5 6 7 8 9 10 11

0

1

2

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

1 2 3 4 5 6 7 8 9 10 11

0

1

2

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

nมูลค่า

น้ําหนัก

วิเคราะห์ตั้งแต่น้ําหนัก 1 จนถึงค่า Wx

วิเคราะห์ของทีละชิ้น

ตารางนี้จะเก็บมูลค่าของกรณีต่างๆ ทุกๆ กรณี เพื่อหามูลค่าที่มากที่สุด

1 2 3 4 5 6 7 8 9 10 11

0 11

2

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 0, w = 1ใส่ w0 ลงไปได้ เพราะ wj = w0 พอดี

1 2 3 4 5 6 7 8 9 10 11

0 1 11

2

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 0, w = 2ใส่ w0 ลงไปได้อันเดียว เพราะตอนนี้วัตถุมีแค่อันเดียวให้ใส่

Page 4: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11

2

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 0, w = 3 … 11ใส่ w0 ลงไปได้อันเดียว เพราะตอนนี้วัตถุมีแค่อันเดียวให้ใส่

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 12

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 1, w = 1ใส่ w0 ลงไปได้ เพราะ wj = w0 พอดี

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 62

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 1, w = 2ใส่ w1 ลงไปได้ เพราะน้ําหนักพอดี และมีมูลค่ามากกว่า w0 ด้วย

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 72

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 1, w = 3ใส่ w0 ลงไปได้ และใส่ w1 ลงไปได้ เพราะน้ําหนักพอดีเลย

Page 5: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72

3

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 1, w = 4 … 11ใส่ได้แค่ 2 อย่าง เพราะวัตถุมแีต่ 2 อย่างเท่านัน้ มูลค่าจึงได้ 7 เท่าเดิม

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 13

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 1ใส่ได้แค่ w0 เพราะน้ําหนักพอดี

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 63

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 2ใส่ได้แค่ w1 เพราะน้ําหนกัพอดี

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 73

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 3, 4ใส่ได้แค่ w0 กับ w1 เพราะน้ําหนักพอดีกระเป๋าเลย

Page 6: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 7 183

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 5ใส่ w2 ได้ เพราะน้ําหนกั 5 เท่าความจุกระเป๋าตอนนี้เลย

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 7 18 193

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 6ใส่ w2 ได้ แถมใส่ w0 ได้ เพราะความจุเต็มพอดี

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 7 18 19 243

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 7ใส่ w2 ได้ แถมใส่ w1 ได้ เพราะมีมูลค่ามากกว่า w0 และความจุพอดี

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 7 18 19 24 253

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 8ใส่ w2 ได้ แถมใส่ w1 ได้ และ w0 ได้ด้วย เพราะความจพุอดีเลย

Page 7: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 7 18 19 24 25 25 25 253

4

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 2, w = 9 … 11ใส่ w2 ได้ แถมใส่ w1 ได้ และ w0 ได้ซึ่งได้แค่นั้น เพราะวัตถุมีแค ่3 ชิ้น

1 2 3 4 5 6 7 8 9 10 11

0 1 1 1 1 1 1 1 1 1 1 11 1 6 7 7 7 7 7 7 7 7 72 1 6 7 7 18 19 24 25 25 25 253 1 6 7 7 18 22 24 28 29 29 404 1 6 7 7 18 22 28 29 34 35 40

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

0 1 2 3 4

V 1 6 18 22 28

0 1 2 3 4

W 1 2 5 6 7

w

n

Processingn = 3 … 4, w = 1 … 11และทําอย่างนี้ไปเรือ่ยๆ จนครบทุกช่อง ทําให้ได้ค่าดังตาราง

Knapsack problem with DAG

• จะเห็นได้ว่า DAG จะคิดทุกๆ กรณีที่น่าจะมีโอกาสเกิดขึ้นได้

• ซึ่งข้อดีก็คือเราจะได้ค่าที่ถูกต้องที่สุดอย่างแน่นอน• แต่ข้อเสียก็คือกระบวนการในการค้นหาอาจต้องใช้เวลานานขึ้น หากมีข้อมูลที่มากขึ้น

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

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

for j := 0 to wx

if i – 1 < 0 then a := 0, Sa := ∅else a := u[i-1, j], Sa := y[i-1, j]

if j – w[i] < 0 then b := -∞, Sb := ∅else if j – w[i] = 0 OR i – 1 < 0 then b := v[i], Sb := {i}else

b := u[ i-1, j-w[i] ] + v[i]

Sb := {i} ∪y[ i-1, j-w[i] ]if a > b then u[i, j] := a, y[i, j] := Saelse u[i, j] := b, y[i, j] := Sb

x := y[ n-1, wx ]Return x

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

Page 8: C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming

04/01/57

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

Knapsack problem with DAG

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

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