290 likes | 409 Views
アルゴリズム と データ構造. 基本情報技術 概論 I ( 第 12 回 ). 埼玉大学 理工学研究科 堀山 貴史. 午後の問題への対応. 長文にメゲない 読み飛ばしは、 思いこみ違い の原因 色々なアルゴリズムを知っておく 暗記ではなく、 アイデア を把握 アイデアを実現する 手順 を考える. 文字列処理. 暗記ではなく、考え方の練習. 検索文字列 S を、 文字列 R から検索. 文字列探索. 配列の サイズ. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
E N D
アルゴリズム と データ構造 基本情報技術概論 I(第12回) 埼玉大学 理工学研究科 堀山 貴史
午後の問題への対応 • 長文にメゲない • 読み飛ばしは、思いこみ違いの原因 • 色々なアルゴリズムを知っておく • 暗記ではなく、アイデアを把握 • アイデアを実現する手順を考える
文字列処理 暗記ではなく、考え方の練習
検索文字列 S を、 文字列 R から検索 文字列探索 配列の サイズ 1 2 3 4 5 6 7 8 9 10 11 12 … M R [ ] A B C M X X X Y Y Y Z Z Z S [ ] D X Y E F X Y Z G H I J N i = 1 i = M – N + 1 比較開始位置 for ( i = 1 ; i≦ M – N + 1 ; ++ i ) { } ※ テキストでは、終了条件を記載 i > ( M – N + 1) 処理 処理
検索文字列 S を、 文字列 R から検索 文字列探索 配列の サイズ i R [ ] A B C M X Y Z S [ ] N D X Y E F X Y Z G H I J j=1…N 比較位置 for ( i = 1 ; i≦ M – N + 1 ; ++ i ) { } for ( j = 1 ; j≦ N ; ++ j ) { if ( R[ i + j – 1 ] ≠ S[ j ] ) { break ; } } if ( j > N ) { P ← i ; break ; } // 見つけた 処理
参考: 文字列検索アルゴリズム • 力まかせ法 (p. 4, 5 の方法) • O( n m ) • KMP 法 (Knuth-Morris-Pratt) • O( n + m ) • BM 法 (Boyer-Moore) • O( n + m ) n: テキストの長さ m : 検索文字列の長さ ( p. 4, 5 では M ) (〃 N )
空白除去 配列の サイズ j i 1 2 3 4 5 6 7 8 9 10 11 12 … N S [ ] R [ ] A B C A N B D C E D F X E Y F Z X Y Z N j = 1 for ( i = 1 ; i≦ N ; ++ i ) { } if ( R[ i ] ≠ “空白” ) { S[ j ] = R[ i ] ; // S[ ] にコピー ++ j ; } ※ テキストより簡単
文字列 R の P の位置に、 文字列 S を挿入 文字列挿入 1 2 3 4 P … M R [ ] A B C D E F G H A B C D X Y Z E F G H R [ ] 挿入後 R [ ] の P 以降を ずらす S [ ] を 挿入 S [ ] 1 … N for ( i = M ; i≧ P ; -- i ) { } R [ i + N ] = R [ i ] ; // 後ろからずらす for ( j = 1 ; j ≦ N ; ++ j ) { } R [ P + j - 1 ] = S [ j ] ;
文字列処理 (その他) • 文字列連結 • R [ ],S [ ] の順に、文字列を T [ ] にコピー • 文字列置換 • R [ P ],R [ P + 1 ],… に、文字列 S [ ] をコピー T [ ] R [ ] S [ ] S [ ] R [ ]
最短経路問題 応用: 列車の乗り換え検索 カーナビのルート検索
最短経路問題 (入力) • 有向グラフ G = ( V, E ), 辺の距離 c: E → N • 始点 s, 終点 t 30 70 1 2 3 120 20 30 50 4 5 90 始点 1, 終点 5
ダイクストラ Dijkstraのアルゴリズム (アイデア) • s に近い順に、節点への距離を確定させていく 30 70 1 2 3 120 20 30 50 4 5 90 始点 1, 終点 5
Dijkstraのアルゴリズム • (初期化) s から節点 v への距離 D[ s ] ← 0 D[ v ] ← ∞ (s 以外の節点) 30 70 0 1 2 ∞ 3 ∞ 120 20 30 50 4 5 90 ∞ ∞ 始点 1, 終点 5
Dijkstraのアルゴリズム • u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D[ u ] が確定) ※ 最初は、全節点が未確定 30 70 0 1 2 ∞ 3 ∞ 120 20 30 50 4 5 90 ∞ ∞ 始点 1, 終点 5
Dijkstraのアルゴリズム • u に隣接するすべての節点 v に対し、D[ v ]を更新 D[ v ] ← min { D[ v ],D[ u ] + c( (u, v) ) } s … →u → v 30 70 0 1 30 2 ∞ 3 ∞ 120 20 30 50 4 5 90 20 ∞ ∞ 120 始点 1, 終点 5
Dijkstraのアルゴリズム (まとめ) • (初期化) s から節点 v への距離 D[ s ] ← 0 D[ v ] ← ∞ (s 以外の節点) • u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D[ u ] が確定) • u に隣接するすべての節点 v に対し、D[ v ]を更新 D[ v ] ← min { D[ v ],D[ u ] + c( (u, v) ) } • すべての節点が確定するまで、 2,3 を繰り返す 他の初期化方法もある 更新時に、u を覚えると、最短経路を求められる
Dijkstraのアルゴリズム • 続きを、自分でやってみてください 30 70 0 1 30 2 ∞ 3 ∞ 120 20 30 50 4 5 90 20 ∞ ∞ 120 始点 1, 終点 5
Dijkstraのアルゴリズム • u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D[ u ] が確定) 30 70 0 1 30 2 ∞ 3 ∞ 120 20 30 50 4 5 90 20 ∞ ∞ 120 始点 1, 終点 5
Dijkstraのアルゴリズム • u に隣接するすべての節点 v に対し、D[ v ]を更新 D[ v ] ← min { D[ v ],D[ u ] + c( (u, v) ) } 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 始点 1, 終点 5
Dijkstraのアルゴリズム • u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D[ u ] が確定) 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 始点 1, 終点 5
Dijkstraのアルゴリズム • u に隣接するすべての節点 v に対し、D[ v ]を更新 D[ v ] ← min { D[ v ],D[ u ] + c( (u, v) ) } 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 始点 1, 終点 5
Dijkstraのアルゴリズム • u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D[ u ] が確定) 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 始点 1, 終点 5
Dijkstraのアルゴリズム • u に隣接するすべての節点 v に対し、D[ v ]を更新 D[ v ] ← min { D[ v ],D[ u ] + c( (u, v) ) } 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 100 始点 1, 終点 5
Dijkstraのアルゴリズム • u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D[ u ] が確定) 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 100 始点 1, 終点 5
Dijkstraのアルゴリズム • u に隣接するすべての節点 v に対し、D[ v ]を更新 D[ v ] ← min { D[ v ],D[ u ] + c( (u, v) ) } 30 70 0 1 30 2 ∞ 3 ∞ 70 120 20 30 50 4 5 90 20 ∞ ∞ 120 110 100 始点 1, 終点 5
この文面は、TOKYO TECH OCW の利用条件を参考にしました この教材のご利用について • この教材は、以下に示す利用条件の下で、著作権者にわざわざ許諾を求めることなく、無償で自由にご利用いただけます。講義、自主学習はもちろん、翻訳、改変、再配布等を含めて自由にご利用ください。 • 非商業利用に限定 • この教材は、翻訳や改変等を加えたものも含めて、著作権者の許諾を受けずに商業目的で利用することは、許可されていません。 • 著作権の帰属 • この教材および教材中の図の著作権は、次ページ以降に示す著作者に帰属します。この教材、または翻訳や改変等を加えたものを公開される場合には、「本教材 (or 本資料) は http://www.al.ics. saitama-u.ac.jp/horiyama/OCW/ の教材です (or 教材を改変したものです」 との旨の著作権表示を明確に実施してください。なお、この教材に改変等を加えたものの著作権は、次ページ以降に示す著作者および改変等を加えた方に帰属します。 • 同一条件での頒布・再頒布 • この教材、または翻訳や改変等を加えたものを頒布・再頒布する場合には、頒布・再頒布の形態を問わず、このページの利用条件に準拠して無償で自由に利用できるようにしてください。
この教材のご利用について • 配布場所 • http://www.al.ics.saitama-u.ac.jp/horiyama/OCW/ • この powerpointファイルの著作者 • 堀山 貴史 2007-2009 horiyama@al.ics.saitama-u.ac.jp • 改変等を加えられた場合は、お名前等を追加してください • 図の著作者 • p. 4 ~ 25 • 堀山 貴史