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

Microsoft PowerPoint - DA2_2018.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - DA2_2018.pptx"

Copied!
8
0
0

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

全文

(1)

データ構造と

アルゴリズム

IⅠ

第7回 幅優先/深さ優先探索/トポロジカルソート 332

22. 基本的グラフアルゴリズム

333

無向グラフ

• 5個の頂点と7本の辺からなる無向グラフ

• 無向グラフ G=(V,E),Vは頂点集合,Eは辺集

合.Eの要素は頂点のペア{u,v}によって表さ

れる.

{u, v}と{v, u}は同じ辺を意味する.

1

5

2

4

3

334

隣接リスト

• 各頂点に関して,隣接する(直接,辺で結ば

れた)頂点集合をリストで表現

2

5

1

3

4

5

2

4

2

3

5

1

2

4

1

2

3

4

5

335

隣接行列

• 隣接関係を|V|×|V|の行列で表現. A[u][v]=

1/0により 辺{u, v} の存在/非存在を示す.無

向グラフなら行列は対称.

1 2 3 4 5 1 0 1 0 0 1 2 1 0 1 1 1 3 0 1 0 1 0 4 0 1 1 0 1 5 1 1 0 1 0

有向グラフ

• 5個の頂点と8本の辺からなる有向グラフ

• 有向グラフ G=(V,E),Vは頂点集合,Eは辺集

合.

Eの要素は頂点の順序付きペア(u,v) に

よって表される.(u, v)と(v, u)は異なる.(u, u)

なる辺(セルフループ)を許す.

1

5

2

4

3

(2)

隣接リスト

• 各頂点に関して,隣接する(自身からその頂

点に向かう有向辺がある)頂点集合をリスト

で表現

2

5

3

4

3

4

1

4

1

2

3

4

5

338

隣接行列

• 隣接関係を|V|×|V|の行列で表現. A[u][v]=

1/0により 辺 (u, v) の存在/非存在を示す.

対称とは限らない.

1 2 3 4 5 1 0 1 0 0 1 2 0 0 1 1 0 3 0 0 1 1 0 4 1 0 0 0 0 5 0 0 0 1 0 339

幅優先探索(

22.2)

• 幅優先探索 (Breadth-first search, BFS)は最も

単純なグラフ探索アルゴリズムの一つ.

• 始点sが与えられたら,sから到達可能な節点

を系統的に探索する.

• BFSはqueueを用いて実現可能.

• Prim の最小全域木アルゴリズムやDijkstraの

単一始点最短路アルゴリズムはBFSの一種

と考えられる.

340

BFSによる探索

• まだ訪れていない節点の色は白.

• 初めて発見された節点は灰色(図中では緑).

• 近傍がすべて発見されたら黒(図中では赤).

• 灰色になる時に,始点sからの距離と,親とな

る節点を決定

• 有向でも無向でも動く(以下は無向連結グラ

フで説明)

341

BFSによる探索例

∞ ∞ 0 ∞ ∞ ∞ ∞ ∞ r s t u v w x y (a) Q s 1 ∞ 0 1 ∞ ∞ ∞ ∞ r s t u v w x y (b) Q w r 1 ∞ 0 1 2 2 ∞ ∞ r s t u v w x y (c) Q t x r 0 1 1 1 2 2

BFSによる探索例

1 2 0 1 2 2 ∞ ∞ r s t u v w x y (d) Q t x 1 2 0 1 2 2 3 ∞ r s t u v w x y (e) Q x 1 2 0 1 2 2 3 3 r s t u v w x y (f) Q v u v u v y 2 2 2 2 2 3 2 3 3

(3)

BFSによる探索例

1 2 0 1 2 2 3 3 r s t u v w x y (g) Q u y 3 3 1 2 0 1 2 2 3 3 r s t u v w x y (h) Q y 3 1 2 0 1 2 2 3 3 r s t u v w x y (i) Q empty 344

1. for each vertex u∈ G.V-{s} 2. u.color = WHITE 3. u.d = ∞ 4. u.π = NIL 5. s.color = GRAY 6. s.d = 0 7. s.π = NIL 8. Q = empty 9. Enqueue(Q,s) 10. while Q≠empty 11. u = Dequeue(Q) 12. for each v∈ G.Adj[u] 13. if v.color == WHITE 14. v.color = GRAY 15. v.d = u.d + 1 16. v.π = u 17. Enqueue(Q,v) 18. u.color = BLACK

Time Complexity:

O(|E|+|V|)

345

BFSの性質

• 幅優先探索木が構成され,始点からの最短

経路が与えられる.幅優先探索木は複数存

在し得るが,始点からの最短経路は同じ.

1

2

0

1

2

2

3

3

r

s

t

u

v

w

x

y

Breadth-first tree

346

有向/非連結グラフのBFS

• 基本的な動作は同様

• queueが空になっても,まだ未発見の頂点が

残っていれば,その一つを選んで

queueに加

える

347

演習:幅優先探索

• 上のグラフでの幅優先探索木を示せ.

