• 検索結果がありません。

アルゴリズムとデータ構造

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズムとデータ構造"

Copied!
28
0
0

読み込み中.... (全文を見る)

全文

(1)

アルゴリズムとデータ構造

9週 グラフ構造と最短路問題

2013年11月28日 金岡 晃

(2)

授業計画

1

1(9/26)

データ構造とアルゴリズムの基 礎

2(10/3)

アルゴリズムの効率、線形構造 第3

(10/10)

スタックと待ち行列 第4

(10/17)

文字列照合(KMP法、BM法)

5(10/24)

木構造、木の走査

文字列照合(BM法)、木構 造

6(10/31)

木の走査、二分木、決定木7

(11/14)

中間試験

8(11/21)

休講 第9

(11/28)

グラフ構造と最短路問題 第10

(12/5)

解の探索:Aアルゴリズム 第11

(12/12)

データ整列:ヒープソート 法

12(12/19)

データ整列:クイックソー ト法

13(1/9)

データ探索:ハッシュ法 第14

(1/16)

データ探索:木構造探索法 1/22-2/8 期末試験

2013/10/31 アルゴリズムとデータ構造

(3)

中間試験:解答と解説

アルゴリズムとデータ構造

2 2013/10/31 アルゴリズムとデータ構造

(4)

2013/10/31 アルゴリズムとデータ構造

3

<問1

𝑎2 + 𝑏2 = 𝑐2を満たす自然数の組 𝑎, 𝑏, 𝑐 をピタゴラス数という。下記のアルゴリズムは与えらえた 2 つの自然 𝑎, 𝑏 に対し、𝑎2 + 𝑏2 = 𝑐2を満たす𝑐を探すアルゴリズムである。

【アルゴリズム A

1) 𝑥 = 𝑎2 + 𝑏2を計算する

2) 𝑖 = 1, … , 𝑥に対し、以下を行う

() 𝑖2が𝑥と等しいか確認する。等しい場合、𝑖を出力してアルゴリズムを終了する 3) 見つからなかった旨のメッセージを出力し、アルゴリズムを終了する

アルゴリズム Aに対し、以下を答えよ。

<問1-1> アルゴリズムA の計算量をオーダ記法で示せ

<問 1-2> アルゴリズム A より効率の良いアルゴリズムを示せ。その際、どの点がアルゴリズム A と比較し て効率が良いかを書くこと。

<問1-3> 問 1-2 で示したアルゴリズムの計算量をオーダ記法で示せ

1-1

𝑂 𝑥

または

𝑂 𝑎2 + 𝑏2

1-2

: 省略

1-3

: 省略

(5)

2013/10/31 アルゴリズムとデータ構造

4

<問 2

𝑛の階乗𝑛!を求める関数を𝑓 𝑛 とした場合、𝑎2 + 𝑏2 = 𝑐2𝑛 = 1のときは𝑓 𝑛 = 1で与えられる。𝑛 ≥ 2のときの 𝑓 𝑛 を再帰的手続きを利用して表せ

2

𝑓 𝑛 = 𝑛 × 𝑓 𝑛 − 1

(6)

2013/10/31 アルゴリズムとデータ構造

5

<問 3

文字列照合のアルゴリズム KMP 法において、文字(アルファベット)が{A, B, C, D} である場合、パターン

ABCABCAB に対するfailを導出せよ。ただし、解答には求めた failだけではなく、導出過程も記載すること。

3

fail = {0,1,1,0,1,1,0,1}

(7)

2013/10/31 アルゴリズムとデータ構造

6

<問 4

12枚のコインがあり、そのうち 1枚だけが偽物である。偽物は外見は違わないが、重さが異なっているので区別 できる。ただし、偽物が本物より重いのか軽いのか不明である。ここで、天秤を 3 回だけ用いて、どのコインが偽 物でかつそれは本物より重いのか軽いのかを知るにはどうすれば良いか、答えよ。

ポイント

アルゴリズム(手続き)を意識して書くと良い

パターンすべてが網羅されているか確認すると良い

(8)

2013/10/31 アルゴリズムとデータ構造

7

𝑎 + 𝑏 + 𝑐 + 𝑑: 𝑒 + 𝑓 + 𝑔 + ℎ

