Transcript Document

CHAPTER
그래프
6
6. 그래프(Graph)
그래프의 개요
 Koenigsberg(퀘닉스버그) 다리 문제를 해결하기 위해
Euler(오일러)가 처음 사용-7개의 다리를 한번씩만 지나서 원래
위치로 되돌아오는 방법
 최단거리, 연구계획 분석, 전기회로 분석 등
C
C
c
d
g
g
c
A
Kneiphof
a
b
B
D
e
f
d
e
A
a
D
b
f
B
2
6.1 그래프의 정의
 그래프 G는 공집합이 아닌 정점(Vertex)들의 유한집합과 공집합도 허용되는
간선(Edge)들의 유한집합으로 구성
 G = ( V, E )
 V(G) : 공집합이 아닌 정점(vertex)들의 유한집합
 E(G) : 간선(edge)들의 집합
1) 방향그래프(digraph, directed graph)
 각 간선은 방향성을 가진 정점들의 쌍으로 표현
 간선의 표기
 <v1, v2>
 v1 : tail,
v2 : head
2) 무방향그래프
 정점의 쌍에 순서는 의미가 없다.
 (undirected graph)에서의 간선의 표기
 (v1, v2)
3
6.1 그래프의 정의(계속)
2
1
1
1
3
4
2
4
G1
3
5
6
G2
2
7
3
G3
 V(G1) = { 1, 2, 3, 4}
E(G1) = {(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)}
 V(G2) = { 1, 2, 3, 4, 5, 6, 7}
E(G2) = {(1,2), (1,3), (2,4), (2,5), (3,6), (3,7)}
 V(G3) = {1, 2, 3}
E(G3) = {<1,2>, <2,1>, <2,3>}
4
그래프의 용어
 인접(adjacent)
간선(v1, v2)가 E(G)에 있는 간선이면, v1과 v2는 인접한 것이다.
 부속,교차(incident)
v1과 v2가 인접하였을때 간선 (v1, v2)는 정점 v1과 v2에 부속된 것이다.
 경로(path)
임의 정점에서 다른 정점에 이르는 길
 단순 경로(simple path)
한 경로상에 있는 모든 정점들이 서로 다른 경로
 사이클(cycle)
처음과 마지막 정점이 같은 단순경로 (A→B→C→A)
 연결(connected)
무방향그래프 G에서 정점 v1에서 부터 v2에 이르는 경로가 존재하면
v1과 v2는 연결되었다.
5
그래프의 용어(계속)
 연결그래프(connected graph)
임의의 vi, vj 에 대해 경로가 있음
 단절그래프(disconnected graph)
 연결요소(connected component)
최대 연결 서브그래프(Maximal Connected Subgraph)
 트리(tree) : 사이클이 없는 연결 그래프
 강력연결 그래프(strongly connected graph)
방향그래프 G에서 V(G)에 속한 상이한 두 정점 vi, vj 의 모든 쌍에
대하여 vi에서 vj로, 또한 vj에서 vi로 방향 경로가 존재하는 그래프
1
2
5
3
4
6
1
1
7
8
2
2
3
6
그래프의 용어(계속)
 차수
정점에 부속된 간선들의 수
 진입차수(in-degree)
방향그래프 G에서 임의 정점 v가 머리(head)가 되는 간선들의 수
 진출차수(out-degree)
방향그래프 G에서 임의 정점 v가 꼬리(tail)가 되는 간선들의 수
 다중그래프(multi-graph)
두 정점 사이에 두개 이상의 간선이 존재하는 그래프
 완전그래프(complete graph)
n개의 정점으로 구성된 무방향 그래프에서 간선 수가 최대인 그래프
최대 간선수 : n(n - 1)/2
1
1
2
3
4
2
3
4
7
그래프의 용어(계속)
 부그래프(subgraph)
V(G’) V(G)이고, E(G’)  E(G)인 그래프 G’를 그래프 G의 부그래프
1
1
2
1
3
2
3
4
 방향 비사이클 그래프(DAG : directed acyclic graph)
