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อยมณี 37
38. 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 กับ
เมืองทั้งหมด
เลือกเสร็จก็ลบเมืองนั้นไป
หาระยะทางที่น้อยที่สุด
39. Shortest Path (Dijkstra)
โดย
• v คือ เมืองที่เลือกไป (ที่ระยะสั้นที่สุด)
• C คือ เซ็ตของเมืองที่ยังไม่ได้ไป
• D คือ ค่าของการประมวลผลระยะทาง
อ. กิตตินันท์ น้1อยมณี 39
47. 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
48. 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
49. Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 49
ดังนั้น การหยิบของใส่กระเป๋าก็มีวิธีการอยู่ดังนี้
(Select Function)
1. Min(Wi)
2. Max(Vi)
3. Max(Vi/Wi)
50. 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 Value
1 1 1 0 0 25Min(Wi)
1
51. 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 Value
1 1 0 0 1 31Max(Vi)
2
52. Knapsack 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 Value
0 0 1 1 0 40Max(Vi/Wi)
3
53. Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 53
0 1 2 3 4 Value
0 0 1 1 0 40Max(Vi/Wi)
3
0 1 2 3 4 Value
1 1 0 0 1 31Max(Vi)
2
0 1 2 3 4 Value
1 1 1 0 0 25Min(Wi)
1
54. Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 54
• ดังนั้นหากเลือก Max(Vi/Wi) จะทําให้ได้มูลค่ามาก
ที่สุดคือ 40 โดยที่น้ําหนักพอดีกับความจุของ
กระเป๋าพอดี
• แต่ทว่า !! Greedy Algorithm ยังไม่ใช่
กระบวนการคิดที่เหมาะกับ Knapsack
Problem
55. 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 Value
Max(Vi/Wi)
3
หากเปลี่ยน V4 เป็น 28 แล้วลองใช้ Greedy Algorithm ดูอีกรอบ
56. 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 Value
1 1 0 0 1 35Max(Vi/Wi)
3
ทําให้ Max(Vi/Wi) เลือก V4 เป็นอันดับแรก จึงได้ Xi = 1 1 0 0 1
57. Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 57
• ด้วยเหตุนี้จึงทําให้ Greedy Algorithm อาจจะยังไม่
เหมาะสมในการแก้ปัญหา Knapsack Problem
• โดยยังคงต้องการฟังก์ชันในการเลือกวัตถุที่ดีที่สุด
ในแต่ละรอบก่อน จึงจะทําให้ได้คําตอบโดยรวมที่
ดีที่สุด
• Greedy จะไม่สนใจภาพรวมของปัญหา จะสนใจ
แต่เหตุการณ์เฉพาะหน้าเท่านั้น
58. อ. กิตตินันท์ น้1อยมณี 58
Algorithm KnapsackGD( w[n], v[n], wx ) : array[n]
for i := 0 to n-1
x[i] := 0
weight := 0
y := {0, 1, 2, …, n-1}
while weight < wx and y 0
i := the best remaining Object in y
if weight + w[i] wx then
x[i] := 1
weight := weight + w[i]
y := y – {i}
return x
End Algorithm
Select Function
59. Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 59
ลองทําด้วยตัวเองดูนะครับ???