基本情報技術概論 (第7回) アルゴリズム と データ構造 埼玉大学 理工学研究科 堀山 貴史 1 中間試験 12/9 (水) 5, 6 限 教養1-208 教室 (この教室) 試験範囲 今日の講義分まで。 基本情報処理概論演習の問題や 情報処理技術者試験ぐらいの難易度です。 ( マークシート問題 + 記述問題の予定です。) 情報処理技術者試験の過去問 (解答つき) http://www.jitec.jp/ 2 中間試験 持ち込み不可。 荷物はイスの下に。 机の上 や 机の棚に 物がある場合は、 不正行為とみなします。 問題用紙や解答用紙の配布を始めたら、 私語厳禁。(私語も不正行為とみなします。) マークシートに記入しやすい筆記用具 ( B や HB の黒鉛筆など ) と、消しゴムが必要です。 3 最短経路問題 応用: 列車の乗り換え検索 カーナビのルート検索 4 最短経路問題 (入力) 有向グラフ G = ( V, E ), 辺の距離 c : E → N 始点 s, 終点 t 1 30 2 70 3 120 20 30 50 4 90 始点 1, 終点 5 5 5 ダイクストラ Dijkstra のアルゴリズム (アイデア) s に近い順に、節点への距離を確定させていく 1 30 2 70 3 120 20 30 50 4 90 始点 1, 終点 5 5 6 Dijkstra のアルゴリズム 1. (初期化) s から節点 v への距離 D[ s ] ← 0 D [ v ] ← ∞ (s 以外の節点) 0 1 ∞ 30 2 70 ∞ 3 120 20 30 50 4 ∞ 90 始点 1, 終点 5 5 ∞ 7 Dijkstra のアルゴリズム 2. u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D [ u ] が確定) ※ 最初は、全節点が未確定 0 1 ∞ 30 2 70 ∞ 3 120 20 30 50 4 ∞ 90 始点 1, 終点 5 5 ∞ 8 Dijkstra のアルゴリズム 3. u に隣接するすべての節点 v に対し、D [ v ]を更新 D [ v ] ← min { D [ v ], D [ u ] + c ( ( u, v ) ) } s→…→u→v 0 1 30 30 ∞ 2 70 ∞ 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 9 Dijkstra のアルゴリズム (まとめ) 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 ) ) } 更新時に、u を覚えると、最短経路を求められる 4. すべての節点が確定するまで、 2,3 を繰り返す 10 Dijkstra のアルゴリズム 続きを、自分でやってみてください 0 1 30 30 ∞ 2 70 ∞ 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 11 Dijkstra のアルゴリズム 2. u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D [ u ] が確定) 0 1 30 30 ∞ 2 70 ∞ 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 12 Dijkstra のアルゴリズム 3. u に隣接するすべての節点 v に対し、D [ v ]を更新 D [ v ] ← min { D [ v ], D [ u ] + c ( ( u, v ) ) } 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 13 Dijkstra のアルゴリズム 2. u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D [ u ] が確定) 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 14 Dijkstra のアルゴリズム 3. u に隣接するすべての節点 v に対し、D [ v ]を更新 D [ v ] ← min { D [ v ], D [ u ] + c ( ( u, v ) ) } 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 15 Dijkstra のアルゴリズム 2. u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D [ u ] が確定) 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 16 Dijkstra のアルゴリズム 3. u に隣接するすべての節点 v に対し、D [ v ]を更新 D [ v ] ← min { D [ v ], D [ u ] + c ( ( u, v ) ) } 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 100 17 Dijkstra のアルゴリズム 2. u ← 未確定の節点で、s からの距離が最小の もの (s からの距離 D [ u ] が確定) 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 100 18 Dijkstra のアルゴリズム 3. u に隣接するすべての節点 v に対し、D [ v ]を更新 D [ v ] ← min { D [ v ], D [ u ] + c ( ( u, v ) ) } 0 1 30 30 ∞ 2 70 ∞ 70 3 120 20 30 50 4 20 ∞ 90 始点 1, 終点 5 5 ∞ 120 110 100 19 練習: Dijkstra のアルゴリズム 以下のグラフにおいて、地点 1 から地点 6 への最短距離を 求めるため、Dijkstra のアルゴリズムを実行する。 この時、最短距離が確定するのは、 地点 1 → → 地点 6 の順である。空欄を埋めなさい。 なお、 Dijkstra のアルゴリズムは、本資料 p.10 を参照。 10 1 20 30 50 4 2 10 30 3 30 5 40 10 6 20 Dijkstra のアルゴリズム 練習: 地点 1 → 10 1 20 2 30 50 4 → 地点 6 10 30 3 30 5 40 10 6 21 22 3分で分かる マージソート 23 アルゴリズム: マージソート ソートされた2つの列 → 1つにマージ(併合)するのは簡単 (各列の先頭を見比べながら、小さい方を取っていく) 5 20 25 50 (併合ソート) 1 10 30 40 1回のマージの実行時間は、要素数に比例 24 アルゴリズム: マージソート (併合ソート) 5 25 50 20 30 40 10 1 5 25 50 20 5 25 5 25 5 25 30 40 10 1 50 20 50 20 20 50 30 40 30 40 30 40 分割 10 1 10 log n 段 1 1 10 マージ log n 段 1 段に O( n ) 時間 → 全部で O( n log n ) 時間 26 27 この教材のご利用について この文面は、TOKYO TECH OCW の利用 条件を参考にしました この教材は、以下に示す利用条件の下で、著作権者にわざわざ許諾を 求めることなく、無償で自由にご利用いただけます。講義、自主学習は もちろん、翻訳、改変、再配布等を含めて自由にご利用ください。 非商業利用に限定 この教材は、翻訳や改変等を加えたものも含めて、著作権者の許 諾を受けずに商業目的で利用することは、許可されていません。 著作権の帰属 この教材および教材中の図の著作権は、次ページ以降に示す著 作者に帰属します。この教材、または翻訳や改変等を加えたもの を公開される場合には、「本教材 (or 本資料) は http://www.al.ics. saitama-u.ac.jp/horiyama/OCW/ の教材です (or 教材を改変したものです」 との旨の著作権表示を明確に実施 してください。なお、この教材に改変等を加えたものの著作権は、 次ページ以降に示す著作者および改変等を加えた方に帰属しま す。 同一条件での頒布・再頒布 この教材、または翻訳や改変等を加えたものを頒布・再頒布する 場合には、頒布・再頒布の形態を問わず、このページの利用条件28 この教材のご利用について 配布場所 http://www.al.ics.saitama-u.ac.jp/horiyama/OCW/ この powerpoint ファイルの著作者 堀山 貴史 2007-2010 [email protected] 改変等を加えられた場合は、お名前等を追加してください 図の著作者 p. 20, 21 クリップアート : Microsoft Office Online / クリップアート その他 堀山 貴史 29
© Copyright 2024 ExpyDoc