사이클이 없는 방향 그래프
8
6.2 그래프 표현법 인접행렬
2차원 배열을 만들어서 간선이 존재하는 부분을 '1'로 저장하여 그래프를
표현하는 방법
 정점 수만큼의 행과 열로 구성된 정방 행렬
 무방향그래프에서 정점 i의 차수는 그 행의 합이다.
 방향그래프에서 정점 i의
진출차수는 그 열의 합
집입차수는 그 행의 합
A B C
A B C D
A B C
A B C D
9
6.2 그래프의 표현 인접리스트
 그래프의 각 정점에 대해 한 개의 연결 리스트가 존재.
 정점이 n개이고 간선이 e개이면, n개의 'head node'와
(2 * e)개의 리스트 노드가 필요.
 진출차수(out-degree) : 인접리스트의 노드의 수
 진입차수(in-degree) : 역인접리스트의 노드의 수
10
6.2 그래프의 표현
 역인접리스트 : 방향그래프에서 각 정점에 대해 그 정점으로 들어오는
연결선과 인접한 정점들로 구성된 리스트
 리스트 노드구조로 변환
11
6.2 그래프의 표현 인접 다중리스트
 여러 리스트들이 노드 공유
 무방향 인접리스트 표현에서 간선(vi, vj)는 2개의 항으로 표현
 vi와 vj에 대한 리스트
M : 간선 조사 여부에 대한 마크 필드
12
6.3 그래프 연산
(1) 그래프 탐색/순회
① 깊이 우선 탐색 ( Depth First Search )
 알고리즘
13
6.3 그래프 연산 DFS
 인접리스트에서의 DFS => V0, V1, V3, V7, V4, V5, V2, V6,
 깊이 우선 탐색의 실행결과 깊이 우선 스패닝 트리(Spanning Tree)가 만들어진다.
14
6.3 그래프 연산 DFS
15
6.3 그래프 연산
(1) 그래프 탐색/순회
② 너비우선 탐색 ( Breadth First Search )
 알고리즘
16
6.3 그래프 연산 BFS
 인접리스트에서의 BFS => V0, V1, V2, V3, V4, V5, V6, V7
 너비 우선 탐색의 실행결과 너비 우선 스패닝 트리(Spanning Tree)가 만들어진다.
17
6.3 그래프 연산 BFS
18
그래프 용어
 스패닝 트리(Spanning Tree) : 그래프 G의 간선들로만 구성되고 G의
모든 정점들을 포함한 트리
 Articulation Point : 그래프 G의 정점들 중에서 그 정점을 부속된
간선들과 같이 삭제하면 최소한 두 개의 연결 컴포넌트를 갖는 그래프
G'를 생성하는 정점 v
 다음 그래프에서 1과 3이 articulation point 이다
 Articulation point를 갖지 않는 연결 그래프를 biconnected graph라고
한다.
19
6.4 최소 스패닝 트리(Minimum Spanning Tree)
 Spanning Tree
 모든 정점들을 사이클없이 최소한의 연결선으로 구성된 그래프
 T에 있는 간선들과 G의 모든 정점들로 구성된 트리
T : 탐색중에 순회된 간선들의 집합
B : 나머지 간선들의 집합
T에 있는 간선들은 G의 모든 정점을 포함하는 트리를 형성
Spannin
g tree
20
6.4 최소 스패닝 트리(Minimum Spanning Tree)
 Minimum Cost Spanning Tree
