データ構造とアルゴリズム
第十二回 (2012年
1月13日)
アルゴリズムの設計方針
http://www.sw.it.aoyama.ac.jp/2011/DA/lecture12.html
Martin J. Dürst
© 2009-12 Martin
J. Dürst 青山学院大学
今日の予定
- これからの予定
- 前回の残り
- アルゴリズムの設計方針
- 手に負える・負えない問題
- 授業改善のための学生アンケート
これからの予定
- 1月17日 (火曜日1限、補講): 13回目の授業
- 1月20日 (金): 14回目の授業
- 1月27日 (金曜日1限、9:30-10:55): 期末試験
補講についての注意
アルゴリズムの設計方針
- 単純なアルゴリズム
- 総当たり方 (腕力法、虱潰し、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 と書く
授業改善のための学生アンケート
お願い:
できるだけ自由記述を使って、具体的に書いてください
(悪い例: 発音が分かりにくい; 良い例:
さ行が濁っているかどうか分かりにくい)