グラフとネットワーク 5coconut.sys.eng.shizuoka.ac.jp/gnB/05/slides5.pdfa4 a5 a6 a7 a8 a9...

Post on 02-Jun-2020

2 views 0 download

Transcript of グラフとネットワーク 5coconut.sys.eng.shizuoka.ac.jp/gnB/05/slides5.pdfa4 a5 a6 a7 a8 a9...

グラフとネットワーク (第5回)安藤和敏

ando@sys.eng.shizuoka.ac.jp

静岡大学工学部

グラフとネットワーク (第 5 回) – p.1/54

グラフ探索

グラフとネットワーク (第 5 回) – p.2/54

グラフ探索

ある点から出発して,グラフの中を枝の向きに進みながら,可能な限り探索する方法

グラフとネットワーク (第 5 回) – p.2/54

グラフ探索

ある点から出発して,グラフの中を枝の向きに進みながら,可能な限り探索する方法

深さ優先探索 (DFS)

グラフとネットワーク (第 5 回) – p.2/54

グラフ探索

ある点から出発して,グラフの中を枝の向きに進みながら,可能な限り探索する方法

深さ優先探索 (DFS)

幅優先探索 (BFS)

グラフとネットワーク (第 5 回) – p.2/54

スタックとキュー

グラフとネットワーク (第 5 回) – p.3/54

スタックとキュー

DFSにはスタックと呼ばれるデータ構造が, BFSにはキューと呼ばれるデータ構造が用いられる.

グラフとネットワーク (第 5 回) – p.3/54

スタック (stack)

グラフとネットワーク (第 5 回) – p.4/54

スタック (stack)

a

b

c

(a)

グラフとネットワーク (第 5 回) – p.4/54

スタック (stack)

a

b

c

(a)

先に入ったもの (first-in)が後に出る (last-out)

グラフとネットワーク (第 5 回) – p.4/54

スタック (stack)

a

b

c

(a)

先に入ったもの (first-in)が後に出る (last-out)

平積みにされた本と同じ

グラフとネットワーク (第 5 回) – p.4/54

キュー (queue)

グラフとネットワーク (第 5 回) – p.5/54

キュー (queue)

a b c

(b)

グラフとネットワーク (第 5 回) – p.5/54

キュー (queue)

a b c

(b)

先に入ったもの (first-in)が先に出る(first-out)

グラフとネットワーク (第 5 回) – p.5/54

キュー (queue)

a b c

(b)

先に入ったもの (first-in)が先に出る(first-out)

銀行などの窓口と同じ

グラフとネットワーク (第 5 回) – p.5/54

キュー (queue)

a b c

(b)

先に入ったもの (first-in)が先に出る(first-out)

銀行などの窓口と同じ

待ち行列とも呼ばれる

グラフとネットワーク (第 5 回) – p.5/54

深さ優先探索 (DFS)

グラフとネットワーク (第 5 回) – p.6/54

DFS 1~5

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=0

0

0 0

0

0

グラフとネットワーク (第 5 回) – p.7/54

DFS 6~9

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=1

1

0 0

0

0

v1

グラフとネットワーク (第 5 回) – p.8/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

0 0

2

0

v1

a=

v=

w=

v1

a1

v4

2v4

グラフとネットワーク (第 5 回) – p.9/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

0 3

2

0

v1

a=

v=

w=

v4

a8

v3

3v4v3

グラフとネットワーク (第 5 回) – p.10/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

0

v1

a=

v=

w=

v3

a7

v2

4v4v3v2

グラフとネットワーク (第 5 回) – p.11/54

DFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

0

v1

a=

v=

w=

4v4v3v2

v2

グラフとネットワーク (第 5 回) – p.12/54

DFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

0

v1

a=

v=

w=

4v4v3

グラフとネットワーク (第 5 回) – p.13/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

v3

a9

v5

5v4v3v5

グラフとネットワーク (第 5 回) – p.14/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

v5

a4

v1

5v4v3v5

グラフとネットワーク (第 5 回) – p.15/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

v5

a5

v4

5v4v3v5

グラフとネットワーク (第 5 回) – p.16/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

v5

5v4v3v5

a6

v2

グラフとネットワーク (第 5 回) – p.17/54

DFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5v4v3v5

v5

グラフとネットワーク (第 5 回) – p.18/54

DFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5v4v3

グラフとネットワーク (第 5 回) – p.19/54

DFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5v4v3

v3

グラフとネットワーク (第 5 回) – p.20/54

DFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5v4

グラフとネットワーク (第 5 回) – p.21/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5v4

v4

a10

v4

グラフとネットワーク (第 5 回) – p.22/54

DFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5v4

v4

グラフとネットワーク (第 5 回) – p.23/54

DFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5

グラフとネットワーク (第 5 回) – p.24/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5

v1

a2

v2

グラフとネットワーク (第 5 回) – p.25/54

DFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5

v1

a3

v2

グラフとネットワーク (第 5 回) – p.26/54

DFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

v1

a=

v=

w=

5

v1

グラフとネットワーク (第 5 回) – p.27/54

DFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

S

i=

1

4 3

2

5

a=

v=

w=

5

グラフとネットワーク (第 5 回) – p.28/54

幅優先探索 (BFS)

グラフとネットワーク (第 5 回) – p.29/54

BFS 1~6

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=0

0

0 0

0

0

グラフとネットワーク (第 5 回) – p.30/54

BFS 7~9

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=1

1

0 0

0

0

v1

グラフとネットワーク (第 5 回) – p.31/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=2

1

0 0

2

0

v1

a= a1

w= v4

v4

v= v1

グラフとネットワーク (第 5 回) – p.32/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=3

1

3 0

2

0

v1

a=w= v2

v4

v= v1

a2

v2

グラフとネットワーク (第 5 回) – p.33/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=3

1

3 0

2

0

v1

a=w= v2

v4

v= v1

a3

v2

グラフとネットワーク (第 5 回) – p.34/54

BFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=3

1

3 0

2

0

v1

a=w=

v4

v= v1

v2

グラフとネットワーク (第 5 回) – p.35/54

BFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

1

3 0

2

0

v4 v2

i=3

a=w=

v=

グラフとネットワーク (第 5 回) – p.36/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w= v3

v4

v= v4

a8

v2 v3

グラフとネットワーク (第 5 回) – p.37/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w= v4

v4

v= v4

a10

v2 v3

グラフとネットワーク (第 5 回) – p.38/54

BFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w=

v4

v= v4

v2 v3

グラフとネットワーク (第 5 回) – p.39/54

BFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w=

v=

v2 v3

グラフとネットワーク (第 5 回) – p.40/54

BFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w=

v=

v2 v3

v2

グラフとネットワーク (第 5 回) – p.41/54

BFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w=

v=

v3

グラフとネットワーク (第 5 回) – p.42/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=4

1

3 4

2

0

a=w= v2

v= v3

a7

v3

グラフとネットワーク (第 5 回) – p.43/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w= v5

v= v3

a9

v3 v5

5

グラフとネットワーク (第 5 回) – p.44/54

BFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w=

v= v3

v3 v5

5

グラフとネットワーク (第 5 回) – p.45/54

BFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w=

v=

v5

5

グラフとネットワーク (第 5 回) – p.46/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w=

v= v5

v5

5

a4

v1

グラフとネットワーク (第 5 回) – p.47/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w=

v= v5

v5

5

a5

v4

グラフとネットワーク (第 5 回) – p.48/54

BFS 10~22

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w=

v= v5

v5

5

a6

v2

グラフとネットワーク (第 5 回) – p.49/54

BFS 10~11

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=5

1

3 4

2

5

a=w=

v= v5

v5

グラフとネットワーク (第 5 回) – p.50/54

BFS 12

a1

a2 a3

a4 a5

a6

a7

a8

a9

a10v1

v2 v3

v4

v5

Q

i=

1

3 4

2

5

a=w=

v=

グラフとネットワーク (第 5 回) – p.51/54

深さ優先探索のちょっとした応用

図のような迷路が与えられたときに,入口と出口への道を見付けるために深さ優先探索を用いることができる.

(a)

グラフとネットワーク (第 5 回) – p.52/54

深さ優先探索のちょっとした応用

そのために,与えられた迷路から以下のようにグラフ (の幾何学的表現)を構成する.

グラフとネットワーク (第 5 回) – p.53/54

深さ優先探索のちょっとした応用

そのために,与えられた迷路から以下のようにグラフ (の幾何学的表現)を構成する.

(1)入口と出口に点を書く.

グラフとネットワーク (第 5 回) – p.53/54

深さ優先探索のちょっとした応用

そのために,与えられた迷路から以下のようにグラフ (の幾何学的表現)を構成する.

(2)迷路の中で道が二つ以上に分かれる分岐点に点を書く.

グラフとネットワーク (第 5 回) – p.53/54

深さ優先探索のちょっとした応用

そのために,与えられた迷路から以下のようにグラフ (の幾何学的表現)を構成する.

(3)迷路の中で行き止まりになっている地点に点を書く.

(b) グラフとネットワーク (第 5 回) – p.53/54

深さ優先探索のちょっとした応用

そのために,与えられた迷路から以下のようにグラフ (の幾何学的表現)を構成する.

(4)迷路の中の道に添って, (1)∼(3)で書いた点どうしを結ぶ.

グラフとネットワーク (第 5 回) – p.53/54

深さ優先探索のちょっとした応用

実際には,迷路が与えられたときにそのグラフ表現を書かなくても,迷路の深さ優先探索がどのようになるかは想像できるであろう.

グラフとネットワーク (第 5 回) – p.54/54