授業中に説明した重複を許すナップサック問題について、
(1) バックトラック法
(2) 動的計画法
の両解法をプログラム中のmain関数から呼び出し、それぞれ最適解を表示するプログラムを作成すること。
このとき、それぞれの時間計算量の目安となる実行ステップ数を計り、最適解と併せて表示すること。
最適解の表示方法は、その内容が分かれば形式は問わないが、(1)(2)でそれぞれ出力すること。
(特に(2)は表示方法は授業中に明示していないことに注意)。
SAMPLE_K300
ID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
value | 15 | 100 | 90 | 60 | 40 | 15 | 10 | 3 |
weight | 6 | 20 | 25 | 30 | 40 | 30 | 60 | 10 |
SAMPLE_K310
ID | 0 | 1 | 2 | 3 | 4 |
value | 4 | 5 | 10 | 11 | 13 |
weight | 3 | 4 | 7 | 8 | 9 |
【状況】 | 【指示】 |
誰かに教えてもらった場合: | その学生(氏名と9桁の学籍番号)をプログラム先頭に記し、さらにプログラム中コメントを使って、教えてもらったところの解説を数行以上書き込むこと。
(教えてもらった部分の解説コメントのないプログラムは全く評価しません。「全体です」のようなコメントの場合も同じです。) |
誰かに教えてあげた場合: | その学生(氏名・学籍番号)をプログラム先頭に記すこと。 |
お互いに相談した場合: | お互いの氏名・学籍番号を、教えてもらった・教えてあげたの例に準拠して提出してください。 |
(1) 上記の重複を許すナップサック問題の解法(1)(2)について、時間計算量、空間計算量をオーダーで述べよ。
このとき、物品の種類の数Nだけでは表現できないことがあることに注意すること。
(2) 課題5Aの実行ステップ数と、オーダーによる時間計算量予想とが必ずしも一致しない原因を考察せよ。
授業で示した有限オートマトンを実行するプログラムに関して、受理状態に入った時点でその受理状態を表示して実行を終了するようにプログラムを改良せよ。