n - 情報認識学研究室

アルゴリズムとデータ
構造
第1回ガイダンス
2015/10/14
2015年度アルゴリズムとデータ構造
1
なぜ「アルゴリズムとデータ構造」を学ぶのか?
効率的なプログラムを作成できるようになるため
効率的とは


計算時間が短い
メモリ使用量が少ない
メリット



アルゴリズムは全てのプログラム言語で役に立つ
情報理工学専攻大学院入試に出題される科目
IT関連に就職する人は常識とされる
2015/10/14
2015年度アルゴリズムとデータ構造
2
アルゴリズムとは
機械的に実行可能な手続き
(例)自然数a0, a1(a0≧a1)の最大公約数を求める単純なアルゴリズム
「nがa0とa1を共に割り切るかを、n=a1から始めて1つずつ小さな値nに
対してチェックし、初めて割り切る値nを出力」
2015/10/14
2015年度アルゴリズムとデータ構造
3
アルゴリズムの表現
1.
自然言語の文章による表現
[日本語の文章による表現] nがa0とa1を共に割り切るかを、n=a1から始
めて1つずつ小さな値nに対してチェックし、初めて割り切る値nを出力
長: 特別に知識を必要としない、読みやすい,
短: 厳密に書くのが難しい、制御構造を表現しづらい
2.
開
始
n←a1
プログラミング言語による表現
[C言語による表現]
n=a1;
for(;n>0;n--) if(a0%n=0 && a1%n=0) return n;
N
長: 厳密に書ける、制御構造を表現しやすい,
短: 読みにくい、記述言語の知識が必要
3.
フローチャートによる表現(右図) 長: 制御構造を理解し易い
短: 読みにくい
2015/10/14
2015年度アルゴリズムとデータ構造
a0とa1が
共にnで割
り切れる
Y
nを出力
終
了
4
アルゴリズムの擬似コードによる表現
1.
擬似コードによる表現
n←a1
loop
if a0とa1が共にnで割り切れる then
return n
end if
n←n − 1
end loop
無限に繰り返す
nの値を返してこの
手続きから抜ける
長: 読みやすい、制御構造を表現しやすい,
短: 制御構造記述の知識が少し必要
2015/10/14
2015年度アルゴリズムとデータ構造
5
ユークリッドの互除法の擬似コード
a←a0, b←a1
loop
r←aをbで割った余り
if r=0 then
return b
end if
a←b, b←r
end loop
2015/10/14
2015年度アルゴリズムとデータ構造
6
どっちのアルゴリズムの方が効率的?
自然数a0, a1(a0≧a1)の最大公約数を求めるアルゴリズム
単純なアルゴリズム
と
ユークリッドの互除法
ではどちらの方が効率的なアルゴリズムなのか?
どのような計算モデルを用いて、どのように評価するのかを
はっきりさせる必要がある。
2015/10/14
2015年度アルゴリズムとデータ構造
7
計算モデル
(決定性)チューリング機械(Turing Machine)
1936年に発表した論文でAlan Turingが提案したモ
デルであり、計算量の理論でベースとなっているモデル

