天天看點

背包問題

假設有一個背包的負重最多可達8公斤,而希望在背包中裝入負重範圍内可得之總價物品,假設是水果好了,水果的編号、單價與重量如下所示:

李子

4kg

nt$4500

1

蘋果

5kg

nt$5700

2

橘子

2kg

nt$2250

3

草莓

1kg

nt$1100

4

甜瓜

6kg

nt$6700

解法背包問題是關于最佳化的問題,要解最佳化問題可以使用「動态規劃」(dynamic programming),從空集合開始,每增加一個元素就先求出該階段的最佳解,直到所有的元素加入至集合中,最後得到的就是最佳解。

以背包問題為例,我們使用兩個陣列value與item,value表示目前的最佳解所得之總價,item表示最後一個放至背包的水果,假設有負重量 1~8的背包8個,并對每個背包求其最佳解。

逐漸将水果放入背包中,并求該階段的最佳解:

放入李子

背包負重

5

6

7

8

value

4500

9000

item

放入蘋果

5700

放入橘子

2250

6750

7950

放入草莓

1100

3350

6800

9050

放入甜瓜

由最後一個表格,可以得知在背包負重8公斤時,最多可以裝入9050元的水果,而最後一個裝入的 水果是3号,也就是草莓,裝入了草莓,背包隻能再放入7公斤(8-1)的水果,是以必須看背包負重7公斤時的最佳解,最後一個放入的是2号,也就 是橘子,現在背包剩下負重量5公斤(7-2),是以看負重5公斤的最佳解,最後放入的是1号,也就是蘋果,此時背包負重量剩下0公斤(5-5),無法 再放入水果,是以求出最佳解為放入草莓、橘子與蘋果,而總價為9050元。

實作

繼續閱讀