ただし,頂点の選択順/隣接リストはア

ルファベット順とする.

演習:幅優先探索

• 上のグラフでの幅優先探索木を示せ.

ただし,頂点の選択順/隣接リストはア

ルファベット順とする.

(4)

深さ優先探索(22.3)

• 可能ならばグラフの “より深い部分”を探索する. • 未探索の外向辺が残る頂点中で,最後に発見した頂点vか らの未探索の外向辺を探索 • vの辺をすべて探索し終わると,vを発見した時に通った辺を “バックトラック(逆戻り)”し,vの直前の頂点の未探索の外向 辺を探索. • この処理を元の始点から到達可能なすべての頂点を発見す るまで続ける. • 未発見の頂点が残っていれば,そのうち1つを新たな始点と して選択し,そこから探索を続ける. • 有向でも無向でも動く(以下は有向グラフで説明) 350

深さ優先探索アルゴリズム

• 深さ優先探索は各頂点に時刻印をつける. どの頂点vも2つの時刻印をもつ. • 最初の時刻印v.dはvを最初に発見したときにつける. このとき,頂点は灰色に塗られる. 2番目の時刻印v.fは,vの隣接リストを調べ終えたときに記 録する.このとき,頂点は黒色に塗られる. • 時刻印をつけたら,時計の針が進む. 個の頂点それぞれ について発見する事象も終了する事象も一度しか起こらない ので,時刻印は1から2 の範囲の整数となる. • またすべての頂点について次式が成り立つ. . . • 頂点uの色は時刻u.d以前は白,u.dとu.fの間は灰色,それ以 降は黒である. 351

DFSの適用例

1/ (a) u v w x y z 1/ 2/ (b) u v w x y z 1/ 2/ 3/ (c) u v w x y z 1/ 2/ 4/ 3/ (d) u v w x y z 発見時刻 352

DFSの適用例

1/ 2/ 4/ 3/ (e) u v w x y z B 1/ 2/ 4/5 3/ (f) u v w x y z B 1/ 2/ 4/5 3/6 (g) u v w x y z B 1/ 2/7 4/5 3/6 (h) u v w x y z B 353

DFSの適用例

1/ 2/7 4/5 3/6 (i) u v w x y z B F 1/8 2/7 4/5 3/6 (j) u v w x y z B F 1/8 2/7 9/ 4/5 3/6 (k) u v w x y z B F 1/8 2/7 9/ 4/5 3/6 (l) u v w x y z B F C

DFSの適用例

1/8 2/7 9/ 4/5 3/6 10/ (m) u v w x y z B F C 1/8 2/7 9/ 4/5 3/6 10/ (n) u v w x y z B F C B 1/8 2/7 9/ 4/5 3/6 10/11 (o) u v w x y z B F C B 1/8 2/7 9/12 4/5 3/6 10/11 (p) u v w x y z B F C B

(5)

DFSアルゴリズム

DFS(G)

1. for each vertex u∈ G.V 2. do u.color = WHITE

3. u.π = NIL

4. time = 0

5. for each vertex u ∈ G.V 6. if u.color == WHITE

7. DFS-Visit(G,u)

356

DFS-Visit

DFS-Visit(G, u)

1. time = time+1 //u has just been discovered 2. u.d = time

3. u.color = GRAY 4. for each v ∈ G.Adj[u] 5. if v.color == WHITE

6. v.π = u

7. DFS-Visit(G, v)

8. u.color = BLACK //DFS-Visit(G, u) is done 9. time = time + 1 10. u.f = time 357

深さ優先探索の性質

• DFSの実行時間はO(|V|+|E|).

• “木辺”によって深さ優先森を形成.辺の選択

順序が決まれば,これはユニークに決まる.

358

DFS: 辺の種類

• DFSによって,辺がいくつかの種類に分類される:

– 木辺:深さ優先森中の木の辺,新しい(白)頂点

に至る辺.

– 後退辺:木辺以外で,祖先に向かう辺,灰色頂点

から灰色頂点に至る辺.

– 前進辺:木辺以外で,子孫に向かう辺,灰色から

黒に至る辺.

– 横断辺:その他,灰色から黒に至る辺.

• 多くのアルゴリズムでは木辺と後退辺が重要

359

DFSの例

1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f Tree edges

DFSの例

1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f

(6)

DFSの例

1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f

Tree edges Back edges Forward edges

362

DFSの例

1 |12 8 |11 13|16 14|15 5 | 6 3 | 4 2 | 7 9 |10 source vertex d f

Tree edges Back edges Forward edges Cross edges 363

演習:深さ優先探索

• 上のグラフでの深さ優先探索を行った場

合,各枝の種類(木辺,後退辺,前進辺,

横断辺)を示せ.ただし,頂点の選択順/

隣接リストはアルファベット順とする.

364

演習:深さ優先探索

365

Tree edges Back edges Forward edges Cross edges

演習:DFS: 辺の種類

• Gが無向グラフの時,DFSは木辺か後退辺のみを生成するこ とを示せ. u ? v

