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