8. Knapsack problem with DAG
• จะต้องทําการเก็บคําตอบของแต่ละรอบการ
ทํางานเอาไว้ เพื่อเปรียบเทียบหาคําตอบที่ดีที่สุด
• ดังนั้นเราจะดูทุกกรณีที่น่าจะเกิดขึ้นได้
อ. กิตตินันท์ น้1อยมณี 8
27. Knapsack problem with DAG
• จะเห็นได้ว่า DAG จะคิดทุกๆ กรณีที่น่าจะมีโอกาส
เกิดขึ้นได้
• ซึ่งข้อดีก็คือเราจะได้ค่าที่ถูกต้องที่สุดอย่างแน่นอน
• แต่ข้อเสียก็คือกระบวนการในการค้นหาอาจต้อง
ใช้เวลานานขึ้น หากมีข้อมูลที่มากขึ้น
อ. กิตตินันท์ น้1อยมณี 27
28. 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] := Sa
else u[i, j] := b, y[i, j] := Sb
x := y[ n-1, wx ]
Return x
End Algorithm อ. กิตตินันท์ น้1อยมณี 28