テープヘッド
制御部
Alan Turing
1912-1954 英国
Σ: 文字集合(有限個のシンボル)
K: 有限個の状態
•1本のテープ、テープヘッド、制御部からなる。
•テープヘッドの位置するマス目には、そこに書かれている(Σに属する)文字を読み
込んだり、異なる文字に書き換えることが可能。
•制御部には現在の(Kに属する)状態が記憶されている。
•現在のテープヘッドが位置するマス目の文字、制御部の状態で次の動作が決まる。
•1回の動作は次の3つからなる。
1.テープヘッドが位置するマス目の文字を書き換える
2.テープヘッドを左右に1マス以下動かす
3.制御部の状態を新しい状態に書き換える
2015/10/14
2015年度アルゴリズムとデータ構造
8
決定性チューリング機械の厳密な定義
チューリング機械とは4つ組M=(K,Σ,δ,s)のこと。
K:有限状態集合
s∈K:初期状態
Σ:アルファベット(有限シンボル集合)
入力の終わりは
K∩Σ=φで、`␣’(空白)と`▷’(先頭)の2つの
`␣’で検知可能
特殊シンボルを含む。入力には`␣’は使えない。
δ:K×Σ → (K∪{h,``yes’’,``no’’})×Σ×{←,→,-}, 遷移関数
h: halting state (停止状態)
yes: accepting state (受理状態)
no: rejecting state (拒否状態)
←: 左にテープヘッドを移動
→:右にテープヘッドを移動
-: テープヘッドを動かさない
ただし δ(q, ▷)=(p, ▷,→):先頭シンボルに位置づいている場合は
書き換えないでヘッドを右に移動。
2015/10/14
2015年度アルゴリズムとデータ構造
9
決定性チューリング機械による具体的な計算例
0と1からなる文字列の先頭に空白を入れるチューリング機械
M=(K,Σ,δ,s), K={s,q,q0,q1}, Σ={0,1, ␣,▷}
δ(s,0)=(s,0,→)
δ(s,1)=(s,1,→)
δ(s, ␣)=(q, ␣,←)
δ(s, ▷)=(s, ▷,→)
δ(q,0)=(q0, ␣,→)
δ(q,1)=(q1, ␣,→)
δ(q, ␣)=(q, ␣,-)
δ(q, ▷)=(h, ▷ ,→)
δ(q0,0)=(s,0,←)
δ(q0,1)=(s,0,←)
δ(q0, ␣)=(s,0,←)
δ(q0, ▷)=(h, ␣,→)
δ(q1,0)=(s,1,←)
δ(q1,1)=(s,1,←)
δ(q1, ␣)=(s,1,←)
δ(q1, ▷)=(h, ␣,→)
2015/10/14
▷010
▷010
s
▷010
s
▷010␣
▷01␣0
s
▷010␣
s
▷0␣␣0
q0
▷␣010
s
2015年度アルゴリズムとデータ構造
▷01␣0
q0
▷0␣10
q1
▷␣␣10
s
▷01␣␣
q
q
▷010
s
▷␣010
q
s
▷0␣10
q
▷␣010
h
10
計算可能とは?
Σ*はΣに属する文字からなる任意の長さの文字列
def
Σ*上の関数fが計算可能 ⇔
すべてのx∈Σ*に対し
Mにxを与えて実行するとf(x)を出力して停止する
ようなチューリング機械Mが存在すること
上の定義において「チューリング機械」をもっと強力な「チューリング機械の変形」
に換えても計算可能な関数は変わらない!
複数テープチューリング機械(テープが複数)
δ:K×Σk → (K∪{h,``yes’’,``no’’})×Σk×{←,→,-}k
非決定性チューリング機械(入力に対し計算が一意に定まらない)
δ:K×Σ →
2(K∪{h,``yes’’,``no’’})×Σ×{←,→,-}
2XはXの部分集合の集合(Xの部分集合族)
2015/10/14
2015年度アルゴリズムとデータ構造
11
Church(Church-Turing)の提唱(1936)
アルゴリズムをもつ関数(計算できる関数)という直感的な概念を
チューリング機械で計算可能な関数クラスと同一視しよう。
Alonzo Church,
1903-1995, 米国
関数fが帰納的 ⇔ 関数fがλ定義可能 ⇔ 関数fがチューリング機械で計算可能
Gödel
Church
Turing
Church, Kleeneにより証明
Turingにより証明
よって「チューリング機械」を「帰納的関数」または「λ定義可能な関数」と言い換えても同じ
アルゴリズムをもつ関数(計算できる関数)という直感的な概念を
帰納的関数(λ定義可能な関数)と呼ばれる関数クラスと同一視しよう。
2015/10/14
2015年度アルゴリズムとデータ構造
12
万能チューリング機械
• チューリング機械は1つの関数の値しか計算できない専用機。
様々な関数の値が計算できる汎用機はあるのか?→YES
• どんなチューリング機械Mでも文字列pで表現可能
有限シンボルを扱い,有限状態をもつので、遷移関数への入力は
有限個しかない
万能チューリング機械=
任意のチューリング機械Mに対し,それを表す文字列pと
任意の文字列xの組(p,x)をテープに与えて実行すると,Mにxを
与えて実行したのと同じ結果が得られるチューリング機械
2015/10/14
2015年度アルゴリズムとデータ構造
13
計算不可能な関数なんてあるの?
停止性判定問題
任意のチューリング機械Mの文字列表現pと任意の文字列xの組(p,x)に対し、
チューリング機械Mにxを与えて実行したときに、その実行が停止するかしないか
を判定する問題
停止性判定問題を解くアルゴリズムが存在するかということは
次のような関数haltが計算可能かということ
halt(p,x)= 1 if プログラムpが入力xに対して停止するとき
0 otherwise
関数haltは計算不可能!
2015/10/14
2015年度アルゴリズムとデータ構造
14
関数haltが計算不可能であることの証明
haltが計算可能であると仮定して矛盾を導く。
haltが計算可能であれば、左下のようなチューリング機械Mが存在する。
チューリング機械M
if(halt(u,u)=1) {
while(true){ u←u;}
} else {
return(0);
}
Mにその文字列表現pを与えて実行した場合を考える。
このとき、「停止する」と仮定すると
Mに(u=)pを与えて実行すると停止する
⇒halt(p,p)=1
⇒Mにpを与えて実行すると無限ループにおちいる
(停止するという仮定に矛盾)
逆に「停止しない」と仮定すると
Mに(u=p)を与えて実行すると停止しない
⇒halt(p,p)=0
⇒Mにpを与えて実行すると停止する。
(停止しないという仮定に矛盾)
したがってhaltが計算可能であるという仮定が誤りである。
2015/10/14
2015年度アルゴリズムとデータ構造
15
ランダムアクセス機械
RAM (Random Access Machine)
ランダムアクセス記憶を持つ逐次実行型の計算モデル
入力テープ
テープヘッド
累算器 (四則演算・ジャンプ命令など可能)
制御カウンタ
プログラム
記憶
レジスタ
出力テープ
テープヘッド
記憶レジスタには以下のことを仮定
 任意の大きさの整数を格納できる
 無限個存在
 任意のレジスタに1ステップでアクセス可能