𝑎 + 𝑏 + 𝑒: 𝑐 + 𝑓 + 𝑥

𝑎 ∶ 𝑏 𝑔 ∶ ℎ 𝑐 ∶ 𝑥

𝑖 + 𝑗 ∶ 𝑘 + 𝑥

𝑖: 𝑗 𝑖: 𝑗

> = <

>

=

< > <

𝑎 + 𝑏 + 𝑒: 𝑐 + 𝑓 + 𝑥

𝑒 ∶ 𝑥 𝑔 ∶ ℎ 𝑎 ∶ 𝑏

>

= <

𝛼: 𝛽 を左に𝛼、右に𝛽を載せて天秤で量る動作を表すものとする。

𝛼 + 𝛽: 𝛾

𝑙: 𝑥

=

での𝛼 + 𝛽は、右に𝛼𝛽を載せていることを表すものとする。

天秤で量った結果をそれぞれ“>”, “=”, “<”で表し、「左が重い」「釣り合う」「右が重い」

を示すものとする。

12枚のコインを𝑎, 𝑏, 𝑐, 𝑑, 𝑒, 𝑓, 𝑔, ℎ, 𝑖, 𝑗, 𝑘, 𝑙とそれぞれ呼ぶこととし、量った結果に従い次の天秤 での計量を行うことを矢印で表すと、以下の図により3回の計量で偽物の判別と重い・軽いの 判断が可能である。

(9)

9

グラフ構造と最短路問題

アルゴリズムとデータ構造

8 2013/10/31 アルゴリズムとデータ構造

(10)

本日の到達目標と概要

到達目標

グラフの基礎とそのデータ表現、また代表的な問題である最短 路問題を知る

概要

グラフの基礎

グラフのデータ表現

最短路問題

– Dijkstra

のアルゴリズム

9 2013/10/31 アルゴリズムとデータ構造

(11)

グラフの定義(1)

