アルゴリズムとデータ構造 - klab.is.sci.toho-u ... · 4 2014/12/18...
TRANSCRIPT
アルゴリズムとデータ構造第12週 グラフ構造と最短路問題
2014年12月18日
金岡 晃
授業計画
1
第1週
(9/25)
データ構造とアルゴリズムの基礎
第2週
(10/2)
アルゴリズムの効率、線型構造、スタックと待ち行列
第3週
(10/9)
<演習>アルゴリズムの効率、線型構造、スタックと待ち行列
第4週
(10/16)
文字列照合(KMP法、BM法)+<演習>
第5週
(10/23)
休講
第6週
(10/30)
木の構造、木の走査、二分木、決定木
第7週
(11/13)
<演習>木の構造、木の走査、二分木、決定木
第8週
(11/20)
中間試験
第9週
(11/27)
休講
第10週
(12/4)
グラフ構造と最短路問題+<演習>
第11週
(12/11)
休講
第12週
(12/18)
データ整列:ヒープソート法、クイックソート法+<演習>
第13週
(1/8)
データ探索:ハッシュ法、木構造探索法→休講
第14週
(1/15)
データ探索:ハッシュ法、木構造探索法+<演習>
1/21-2/6 期末試験
2014/12/18 アルゴリズムとデータ構造
課題の解説
2014/12/18 アルゴリズムとデータ構造2
演習(その7)
2014/12/18 アルゴリズムとデータ構造3
BM法による文字列照合BM法による文字列照合
演習:BM法によるλとshiftの導出を行うプログラムを作成してみよう
入力:文字列出力:文字の種類に応じたλ、文字列の長さに応じたshift
前提:アルファベット(文字の種類)は3文字(A、B、C)とする
演習(その8)
2014/12/18 アルゴリズムとデータ構造4
二分木の走査二分木の走査
演習:下記の二分木を先順・中順・後順でそれぞれ走査したときの、節の訪問順序を記載せよ
入力:なし(二分木データはプログラム中に記載してよい)出力:先順、中順、後順
前提:各順での訪問順序 𝐴𝐴
𝐵𝐵 𝐶𝐶
𝐷𝐷 𝐸𝐸 𝐹𝐹 𝐺𝐺
𝐻𝐻 𝐼𝐼 𝐽𝐽
演習(その9)
2014/12/18 アルゴリズムとデータ構造5
偽コインの問題偽コインの問題
演習:8枚のコインから決定木を用いて偽コインを見つけるプログラムを作成し、天秤で比較される順序と結果を記載せよ
入力:偽コインの指定(0~7)出力:3回の天秤の比較において、それぞれに載せられるコインとその結果
第11週データ整列:ヒープソート法、クイックソート法
アルゴリズムとデータ構造
6 2014/12/18 アルゴリズムとデータ構造
本日の到達目標と概要
• 到達目標
– データ整列法の概要と代表的な手法であるヒープソート法、クイックソート法の習得
• 概要
– データ整列法の分類
– 単純選択法
– ヒープソート法
– クイックソート法
7 2014/12/18 アルゴリズムとデータ構造
データの整列
2014/12/18 アルゴリズムとデータ構造8
アルファベット順や大小順など、データを順番にならべる
ソーティング(Sorting)ソーティング(Sorting)
整列法の分類(1)
2014/12/18 アルゴリズムとデータ構造9
選択による方法選択による方法
単純選択法、ヒープ整列法 選択:複数のデータの中から最大あるいは最小のものを選ぶ動作選択:複数のデータの中から最大あるいは最小のものを選ぶ動作
挿入による方法挿入による方法
単純挿入法(シャトル整列法)、シェル法
挿入:すでに整列している複数のデータの並びの適切な位置に、あらたな1枚を追加挿入する操作
挿入:すでに整列している複数のデータの並びの適切な位置に、あらたな1枚を追加挿入する操作
交換による方法交換による方法
単純交換法(バブルソート法)、クイックソート法
交換:注目した2枚の順番が逆になっていたら入れ替える動作交換:注目した2枚の順番が逆になっていたら入れ替える動作
整列法の分類(2)
2014/12/18 アルゴリズムとデータ構造10
併合による方法併合による方法
併合整列法(マージソート法)、多ウェイ併合法
併合:整列している2つのデータの並びを統合して1つにする操作併合:整列している2つのデータの並びを統合して1つにする操作
分配による方法分配による方法
バケット整列法 分配:データの先頭を見て、グループに大まかに仕分ける操作分配:データの先頭を見て、グループに大まかに仕分ける操作
単純選択法
2014/12/18 アルゴリズムとデータ構造11
選択による方法選択による方法
単純選択法、ヒープ整列法 選択:複数のデータの中から最大あるいは最小のものを選ぶ動作選択:複数のデータの中から最大あるいは最小のものを選ぶ動作
整列する対象の𝑛個のデータを𝑎 1 ,⋯ , 𝑎[𝑛]とする
単純選択法単純選択法
入力データを全部調べて、最小のデータ𝑎 𝑝 の位置𝑝を知る。そして先頭𝑎 1と𝑎 𝑝 を入れ替える。この操作を、今度は先頭を除いた配列𝑎 2 ,⋯ , 𝑎[𝑛]に対して行う。これを残りの配列が𝑎[𝑛]だけになるまで繰り返す
ヒープ整列法
2014/12/18 アルゴリズムとデータ構造12
1次元配列データ𝑎 1 ,⋯ , 𝑎[𝑛]は、二分木の物理構造とみなすことができる。
𝑖
2𝑖 2𝑖 + 1
第𝑖要素𝑎 𝑖 の左の子と右の子を、それぞれ𝑎 2𝑖 , 𝑎 2𝑖 + 1 と考えれば、1次元配列と二分木との間を一意に対応づけることができる。
1次元配列を二分木と見なして整列する方法
ヒープ整列法(Heapsort)ヒープ整列法(Heapsort)
ヒープ:親子関係にある任意の2つの節において、子節の値が親節の値を超えないような準完全二分木ヒープ:親子関係にある任意の2つの節において、子節の値が親節の値を超えないような準完全二分木
ヒープでは最大のデータは根に保持される特徴を利用する
ヒープ整列法のアルゴリズム
2014/12/18 アルゴリズムとデータ構造13
ふるい操作(シフト操作)
2014/12/18 アルゴリズムとデータ構造14
ヒープ整列法による処理過程(1)
2014/12/18 アルゴリズムとデータ構造15
ヒープ整列法による処理過程(2)
2014/12/18 アルゴリズムとデータ構造16
演習
2014/12/18 アルゴリズムとデータ構造17
下記の1次元配列を二分木で表したデータをヒープ整列法で処理したときの、処理の過程を図示せよ
30
40 80
10 60 55
1
2 3
4 5 6
整列法の分類(再掲)
2014/12/18 アルゴリズムとデータ構造18
選択による方法選択による方法
単純選択法、ヒープ整列法 選択:複数のデータの中から最大あるいは最小のものを選ぶ動作選択:複数のデータの中から最大あるいは最小のものを選ぶ動作
挿入による方法挿入による方法
単純挿入法(シャトル整列法)、シェル法
挿入:すでに整列している複数のデータの並びの適切な位置に、あらたな1枚を追加挿入する操作
挿入:すでに整列している複数のデータの並びの適切な位置に、あらたな1枚を追加挿入する操作
交換による方法交換による方法
単純交換法(バブルソート法)、クイックソート法
交換:注目した2枚の順番が逆になっていたら入れ替える動作交換:注目した2枚の順番が逆になっていたら入れ替える動作
クイックソート
2014/12/18 アルゴリズムとデータ構造19
基準値となるキーを選択し、基準値より小さい数のデータ集合と基準値より大きい数のデータ集合に分ける。それぞれの集合についても、同じく基準値となるキーを選択し、2つのデータ集合に分ける。要素が1つ以下の集合となった場合、その集合は確定となる。
クイックソート法(Quick Sort)クイックソート法(Quick Sort)
クイックソートのアルゴリズム
2014/12/18 アルゴリズムとデータ構造20
straight-sort(x, y)は単純な方法を使うことを意味している
straight-sort(x, y)は単純な方法を使うことを意味している
演習(その11)
2014/12/18 アルゴリズムとデータ構造21
ヒープソート、クイックソートヒープソート、クイックソート
演習:下記の1次元配列データをヒープソート、クイックソートで処理したときの、処理の過程を出力するプログラムを作成せよ。過程の記述は配列の各値がどう変化していったかのみ記載すれば良いものとする。クイックソートでは、select(k)を、どういう基準で選択したかを明確にプログラム内にコメントとして記載すること。また、straight-sort()を利用する閾値は10ではなく3とする。
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
30 40 80 35 60 70 55 10 20 50
演習(その11):実行イメージ
2014/12/18 アルゴリズムとデータ構造22
> java SortHeap:30, 40, 80, 35, 60, 70, 55, 10, 20, 50
30, 60, 80, 35, 50, 70, 55, 10, 20, 40…
Quick:30, 40, 80, 35, 60, 70, 55, 10, 20, 50
30, 40, 10, 35, 60, 70, 55, 80, 20, 50…
> java SortHeap:30, 40, 80, 35, 60, 70, 55, 10, 20, 50
30, 60, 80, 35, 50, 70, 55, 10, 20, 40…
Quick:30, 40, 80, 35, 60, 70, 55, 10, 20, 50
30, 40, 10, 35, 60, 70, 55, 80, 20, 50…
ここに書いてある値は適当です。自分で解いてみましょう
本日の到達目標と概要
• 到達目標
– グラフの基礎とそのデータ表現、また代表的な問題である最短路問題を知る
• 概要
– グラフの基礎
– グラフのデータ表現
– 最短路問題
– Dijkstraのアルゴリズム
23 2014/12/18 アルゴリズムとデータ構造
締切と提出方法:演習その11
• 締切
– 4週間後(1月14日)の16:10まで
• 提出方法
– 電子メール
• メールアドレス
– メールのタイトルに「アルゴリズムとデータ構造第6回課題」と書いてください
– 作ったプログラムをメールに添付してください。
• 注意事項
– 必ず金岡から受領確認メールを返します。
• 必ず日本語で受領確認メールを返します
• 英語のメールはエラーメール(アドレスが間違っている)の可能性が高いです
– メールで提出がされていないものは未提出とみなします
2014/12/18 アルゴリズムとデータ構造24