C Language - 12 เทคนิคอัลกอริทึมแบบ...
Transcript of C Language - 12 เทคนิคอัลกอริทึมแบบ...
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
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
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 ลงไปได้อันเดียว เพราะตอนนี้วัตถุมีแค่อันเดียวให้ใส่
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 ลงไปได้ เพราะน้ําหนักพอดีเลย
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 เพราะน้ําหนักพอดีกระเป๋าเลย
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 ได้ด้วย เพราะความจพุอดีเลย
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
04/01/57
Advance Computer Programming: อ.กิตตนินัท์ น้อยมณี 8
Knapsack problem with DAG
อ. กิตตินนัท์ น้1อยมณี 29
ลองทําด้วยตัวเองดูนะครับ???