グラフ(

Graph

頂点(

Vertex

)の有限集合

V

と辺(

Edge, Arc

)の有限集合

E

により定 義

節(

Note

)、枝(

Branch

)とも

グラフの図表現

集合表現

2013/10/31 アルゴリズムとデータ構造

10

(12)

グラフの定義

2013/10/31 アルゴリズムとデータ構造

11

グラフ(Graph

頂点(Vertex)の有限集合𝑉と辺(Edge, Arc)の有限集合𝐸によって定義され る。

𝐺 = 𝑉, 𝐸

頂点、辺はそれぞれ節(Node)、枝(Branch)とも呼ばれる。

グラフの図表現

:頂点

:辺

𝑎 𝑏

𝑐 𝑑

𝑎 𝑏

𝑐 𝑑

𝐺1 = 𝑉1, 𝐸1 𝑉1 = 𝑎, 𝑏, 𝑐, 𝑑

𝐸1 = 𝑎, 𝑏 , 𝑎, 𝑐 , 𝑏, 𝑐 , 𝑏, 𝑑 , 𝑐, 𝑑

𝐺2 = 𝑉2, 𝐸2 𝑉2 = 𝑎, 𝑏, 𝑐, 𝑑

𝐸2 = 𝑎, 𝑏 , 𝑎, 𝑐 , 𝑐, 𝑎 , 𝑐, 𝑏 , 𝑏, 𝑑 , 𝑐, 𝑑 無向

グラフ𝐺1

有向 グラフ𝐺2

(13)

グラフの用語(1)

2013/10/31 アルゴリズムとデータ構造

12

有向グラフ(Directed Graph

無向グラフ(Undirected Graph

辺が向きを持つグラフ(例:スライド11の𝐺2

辺が向きを持たないグラフ(例:スライド11の𝐺1) 隣接(Adjacent

あるグラフ𝐺 = 𝑉, 𝐸𝑒 = 𝑢, 𝑣𝑒 ∈ 𝐸のとき、頂点𝑢𝑣は互いに隣接して いる、と言う

有向グラフの場合、あるグラフ𝐺 = 𝑉, 𝐸𝑒 = 𝑢, 𝑣𝑒 ∈ 𝐸のとき、頂点𝑢𝑣に隣接すると言い、頂点𝑣𝑢から隣接すると言う。

始点と終点

あるグラフ𝐺 = 𝑉, 𝐸𝑒 = 𝑢, 𝑣𝑒 ∈ 𝐸のとき、頂点𝑢を辺𝑒の始点、𝑣を辺𝑒 の終点と言う

(14)

グラフの用語(2)

2013/10/31 アルゴリズムとデータ構造

13

次数(Degree

無向グラフにおいて、ある頂点に接続している辺の個数

有向グラフの場合は、ある頂点について、それを始点とする辺の個数をそ の頂点の出次数(Out-degree)、それを終点とする辺の個数をその頂点の 入次数(In-degree)という。

孤立(Isolated

次数0の頂点を孤立しているという 完全グラフ(Complete Graph

どの2頂点をとってもそれらが隣接しているようなグラフ。

頂点の個数 𝑉𝑛の完全グラフを𝐾𝑛と書く 部分グラフ(Subgraph

𝐺 = 𝑉, 𝐸 があって、 𝑉 ⊆ 𝑉かつ𝐸 ⊆ 𝐸のとき 𝐺′𝐺の部分グラフという

(15)

グラフの用語(3)

2013/10/31 アルゴリズムとデータ構造

14

誘導(生成)部分グラフ(Induced Subgraph

グラフ𝐺 = 𝑉, 𝐸 に対して、 𝑉の部分集合𝑉′を考える。このとき、 𝐸 = 𝑢, 𝑣 ∈ 𝐸 | 𝑢, 𝑣 ∈ 𝑉′ を用いて作られる部分グラフ𝐺 = 𝑉, 𝐸 を、グラフ𝐺 の誘導(生成)部分グラフという

クリーク(Clique

グラフ𝐺の部分グラフで、しかも完全グラフであるものと𝐺のクリークと言 う。

𝐺のクリークのうち最も多くの頂点を含むものを最大クリークと言う。

(16)

グラフの用語(4)

2013/10/31 アルゴリズムとデータ構造

15

道(Path、路)

頂点列𝑃 = 𝑣0, 𝑣1, ⋯ , 𝑣𝑘𝑣𝑖, 𝑣𝑖+1 ∈ 𝐸 𝑖 = 0, ⋯ , 𝑘 − 1 がなりたつもの 単純(Simple

𝑃に現れる頂点がすべて異なるとき、𝑃は単純であるという 閉路(CycleCircuit

𝑣0 = 𝑣𝑘のとき、𝑃を閉路という ループ(Self-loop

長さ1の閉路

到達可能(Reachable

2頂点間を結ぶ道が存在するとき、到達可能であるという

(17)

グラフの用語(5)

2013/10/31 アルゴリズムとデータ構造

16

最短路(Shortest Path

到達可能な2頂点間を結ぶ長さ最小のものを最短路という 距離(Distance

到達可能な2頂点間の最短路の長さを距離という。

到達可能でない2頂点の距離は無限大と定義する。

有向路(Directed Path

有向グラフのとき、 𝑣𝑖, 𝑣𝑖+1 ∈ 𝐸 𝑖 = 0, ⋯ , 𝑘 − 1 を満たすような頂点列 𝑃 = 𝑣0, 𝑣1, ⋯ , 𝑣𝑘があるとき、𝑃を頂点𝑣0から𝑣𝑘へ至る有向路といい、𝑣_0か ら𝑣_𝑘へ到達可能という

(18)

演習

1

:グラフの描画

2013/10/31 アルゴリズムとデータ構造

17

𝐾6を描画せよ

(19)

演習

2

:部分グラフ

2013/10/31 アルゴリズムとデータ構造

18

下のグラフに対し、 𝑉 = 𝑎, 𝑏, 𝑒 をつかった誘導グラフ を図示と集合の双方で示せ

𝑎 𝑏

𝑐 𝑑

𝑒

𝑓

𝑔

(20)

グラフの物理表現:順配置表現

2013/10/31 アルゴリズムとデータ構造

19

𝐴1 =

0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0

𝐴2 =

0 1 1 0 0 0 0 1 1 1 0 1 0 0 0 0 隣接行列(Adjacency Matrix

行列𝐴の各行と各列を頂点に対応させ、行列の要素𝐴 𝑖, 𝑗 が、

無向グラフの場合 𝑖, 𝑗 ∈ 𝐸あるいは 𝑗, 𝑖 ∈ 𝐸ならば1、そうでないなら0と なっている行列。

有向グラフの場合 𝑖, 𝑗 ∈ 𝐸ならば1、そうでないなら0となっている行列。

𝑎 𝑏

𝑐 𝑑

𝑎 𝑏

𝑐 𝑑

無向 グラフ𝐺1

有向 グラフ𝐺2

隣接行列

隣接行列

(21)

グラフの物理表現:リンク配置表現(1)

2013/10/31 アルゴリズムとデータ構造

20

直交リスト

𝐴2 =

0 1 1 0

0 0 0 1

1 1 0 1

0 0 0 0

𝑎 𝑏

𝑐 𝑑

有向 グラフ𝐺2

最も左の1列と最も上の1行 はそれぞれ始点、終点とし ての頂点を表したレコード

それ以外のレコードは辺を 表す

(22)

グラフの物理表現:リンク配置表現(2)

2013/10/31 アルゴリズムとデータ構造

21

隣接リスト

𝑎 𝑏

𝑐 𝑑

𝑎 𝑏

𝑐 𝑑

無向 グラフ𝐺1

有向 グラフ𝐺2

最も左のレコード群が頂点を表 し、その頂点が隣接する頂点を リストとして持っている

(23)

グラフのアルゴリズム:最短路問題

2013/10/31 アルゴリズムとデータ構造

22

重み付グラフ(Weighted Graph

辺に距離などのコストが付いたグラフ

𝑆 𝐷

𝐴 𝐵

𝐻 𝐼

𝐸 𝐽

𝐶 𝐹 𝐾 𝐺

4

3

1

1

2

2 2

1 1

2

3

1 3

𝑆 からスタートして 𝐺 に至る道で、

コストの総和が最小になる道を見 つけるにはどうしたらよいか

最短路問題

(24)

Dijkstra

のアルゴリズム

2013/10/31 アルゴリズムとデータ構造

23

開始点からの集積コス トの増加が最も少ない 頂点を最優先する、と いう原則に従い、新た な頂点を1つずつ取り 込んでいく手法。

グラフと始点とが与え られると、他の頂点ま での最短経路とコスト が求められる

(25)

Dijkstra

アルゴリズムを用いた事例

2013/10/31 アルゴリズムとデータ構造

24

𝑆 𝐷

𝐴 𝐵

𝐻 𝐼

𝐸 𝐽

𝐶 𝐹 𝐾 𝐺

4 3

1

1 2

2 2

1 1 2

3 1 3

𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹, 𝐺, 𝐻, 𝐼, 𝐽,𝐾,𝑆}

(26)

Floyd

のアルゴリズム

2013/10/31 アルゴリズムとデータ構造

25

グラフが与えられると、

2頂点間の最短経路と コストが求められる

(27)

演習

3

2013/10/31 アルゴリズムとデータ構造

26

下のグラフに対し、Floydのアルゴリズムを適用した場合、

最終的に出力される配列costの情報を示せ

𝑆 𝐷

𝐴 𝐵 𝐸

𝐶

4 3

1

1 2 2

𝑉 = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝑆}

S A B C D E

S 0 3 4

A 3 0 1 1

B 1 0 2

C 1 0

D 4 0 2

E 2 2 0

配列costの初期状態

(28)

本日の到達目標と概要

到達目標

グラフの基礎とそのデータ表現、また代表的な問題である最短 路問題を知る

概要

グラフの基礎

グラフのデータ表現

最短路問題

– Dijkstra

のアルゴリズム

27 2013/10/31 アルゴリズムとデータ構造

参照

関連したドキュメント

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

共通点が多い 2 。そのようなことを考えあわせ ると、リードの因果論は結局、・ヒュームの因果

ら。 自信がついたのと、新しい発見があった 空欄 あんまり… 近いから。

その太陽黒点の数が 2008 年〜 2009 年にかけて観察されな

大村 その場合に、なぜ成り立たなくなったのか ということ、つまりあの図式でいうと基本的には S1 という 場