計算能力はチューリング機械と同等
2015/10/14
2015年度アルゴリズムとデータ構造
16
チューリング賞って知ってる?
チューリング賞は、現代計算機の産みの親であるアラン・チューリングの功績を称え
て、 1966年に米コンピューター学会(ACM) が設定した賞である。 (副賞25万ドル)
最近12年の受賞者
2003
Alan Kay
オブジェクト指向プログラミング言語の開発
2004
Vinton G. Cerf、 Robert E. Kahn
2005
Peter Naur
2006
Frances E Allen (女性初) コンパイラー最適化技術の開発
TCP/IPプロトコルの開発
Algol 60の開発
2007 Edmund M. Clarke,
E. Allen Emerson,Joseph Sifakis
LSIの回路設計検証などに貢献
2008 Barbara Liskov(女性)
データ抽象化機能をサポートしたプログラム言語CLU、分散プログラムをサポートしたArgusの開発
2009 Charles P. Thacker
現代のパーソナルコンピュータの原型であるAltoに関する先駆的な設計とその実現、イーサネットとタ
ブレットPCへの貢献
2010 Leslie G. Valiant
計算論的学習理論に関する研究と、コンピュータ科学のより幅広い理論への貢献
2011
Judea Pearl
確率的および因果的推論の算法を発展させることで、人工知能に基礎的貢献をした
2012
Silvio Micali, Shafi Goldwasser
2013
Leslie Lamport
分散/並列システムの理論と実践への貢献
2014
Michael Stonebraker
データベースシステム分野の基礎構築に貢献
2015/10/14
暗号理論、計算複雑性理論への貢献、ゼロ知識証明の発明
2015年度アルゴリズムとデータ構造
17
じゃ、ゲーデル賞は?
理論計算機科学分野で優れた功績を残した人に、ACM(アメリカ計
算機学会)のアルゴリズムと計算量理論に関する部会とEATCS
(ヨーロッパ理論コンピュータ学会)が贈る賞である。受賞者には賞
金5,000ドルが贈られる。論理学者クルト・ゲーデルに由来する。計
算機科学分野ではチューリング賞と並んで権威を持つ賞である。
過去12年の受賞者
Kurt Gödel,
2004 Maurice Herlihy, Michael Saks, Nir Shavit and Fotios Zaharoglou:
1906-1978,
applications of topology to the theory of distributed computing
2005 Noga Alon, Yossi Matias and Mario Szegedy:
オーストリア
their foundational contribution to streaming algorithms
2006 Manindra Agrawal, Neeraj Kayal, Nitin Saxena: the AKS primality test
2007 Alexander Razborov, Steven Rudich: natural proofs
2008 Daniel Spielman, Shanghua Teng: smoothed analysis of algorithms
2009 Omer Reingold, Salil Vadhan, Avi Wigderson:
zig-zag product of graphs and undirected connectivity in log space
2010 Sanjeev Arora, Joseph S. B. Mitchell: their concurrent discovery of a polynomial-time approximation scheme (PTAS)
for the Euclidean Travelling Salesman Problem (ETSP)
2011 Johan Håstad:
proving optimal inapproximability result for various combinatorial problems
2012 Elias Koutsoupias, Christos Papadimitriou, Noam Nisan, Amir Ronen, Tim Roughgarden and Éva Tardos:
laying the foundations of algorithmic game theory
2013 Dan Boneh, Matthew K. Franklin, and Antoine Joux:
for multi-party Diffie–Hellman key exchange and the Boneh–Franklin scheme in cryptography
2014 Ronald Fagin, Amnon Lotem, and Moni Naor: for Optimal Aggregation Algorithms for Middleware
2015 Daniel Spielman, Shanghua Teng or their series of papers on nearly-linear-time Laplacian solvers
日本人では戸田誠之助先生が「多項式階層と複雑性クラス#Pの関係」に関する研究で1998年に受賞
2015/10/14
2015年度アルゴリズムとデータ構造
18
更に、ネヴァンリンナ賞は?
Fields Medal(1936-),Carl Friedrich Gauss Prize(2006-)と共
に国際数学者連盟が設ける賞で,4年に一度,情報科学に於け
る数学分野に貢献した受賞時に40歳以下の者が対象.
Rolf Nevanlinna,
副賞15,000ドル。(IMU:国際数学者連合)
1895-1980,フィンランド
Year
1982
1986
1990
1994
1998
2002
2006
2010
2014
Laureate
Nationality
Robert Tarjan
United States
Leslie Valiant
United Kingdom
Alexander Razborov
Russia
Avi Wigderson
Israel
Peter Shor
United States
Madhu Sudan
India/ United States
Jon Kleinberg
United States
Daniel Spielman United States
Subhash Khot
india/ United States
John von Neumann 賞 (1992-) 副賞4000ドル (IEEE)
コンピュータ関連の科学・技術に著しく貢献した者を顕彰するために1990年に設置された.
「理論的・技術的・事業的な成功に対して,長期的な視点で」対象者を選考.
個人またはグループで3人まで.von Neumannは現代コンピュータの発明者.
2015/10/14
2015年度アルゴリズムとデータ構造
19