アルゴリズムとデータ構造 補足資料 10-3
「ナップザック問題」
横浜国立大学 理工学部 数物・電子情報系学科 富井尚志
バックトラックアルゴリズム
• とりあえずやってみる
• ダメなら戻って別の道を探る
– あのとき別の道を選んでいたら、、、
• 試行錯誤( trial and error )
– 結局全部のケースをやってみる(完全解)
– その中で最適な解を選ぶ
(最適解を覚えておく)
ナップザック問題( Knapsack problem )
A) n 個の品物を旅行カバンの中に入れて旅行す る.持って歩ける重量には制限がある
B) 個々の品物には,重さ と 価値(重要度) の 情報が与えられている.
C) n 個の品物からいくつか選択して,制限重量
以下で価値の総和が最大になるようにする.
ナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g重量制限が
500gのとき 現在の最大総価値
0点
ナップザック問題( Knapsack problem )
本
10点
500g傘
90
点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g500g
; あと一つ載せたら
OUT重量制限が
500gのとき 現在の最大総価値
10点
ナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g500g
; あと一つ載せたら
OUT重量制限が
500gのとき 現在の最大総価値
90点
ナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g重量制限が
500gのとき 現在の最大総価値
90点
1,300g
;
OUTナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g320g
;
重量制限が
500gのとき 現在の最大総価値
190点
1,300g
;
OUTナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g320g
;
重量制限が
500gのとき 現在の最大総価値
190点
1,300g
;
OUT720g
;
OUTナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g320g
;
重量制限が
500gのとき 現在の最大総価値
190点
1,300g
;
OUT720g
;
OUT 520g;
OUTナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g320g
;
重量制限が
500gのとき 現在の最大総価値
290点
1,300g
;
OUT720g
;
OUT 520g;
OUT330g
;
ナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g 航空券
100
点
10g洗面用具
50
点
300g320g
;
重量制限が
500gのとき 現在の最大総価値
390点
1,300g
;
OUT720g
;
OUT 520g;
OUT330g
;
340g
;
ナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g 航空券
100
点
10g 洗面用具
50
点
300g 320g;
重量制限が
500gのとき 現在の最大総価値
390点
1,300g
;
OUT720g
;
OUT 520g;
OUT330g
;
340g
;
640g
;
OUTナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100点
20g地図
70点
200g宿チケット
100
点
10g 航空券
100
点
10g 洗面用具
50
点
300g 320g;
重量制限が
500gのとき 現在の最大総価値
390点
1,300g
;
OUT720g
;
OUT 520g;
OUT330g
;
340g
;
640g
;
OUT解候補 現在の最大総価値
390点
ナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g重量制限が
500gのとき 現在の最大総価値
390点
1,300g
;
OUTナップザック問題( Knapsack problem )
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g1 1 1 1 1 1 1 1 1 1
~
本
10点
500g傘
90点
500g下着
90点
300gジャケット
30
点
1,000gMDプレー ヤ
20
点
400g薬
100
点
20g地図
70点
200g宿チケット
100
点
10g航空券
100
点
10g洗面用具
50
点
300g0 0 0 0 0 0 0 0 0 0
最悪時: 上記の全とおりの組み合わせについて、総重量と総価値を計算して、