演習:DFS: 辺の種類

• Gが無向グラフの時,DFSは木辺か後退辺のみを生成するこ とを示せ(定理22.10). • 証明: – 辺(u, v)を考える – 一般性を失うことなしにu.d<v.dを仮定. – v.f<u.fのはず. – uからvに向けて,この辺を発見した なら,この時点vは白であるはず (vが既発見なら,vからuに向けて, すでにこの辺を発見していないといけない) – この場合, 辺は木辺 u ? v

(7)

トポロジカルソート

• 閉路のない有向グラフ(Directed Acyclic Graph, DAG) G=(V,E)のトポロジカルソートとは, Gが辺(u,v)を含んでいれ ばuがvより先に現れるような,全頂点への線形順序を求める こと. • 深さ優先探索を用いるとDAGのトポロジカルソートは簡単に 得られる. • グラフのトポロジカルソートは,水平な直線上に頂点を並べ て,どの有向辺も左から右へ向かうように全頂点を並べるこ とに対応. 368

トポロジカルソート

パンツ ズボン ベルト ワイシャツ ワイシャツ ネクタイ ジャケット 靴下 靴 腕時計 パンツ ズボン ベルト ネクタイ 靴下 靴 腕時計 ジャケット 1/8 2/5 3/4 6/7 11/16 12/15 17/18 13/14 9/10 1/8 6/7 2/5 3/4 9/10 17/18 11/16 12/15 13/14 369

トポロジカルソートのアルゴリズム

TOPOLOGICAL-SORT(G)

1 DFS(G)を呼び出して,各頂点vの終了時刻 v.f を計算 2 終了した頂点を,連結リストの先頭に挿入 3 return 頂点の連結リスト 深さ優先探索がΘ(V+E)時間ででき, 個の頂点を連結リスト の先頭に挿入するのは各々O(1)時間でできるから,トポロジカ ルソートはΘ(V+E)時間で実行できる. 370

演習:トポロジカルソート:

正しさの証明

以下を証明せよ:

有向グラフGが閉路を持たないのは,Gを深さ

優先探索したときに後退辺を生成しないときで

あり,かつそのときに限る.

371

演習:トポロジカルソート:

正しさの証明

以下を証明せよ(補題22.11): 有向グラフGが閉路を持たないのは,Gを深さ優先探索した ときに後退辺を生成しないときであり,かつそのときに限る. (証明) ⇨後退辺(u,v)が生じると仮定すると,深さ優先探索森におい て,vはuの先祖となるので,Gにvからuへの経路があること になるが,これに後退辺(u,v)を加えると閉路になる. ⇦Gが閉路cを含むと仮定する.vをcにおいて最初に発見さ れる頂点とし,(u,v)をcにおいてvに入る辺とする.時刻 v.d で は,vからuに至る白頂点の経路が存在する.よって,uは深さ 優先探索森においてvの子孫になる.したがって,(u,v)は後 退辺である.

トポロジカルソート:正しさの証明

定理22.12 TOPOLOGICAL-SORT(G)は,閉路のない有向グラフGをトポロジカル ソートする. (証明) 与えられた有向グラフGに関してDFSを実行して各頂点の終了時 刻を決定する.任意の異なる頂点u,v∈ の対に対して,Gの中に uからvへ至る辺があれば,v.f < u.fが成り立つことを示せばよい. DFS(G)で調べる任意の辺(u,v)に関して,vは灰色ではない.なぜ なら,そうするとvはuの先祖となり(u,v)は後退辺となるので,これ は補題22.11と矛盾.vが白のとき,uの子孫になるのでv.f < u.f. vが黒のとき同様にv.f < u.f.したがって閉路のない有向グラフの 任意の辺に対してv.f < u.f が成り立つので証明が完成.

(8)

演習:トポロジカルソート

• 以下のグラフのトポロジカルソートを求めよ.

374 パンツ ズボン ベルト ワイシャツ ジャケット 靴下 靴 ネクタイ

演習:トポロジカルソート

パンツ ズボン ベルト ワイシャツ ジャケット 靴下 靴 ネクタイ 11/14 12/13 4/5 3/6 1/10 2/9 15/16 7/8 375

1

2

3

4

5

6

7

8

参照

関連したドキュメント

Classroom 上で PowerPoint をプレビューした状態だと音声は再生されません。一旦、自分の PC

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

ダウンロードしたファイルを 解凍して自動作成ツール (StartPro2018.exe) を起動します。.

NISSEI RED EXHIBITION in Nagano2022”

The device accepts fundamental mode parallel resonant crystal or a single ended (LVCMOS/LVTTL) reference clock as input.. The output signals can be modulated using the spread

・性能評価試験における生活排水の流入パターンでのピーク流入は 250L が 59L/min (お風呂の

Elo 、 Elo (ロゴ)、 Elo Touch 、 Elo Touch Solutions 、および IntelliTouch は、 Elo およびその関連会社の商標です。 Windows は、 Microsoft Corporation

本事業を進める中で、