가중치가 부여된 그래프에서 최소비용(혹은 최대이익)을 나타낼 수
있도록 구성된 신장트리
1) Kruskal 알고리즘
E = edge집합
MST = { }
while( ((n-1)개 edge가 포함) && (Edge집합 != NULL) )
ⅰ) 최저비용 edge (u, v) 선택, Edge집합에서 (u, v)제거
ⅱ) if( (u, v)가 기존 MST에 cycle을 형성하지 않음 )
then (u, v)을 MST에 추가
then (u, v)을 버림
if(MST가 (n-1)개 edge를 포함하지 않음)
then "No Spanning Tree"
21
6.4 최소 스패닝 트리(Minimum Spanning Tree)
Kruskal 알고리즘으로 최소 스패닝 트리를 구현
22
6.4 최소 스패닝 트리(Minimum Spanning Tree)
2) Prim 알고리즘
G=(V, E)
A : set of chosen edges
S : subset of nodes which are in the connected component
알고리즘
1. (u, v) : shortest edge
A={(u, v)}
S={u, v}
2. while |S|<|V| do
1) (x, y) 선택
ⅰ) x∈S
ⅱ) y∈V-S
ⅲ) shortest edge && (ⅰ), (ⅱ)만족
2) A=A∪{(x, y)}
S=S∪{y}
23
6.4 최소 스패닝 트리(Minimum Spanning Tree)
Prim알고리즘으로 최소 스패닝 트리를 구현
24
6.5 최단경로(Shortest Path)
(1) 하나의 출발점으로부터의 최단 경로
정점 v0 에서 정점 v1 에 도달하는 가장 짧은 경로는?
(v0 v2 v3 v1)=45
인접행렬
25
6.5 최단경로(Shortest Path)
 최단 경로 알고리즘
G=(V, E)
C(Vi , Vj ) : edge cost from Vi to Vj
d(Vi ) : the cost of the shortest path from V0 to Vi
S={V0 } /* 최단 경로에 포함된 vertex */
d(V0 ) = 0
for[each v ∈ v - {V0 }] do d(v)=c(V0, v )
while S≠V do
choose a vertex w∈V-S ∃ d(w) is a minimum;
S=S∪{w}
for each v∈V-S do d(v)=min{d(v), d(w)+c(w, v)}
26
6.5 최단경로(Shortest Path)
(2) 모든 쌍의 최단 경로
정점 i에서 정점 j로의 최단 경로를 구하는 알고리즘
Find the shortest path from node i to node j
Give G=(V, E) : a graph that has no cycle with negative edge cost (G
may have a cycle with positive edge cost)
Cij : the edge cost from node i to node j
Aij : the path cost from node i to node j
Aij k : the cost of a shortest path from to
where the path only uses {1, 2, …, k} as intermediate nodes
Aij k = Cij
Aij k = min{Aij k-1 , Aik k-1 + Akj k-1 }, for k=1, 2, …, n
27
6.5 최단경로(Shortest Path)
(2) 모든 쌍의 최단 경로
정점 i에서 정점 j로 가는 최단 경로를 구하는 과정
28
6.6 작업 네트워트(Activity Network)
 AOV(Activity On Vertex) 네트워크
정점이 작업을 나타내고 간선이 작업사이의 선행관계를 나타내는
방향그래프
29
6.6 작업 네트워트(Activity Network)
 AOE(Activity On Edge) 네트워크
간선은 수행되어야 할 작업과 시간을 나타내고, 정점은 작업의
완료를 알리는 사건을 나타내고, 각 사건은 그에게 들어오는 모든
작업이 완료될때 일어난다.
임계경로(Critical Path) : AOE 네트워크로부터 프로젝트를 완료하는데 걸리는
시간, 즉 시작에서 종료까지의 최장거리
30
6.6 작업 네트워트(Activity Network)
 임계경로(Critical path)
작업 공정 그래프의 경우 한 작업의 공정이 다른 작업에 직접적인
영향을 주게 될 때, 주로 작업에 직접적으로 영향을 주는 경로
작업을 완료하는 최소시간인 가장 긴 경로
v5까지 임계경로 : v1 v2 v5
v8까지 임계경로 : v1 v2 v5 v8
v9까지 임계경로 : v1 v2 v5 v7 v9 혹은 v1 v2 v5 v8 v9
a1=6
v1
v2
a2=4
a7=9
a4=1
a5=1
a8=7
v3
a6=2
a10=2
a11=4
v9
v8
a3=5
v4
v5
v7
v6
a9=4
<작업공정에 대한 AOE network 에 대한 임계경로>
31
임계작업(critical path) 구하는 방법
 Earlist time : 사건 vi 가 일어날 가장 이른 시간
v0 에서 vi 까지 최장 거리
모든 ai 에 대하여 earlist time 구함
 latest time: 작업 a 에 대하여 프로젝트의 완료를 지연시키지
않고 가장 늦게 작업을 시작할 수 있는 시간
 earlist time = latest time 이면 임계작업
32
33