データ構造とアルゴリズム
第十二回 (2011年
1月7日)
アルゴリズムの設計方針
http://www.sw.it.aoyama.ac.jp/2010/DA/lecture12.html
Martin J. Dürst
© 2009-11 Martin
J. Dürst 青山学院大学
今日の予定
- これからの予定
- 期末試験の内容
- 前回の宿題
- アルゴリズムの設計方針
- 手に負える・負えない問題
- 授業改善のための学生アンケート
これからの予定
- 1月14日 (金): 13回目の授業
- 1月18日 (火曜日): 14回目の授業
(補講)
- 1月21日: 期末試験 09:30-10:55 (85分間)
期末試験の内容
- 試験範囲:
- 授業・プリント・プログラムの全ての内容
- プログラムそのものは書く必要がないが、理解する必要はある
- 問題の種類:
- 情報数学 I や計算機実習 I と類似
- 過去の問題 (2008年、2009年):
- 閲覧には Opera を推奨
図と解答例の一部は欠落
解答例は「表示」→「スタイル」→「solutions」で表示可能
- 注意点:
- 問題をよく読む (計算、証明、説明などの区別)
- 概念の定義を自分の言葉でおさえる
- 綺麗な字で書く
宿題 (レポート)
提出: 1月6日 (木) 19:00、O棟 529号室の前の箱; 3ページ程度;
A4 両面左上ホチキス止め;
名前と学籍番号は一ページ目上部に記載 (表紙無し)
動的計画法のアルゴリズムで解決できる問題を調べ、その問題においての動的計画法のアルゴリズムを説明しなさい。
(詳細略)
アルゴリズムの設計方針
- 単純なアルゴリズム
- 総当たり方 (腕力法、虱潰し、brute force)
- 貪欲アルゴリズム (greedy algorithm)
部分的な選択で最適な解を得る
- 分割統治法 (divide and conquer)
重複しない部分問題に分割
- 動的計画法 (dynamic programming)
- ネットワークフロー (network flow)
コストをグラフ上に移動しながら最適化
単純なアルゴリズム
- アルゴリズムとは言わない
- 具体例:
- ソートされたデータで三番目に小さいものを選ぶ
- 長方形の面積を辺の長さから計算
- 数列などの「閉じた式」(closed formula)
- 計算機の速い時代で意外と忘れがち
ナップサック問題一般的な形
- ある容量 c (重さ (又は体積))
のナップサックと
- n 個の品 s1,...,
sn
(それぞれ重さ、そして問題の種類によって価値がある)
- ナップサックの最適な詰め方を求める
ナップサック問題の変形
- 品を一つ詰めればよい
解決:
品を重さの順に並び変え、一番小さい品が入るかどうかを確認
設計方針: 単純なアルゴリズム
- 品をできるだけ数多く積む
解決: 軽い品から容量を超える寸前まで積む
設計方針: 貪欲アルゴリズム
- 容量をできるだけ利用する (整数編)
解決: 容量 c' ≦ c と品
s1,..., sk
(k ≦ n) の部分問題を検討
設計方針: 動的計画法
- 価値をできるだけ多くする
設計方針: 総当たり方
これからの目的
- 「簡単な問題」とそうでない問題を見分ける
- 視野の拡大、アルゴリズムの「宇宙」の展望
問題例 1: 3-SAT
- n 個の論理変数
- その変数で作られている論理式
- 論理式は (否定の) 和の積
- 和はそれぞれ三つの項
- 問題: 式が真になるように変数の値を決定
- 問題の変形: そのような変数の値の存在の有無
- 具体例 (' が否定):
(x1∨x2∨x5)
∧
(x1'∨x3∨x4')
∧
(x2∨x4∨x5)
∧
(x1'∨x3'∨x5')
- 解答候補は O(2n)
- それを全部調べると時間も
O(2n)
- それより早いアルゴリズムは知られてない
- 早いアルゴリズムが無いことも現在証明できない
問題例 2: 独立集合
(Independent Set)
- n 個の元の集合 (グラフの頂点)
- 元と元の間に競合 (conflict) がありうる
(頂点が辺で結ばれている)
- 問題:
競合がないようなできるだけ大きい部分集合を算出
- 問題の変形: k
以上の競合のない部分集合の有無
- 解答候補は O(2n)
- それを全部調べると時間も
O(2n)
- それより早いアルゴリズムは知られてない
- 早いアルゴリズムが無いことも現在証明できない
問題例 3: 巡回セールスマン
(Traveling Salesman)
- n 個の「町」
- 全ての町と町の間の「距離」(時間や費用でもよい)
- 問題: 全ての町に一回だけ立ち寄る一番短い
(費用の少ない) 巡回
- 問題の変形: k 以下の長さ (費用)
の巡回の有無
- 解答候補は O(n!)
- それを全部調べると時間も O(n!)
- それより早いアルゴリズムは知られてない
- 早いアルゴリズムが無いことも現在証明できない
問題例の共通点
- 具体的な応用が大いにありそう
- 総当たり法より根本的に良いアルゴリズムが知られてない
- 総当たり法で解こうとすると指数的時間 (exponential time)
が必要
- n が大きい場合 (例: 100)、事実上解けない
- 早いアルゴリズムが無いことも現在証明できない
- 同じ共通点を持つ問題が多い
多項式時間と指数的時間
- 多項式問題は「手に負える問題」(tractable)
- 指数的問題は「手に負えない問題」(intractable)
多項式時間の特徴
- 指数が大きい問題 (例: O(n100))
は殆どない
- 多項式の加算と乗算はまた多項式
- 多項式時間は計算機のモデルの選択にそれほど左右されない
(例: 並列計算機)
- 多項式時間の問題を一部別扱いしたい場合に、分岐点の選択が困難
- 多項式時間で解ける問題の集合を P と書く
授業改善のための学生アンケート
お願い:
できるだけ自由記述を使って、具体的に書いてください