10장. 그래프 알고리즘.

Slides:



Advertisements
Similar presentations
1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
Advertisements

언어의 자서전 소단원 (1) 단원. 언어의 특성 기호성 자의성 사회성 규칙성 창조성 역사성.
그래프.
Maximum Flow.
Shortest Path Algorithm
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
2017 법인관련 개정세법 곽장미 세무사.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
제 6 장 그래프 6.1 그래프의 정의 6.2 용어 및 표현법 6.3 그래프의 표현 방법 6.4 그래프의 순회와 신장 트리
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
Ch.04 Greedy Method (탐욕적 방법)
CHAP 10:그래프 순천향대학교 하상호.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 학기 데이터구조.
CHAP 10:그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 62).
제5장 트리.
자료구조론 10장 그래프(graph).
On the computation of multidimensional Aggregates
제 6 장 그래프.
쉽게 배우는 알고리즘 9장. 그래프 알고리즘.
Dynamic Programming.
 Branch-and-Bound (분기한정)
알고리즘(Algorithm) – Greedy Method (탐욕적 방법)
C언어 응용 제 13 주 그래프2, 정렬.
Chapter 10 그래프(graph) SANGJI University Kwangman KO
발표자 : 홍익대학교 소프트웨어 공학 연구실 변은영 지도교수 : 김영철
그래프(graph) 연결되어 있는 객체 간의 관계를 표현하는 자료구조 가장 일반적인 자료구조 형태
9장. 동적 프로그래밍Dynamic Programming (DP)
Chapter 31 Faraday’s Law.
CHAPTER 6 그래프.
이산수학(Discrete Mathematics)  증명 전략 (Proof Strategy)
자료구조(SCSC) Data Structures
동적 계획(Dynamic Programming)
Ch.03 Dynamic Programming (동적 프로그래밍 or 동적 계획법)
Dynamic Programming.
이산수학(Discrete Mathematics)  증명 방법 (Methods of Proof)
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
5장 동적계획법 (Dynamic Programming)
그래프의 용어 알고리즘 수업자료 김정현.
우린 할 수 있어 - Yes, We can do it 09년도 절대빈곤 자녀 썸머 훼스티벌
그래프와 트리 (Graphs and Trees)
게임인공지능 제 5 장 그래프의 비밀 2008년 4월 28일.
어린이집.
동적계획법과 최적화 문제 Dynamic Programming을 사용한 최적화 문제를 해결하는 알고리즘 설계 절차
2010년 연말정산 교육자료 센터운영팀 인사파트
Ⅳ. 눈으로 보는 관리.
노년기 발달 장안대 행정법률과 세류반 정 오 손
이산수학(Discrete Mathematics) 비둘기 집 원리 (The Pigeonhole Principle)
0-1 Knapsack – 개선된 BFS 기반 알고리즘
Gustav Robert Kirchhoff
CHAP 10 : 그래프.
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
타인을 내편으로 만드는 12가지 방법 고객서비스팀.
DP 기반 최단경로 – 자료 구조 및 전략 (1/4) 주어진 그래프에 대한 W:인접행렬(adjacent matrix) 표현 W
원격교육활용론 11. 원격교육 컨텐츠 설계 : 실습 패키지 박소연 (광주대학교).
존 듀이의 경험교육론에 기초한 초등학교 체험활동 특징에 관한 연구
이산수학(Discrete Mathematics)  증명 전략 (Proof Strategy)
(Ⅰ) 독서와 언어의 본질 언어의 본질 1 2 [고등 국어] – 독서와 문법 독서의 본질 (1) 독서의 특성
Traveling Salesman Problem – 개요 (1/2)
4. 분자 상호 작용의 네트워크 분석 4.1 네트워크 표현과 계산
워밍업 실뭉치 전달게임.
MST – Kruskal 알고리즘 (추상적)
제 4장 그리디 알고리즘.
음파성명학 최종욱.
♣좋은 이미지 형성을 위한 5대 POINT ♣ 나의 이미지? 표정/시선 바른 자세 용모/복장 대화법 인사예절.
[CPA340] Algorithms and Practice Youn-Hee Han
택시비가 너무 비싸다. 우리 함께 농어촌버스를 이용해보자!
Traveling Salesman Problem – 개요 (1/2)
Traveling Salesman Problem – 개요 (1/2)
Presentation transcript:

10장. 그래프 알고리즘

10장. 그래프 알고리즘

학습목표 그래프의 표현법을 익힌다. 너비 우선 탐색과 깊이 우선 탐색의 원리를 충분히 이해하도록 한다. 너비 우선 탐색과 깊이 우선 탐색의 원리를 충분히 이해하도록 한다. 신장 트리의 의미와 최소 신장 트리를 구하는 두 가지 알고리즘을 이해한다. 그래프의 특성에 따라 가장 적합한 최단 경로 알고리즘을 선택할 수 있도록 한다. 위상 정렬을 알고, DAG의 경우에 위상 정렬을 이용해 최단 경로를 구하는 방법을 이해한다. 강연결 요소를 구하는 알고리즘을 이해하고 이 알고리즘의 정당성을 확신할 수 있도록 한다. 본문에서 소개하는 각 알고리즘의 수행 시간을 분석할 수 있도록 한다.

그래프 현상이나 사물을 정점vertex과 간선edge으로 표현한 것 Graph G = (V, E) 두 정점이 간선으로 연결되어 있으면 인접adjacent하다고 한다 간선은 두 정점의 관계를 나타낸다

그래프의 예 영희 철수 준호 동건 승우 재상 사람들간의 친분 관계를 나타낸 그래프

그래프의 예 영희 철수 준호 동건 승우 재상 9 6 5 5 7 9 1 5 친밀도를 가중치로 나타낸 친분관계 그래프

그래프의 예 유향 그래프directed graph=digraph 영희 철수 준호 동건 승우 재상 방향을 고려한 친분관계 그래프

그래프의 예 영희 철수 준호 동건 승우 재상 9 6 8 8 5 5 7 9 6 2 1 5 가중치를 가진 유향 그래프

그래프의 표현 1: 인접행렬 인접행렬 NⅹN 행렬로 표현 N: 정점의 총 수 유향 그래프의 경우 가중치 있는 그래프의 경우 원소 (i, j) = 1 : 정점 i 와 정점 j 사이에 간선이 있음 원소 (i, j) = 0 : 정점 i 와 정점 j 사이에 간선이 없음 유향 그래프의 경우 원소 (i, j)는 정점 i 로부터 정점 j 로 연결되는 간선이 있는지를 나타냄 가중치 있는 그래프의 경우 원소 (i, j)는 1 대신에 가중치를 가짐

인접행렬 영희 철수 준호 동건 승우 재상 1 1 2 3 4 5 6 1 1 2 4 6 2 3 4 3 5 5 6 무향 그래프의 예

인접행렬 가중치 있는 무향 그래프의 예 영희 철수 준호 동건 승우 재상 9 7 5 6 1 9 6 5 5 7 9 1 5 1 1 2 3 4 5 6 9 7 5 6 1 9 6 1 5 2 4 6 2 5 7 3 9 1 4 3 5 5 5 6 가중치 있는 무향 그래프의 예

인접행렬 영희 철수 준호 동건 승우 재상 1 1 2 3 4 5 6 1 1 2 4 6 2 3 4 3 5 5 6 유향 그래프의 예

인접행렬 가중치 있는 유향 그래프의 예 영희 철수 준호 동건 승우 재상 8 7 5 6 9 2 1 9 6 8 8 5 5 7 9 3 4 5 6 8 7 5 6 9 2 1 9 6 1 8 8 5 2 4 6 2 5 7 3 9 6 2 1 4 3 5 5 5 6 가중치 있는 유향 그래프의 예

인접행렬 유향 그래프의 다른 예

인접행렬 가중치 있는 그래프의 다른 예

그래프의 표현 2: 인접리스트 인접 리스트 N 개의 연결 리스트로 표현 i 번째 리스트는 정점 i 에 인접한 정점들을 리스트로 연결해 놓음 가중치 있는 그래프의 경우 리스트에 가중치도 보관한다

인접 리스트 무향 그래프의 예 영희 철수 준호 동건 승우 재상 2 3 4 6 1 3 1 2 5 1 6 3 6 1 4 5 1 2

인접 리스트 가중치 있는 그래프의 예 영희 철수 준호 동건 승우 재상 9 7 2 9 3 7 4 5 6 1 9 3 9 1 7 2

그래프의 표현 3: 인접 배열 인접 배열 N 개의 연결 배열로 표현 i 번째 배열은 정점 i 에 인접한 정점들을 집합 가중치 있는 그래프의 경우 리스트에 가중치도 보관한다

인접 배열 영희 철수 준호 동건 승우 재상 각 정점에 인접한 정점 수 1 2 3 4 5 6 1 4 2 3 2 3 4 6 2 1

인접 배열 영희 철수 준호 동건 승우 재상 배열에서 각 정점에 인접한 정점 목록의 끝자리 1 2 3 4 5 6 1 4 6 10 12 14 17 2 3 4 6 2 1 3 3 1 2 5 6 4 1 6 5 3 6 6 1 4 5

그래프에서 모든 정점 방문하기 대표적 두가지 방법 너무나 중요함 너비우선탐색BFS (Breadth-First Search) 깊이우선탐색DFS (Depth-First Search) 너무나 중요함 그래프 알고리즘의 기본 DFS/BFS는 다 아는 듯이 보이지만 이해의 수준은 큰 차이가 난다 DFS/BFS는 뼛속 깊이 이해해야 좋은 그래프 알고리즘을 만들 수 있음

BFS너비우선탐색 수행 시간: Θ(|V|+|E|) BFS(G, v) { for each v ∈ V –{s} visited[v] ← NO; visited[s] ← YES; ▷ s: 시작 정점 enqueue(Q, s); ▷ Q: 큐 while (Q ≠ ϕ) { u ← dequeue(Q); for each v ∈ L(u) ▷ L(u): 정점 u의 인접 리스트 if (visited[v] = NO) then visited[u] ← YES; enqueue(Q, v); } 수행 시간: Θ(|V|+|E|)

DFS깊이우선탐색 수행 시간: Θ(|V|+|E|) DFS(G) { for each v ∈ V visited[v] ← NO; if (visited[v] = NO) then aDFS(v); } aDFS (v) visited[v] ← YES; for each x ∈ L(v) ▷ L(v) : 정점 v의 인접 리스트 if (visited[x] = NO) then aDFS(x); 수행 시간: Θ(|V|+|E|)

동일한 트리를 각각 DFS/BFS로 방문하기

BFS의 작동 예 (a) (b) (c) (e) (d) 2 1 1 3 2 4 1 5 3 6 4 2 2 7 1 5 1 5 3 8

DFS의 작동 예 1 1 2 1 (a) (b) 2 (c) 3 1 1 4 4 5 2 2 3 (e) 3 (d)

DFS의 작동 예 (계속) (f) (g) (i) (h) 1 1 7 6 4 6 4 5 5 2 2 3 3 8 8 1 7 1 7 6

최소신장트리Minimum Spanning Trees 조건 무향 연결 그래프 연결 그래프connected graph : 모든 정점 간에 경로가 존재하는 그래프 트리 싸이클이 없는 연결 그래프 n 개의 정점을 가진 트리는 항상 n-1개의 간선을 갖는다 그래프 G의 신장트리 G의 정점들과 간선들로만 구성된 트리 G의 최소신장트리 G의 신장트리들 중 간선의 합이 최소인 신장트리 Mention observations.

프림Prim 알고리즘 수행 시간: O(|E|log|V|) 힙 이용 Prim 알고리즘은 그리디greedy 알고리즘의 일종 { S ←Ф ; 정점 r을 방문되었다고 표시하고, 집합 S에 포함시킨다; while (S≠V) { S에서 V-S를 연결하는 간선들 중 최소길이의 간선 (x, y) 를 찾는다; ▷ (x∈S, y∈V-S) 정점 y를 방문되었다고 표시하고, 집합 S에 포함시킨다; } Prim 알고리즘은 그리디greedy 알고리즘의 일종 그리디 알고리즘으로 최적해를 보장하는 드문 예 수행 시간: O(|E|log|V|) 힙 이용

프림 알고리즘의 작동 예 (a) (b) (c) (d) : 방금 S에 포함된 정점 : 방금 이완이 일어난 정점 8 8 ∞ S 8 10 10 r ∞ ∞ 9 9 5 5 9 11 ∞ 11 12 13 12 13 ∞ ∞ ∞ 11 8 7 8 7 ∞ ∞ 11/13 수정됨 (d) (c) 8 8 10 8 10 S 10 S 5 9 9 5 11 5 9 11 13 12 9 13 12 ∞ 11 12 11 8 7 ∞ 8 7 : 방금 S에 포함된 정점 ∞ : 방금 이완이 일어난 정점

(e) (f) 8 8 5 5 5 S 11 9 11 9 13 12 12 12 (g) 11 12 11 8 8 7 S ∞ 8 7 8 11/13 수정됨 5 9 (i) S (h) 12 8 8 7 11 5 5 8 7 8 9 9 7 11 7 11 7 8 8 S

프림 알고리즘을 좀 더 구체적으로 이완(relaxation) 수행시간: O(|E|log|V|) 힙 이용 Prim(G, r) ▷ G=(V, E): 주어진 그래프 ▷ r: 시작으로 삼을 정점 {          S ← Ф ;                      ▷ S : 정점 집합         for each u∈V                  du ← ∞ ;         dr ← 0 ;         while (S≠V){          ▷ n회 순환된다                  u ← extractMin(V-S, d) ;                  S ← S ∪{u};                 for each v∈L(u) ▷ L(u) : u로부터 연결된 정점들의 집합                         if (v∈V-S and wuv< dv) then dv ←  wuv ;         } } extractMin(Q, d)         집합 Q에서 d값이 가장 작은 정점 u를 리턴한다 ; 이완(relaxation) 수행시간: O(|E|log|V|) 힙 이용

크루스칼kruskal 알고리즘 수행시간: O(ElogV) Kruskal (G, r) { 1. T ← Ф ; ▷ T : 신장트리 2. 단 하나의 정점만으로 이루어진 n 개의 집합을 초기화한다; 3. 간선 집합 Q(=E)를 가중치가 작은 순으로 정렬한다; 4. while (T의 간선수 < n-1) { Q에서 최소비용 간선 (u, v)를 제거한다; 정점 u와 정점 v가 서로 다른 집합에 속하면 { 두 집합을 하나로 합친다; T ← T∪{(u, v)}; } 수행시간: O(ElogV)

크루스칼 알고리즘의 수행시간 Step 2: Θ(V) Step 3: O(ElogE) = O(ElogV) Loop 4: O(Elog*V) by an efficient set handling Totally O(ElogV)

크루스칼 알고리즘의 작동 예 (a) (b) (c) (d) (e) : 방금 고려한 간선 : 성공적으로 더해진 간선 14 9 11 8 8 14 14 9 9 5 12 11 12 11 13 13 (c) 8 14 8 8 8 7 8 7 9 11 13 12 (d) (e) 8 14 14 8 9 9 11 12 11 13 13 12 8 8 8 : 방금 고려한 간선 : 성공적으로 더해진 간선

(f) (g) 14 14 9 11 11 12 13 12 13 (i) (h) 8 14 9 5 11 11 13 12 8 7

안정성 정리: 프림과 크루스칼 알고리즘의 이론적 근거 안정성 정리: 프림과 크루스칼 알고리즘의 이론적 근거 [안정성 정리] Let (S,V-S) an arbitrary partition of vertices. Let {u,v} be the min-weight edge among those crossing S and V-S. Then there exists at least a min. spanning tree containing {u,v}. <Proof> 본문 참조.

위상정렬Topological sorting 조건 싸이클이 없는 유향 그래프 위상정렬 모든 정점을 일렬로 나열하되 정점 x에서 정점 y로 가는 간선이 있으면 x는 반드시 y보다 앞에 위치한다 일반적으로 임의의 유향 그래프에 대해 복수의 위상 순서가 존재한다

이 그래프에 대한 위상정렬의 예 2개

위상정렬 알고리즘 1 topologicalSort1(G, v) { for ← 1 to n {                 진입간선이 없는 정점 u를 선택한다;                        A[i] ← u;                 정점 u와, u의 진출간선을 모두 제거한다;           }         ▷ 이 시점에 배열 A[1…n]에는 정점들이 위상정렬되어 있다 } 수행 시간: Θ(|V|+|E|)

위상정렬 알고리즘 1의 작동 예 (b) (a) (c) (d) 남비에 물붓기 점화 라면넣기 라면봉지 뜯기 계란 풀어넣기 수프넣기

(e) (f) (g) 점화 점화 남비에 물붓기 라면넣기 계란 풀어넣기 수프넣기 남비에 물붓기 라면넣기 계란 풀어넣기 라면봉지 뜯기 라면봉지 뜯기 수프넣기 (e) (f) 점화 남비에 물붓기 라면넣기 계란 풀어넣기 라면봉지 뜯기 수프넣기 (g)

위상정렬 알고리즘 2 topologicalSort2(G) { for each v∈V visited[v] ← NO;                 if (visited[v] = NO) then DFS-TS(v) ;                          } DFS-TS(v)         visited[v] ← YES;         for each x∈L(v) ▷ L(v): v의 인접 리스트                 if (visited[x] = NO) then DFS-TS(x) ;          연결 리스트 R의 맨 앞에 정점 v를 삽입한다;    수행 시간: Θ(|V|+|E|) 알고리즘이 끝나고 나면 연결 리스트 R에는 정점들이 위상정렬된 순서로 매달려 있다.

위상정렬 알고리즘 2의 작동 예 (b) (a) 1 1 (d) (c) 2 점화 점화 라면넣기 냄비에 물붓기 라면넣기 계란 풀어넣기 냄비에 물붓기 계란 풀어넣기 라면봉지 뜯기 수프넣기 라면봉지 뜯기 수프넣기 (a) (b) 점화 점화 1 1 냄비에 물붓기 라면넣기 계란 풀어넣기 냄비에 물붓기 라면넣기 계란 풀어넣기 라면봉지 뜯기 수프넣기 라면봉지 뜯기 수프넣기 (d) (c) 2

1 1 (e) (f) 2 2 4 1 1 3 3 (h) (g) 2 2 점화 점화 냄비에 물붓기 라면넣기 계란 풀어넣기 냄비에 라면봉지 뜯기 수프넣기 라면봉지 뜯기 수프넣기 (e) (f) 2 2 4 점화 점화 1 1 냄비에 물붓기 라면넣기 계란 풀어넣기 냄비에 물붓기 라면넣기 계란 풀어넣기 3 3 라면봉지 뜯기 수프넣기 (h) 라면봉지 뜯기 수프넣기 (g) 2 2

4 4 1 5 1 5 3 3 (i) (j) 2 2 6 점화 점화 냄비에 물붓기 라면넣기 계란 풀어넣기 냄비에 물붓기 라면넣기 라면봉지 뜯기 수프넣기 라면봉지 뜯기 수프넣기 (i) (j) 2 6 2

최단경로Shortest Paths 조건 두 정점 사이의 최단경로 간선 가중치가 있는 유향 그래프 무향 그래프는 각 간선에 대해 양쪽으로 유향 간선이 있는 유향 그래프로 생각할 수 있다 즉, 무향 간선 (u, v)는 유향 간선 (u, v)와 (v, u)를 의미한다고 가정하면 된다 두 정점 사이의 최단경로 두 정점 사이의 경로들 중 간선의 가중치 합이 최소인 경로 간선 가중치의 합이 음인 싸이클이 있으면 문제가 정의되지 않는다

단일 시작점 최단경로 모든 쌍 최단경로 단일 시작점으로부터 각 정점에 이르는 최단경로를 구한다 다익스트라 알고리즘 음의 가중치를 허용하지 않는 최단경로 벨만-포드 알고리즘 음의 가중치를 허용하는 최단경로 싸이클이 없는 그래프의 최단경로 모든 쌍 최단경로 모든 정점 쌍 사이의 최단경로를 모두 구한다 플로이드-워샬 알고리즘

다익스트라Dijkstra 알고리즘 이완(relaxation) 수행 시간: O(|E|log|V|) 힙 이용 Dijkstra(G, r) ▷ G=(V, E): 주어진 그래프 ▷ r: 시작으로 삼을 정점 {          S ← Ф ;                       ▷ S : 정점 집합         for each u∈V                  d[u] ← ∞ ;         d[r] ← 0 ;         while (S≠V){          ▷ n회 순환된다                  u ← extractMin(V-S, d) ;                  S ← S ∪{u};                 for each v∈L(u) ▷ L(u) : u로부터 연결된 정점들의 집합                         if (v∈V-S and d[u] +w[u, v] < d[v] ) then { d[v] ← d[u] + w[u, v]; prev[v] ← u;         } } extractMin(Q, d[])         집합 Q에서 d값이 가장 작은 정점 u를 리턴한다 ; 모든 간선의 가중치는 음이 아니어야 함 이완(relaxation) 수행 시간: O(|E|log|V|) 힙 이용

다익스트라 알고리즘의 작동 예 (a) (c) (b) (f) (e) (d) ∞ 8 10 8 8 10 8 10 S S ∞ ∞ 6 6 2 6 2 18 6 2 9 1 9 1 11 1 11 ∞ ∞ ∞ 3 12 5 9 ∞ 3 12 5 9 3 12 5 ∞ ∞ ∞ 8 11 ∞ 8 11 8 8 7 4 8 7 4 8 7 ∞ 4 ∞ ∞ (f) (e) (d) S S S 8 8 8 10 10 10 2 2 1 ∞ 9 5 12 9 12 9 12 12 5 12 5 3 19 ∞ ∞ 11 11 11 8 8 8 8 7 4 8 7 4 8 7 4 19 ∞ ∞

(j) (f) 8 8 10 10 S 9 12 9 12 12 5 19 19 11 11 8 8 7 4 19 16 (g) S 8 8 (i) 10 (h) 10 S 9 12 S 12 5 9 12 19 8 11 19 11 7 4 10 16 16 9 12 12 5 19 11 7 16

벨만-포드Bellman-Ford 알고리즘 음의 가중치를 허용한다 BellmanFord(G, r) { for each u∈V du← ∞; d[r] ← 0; for i ← 1 to |V|-1 for each (u, v) ∈E if (d[u] + w[u, v] < d[v]v ) then { d[v] ← d[u] + w[u, v] ; prev[v] ← u; } ▷ 음의 싸이클 존재 여부 확인 if (d[u] + w[u, v] < d[v]v ) output “해없음”; 이완(relaxation) 수행 시간: Θ(|E||V|)

벨만-포드 알고리즘의 작동 예 (a) (b) i =1 (c) i =2 (e) i =4 (d) i =3 8 8 ∞ 10 8 10 -15 ∞ -15 ∞ 2 2 9 1 9 1 11 11 9 ∞ ∞ ∞ 3 12 5 3 12 5 ∞ ∞ 11 ∞ 8 (c) i =2 8 -6 8 10 -7 8 -7 8 4 4 ∞ -15 10 ∞ 2 9 1 11 9 ∞ 3 12 5 19 (e) i =4 (d) i =3 11 8 10 8 -6 10 8 -6 -7 8 4 19 -15 4 -15 4 2 2 9 1 9 1 11 11 9 6 9 12 3 12 5 3 12 5 12 12 11 11 8 8 8 -7 4 8 -7 4 16 19

(f) i =5 (g) i =6 (h) i =7 (i) 8 -6 10 8 -6 10 -15 4 -15 4 2 2 9 1 9 1 -15 4 -15 4 2 2 9 1 9 1 11 9 12 5 6 11 9 6 3 3 12 5 9 11 3 8 11 8 8 -7 4 8 -7 4 10 10 (h) i =7 (i) 8 -6 10 8 -6 10 -15 4 -15 4 2 2 9 1 9 1 11 11 9 6 9 5 6 3 12 5 3 12 3 3 11 11 8 8 8 -7 4 8 -7 4 10 10

동적 프로그래밍으로 본 벨만-포드 알고리즘 dtk : 중간에 최대 k 개의 간선를 거쳐 정점 r로부터 정점 t에 이르는 최단거리 목표: dtn-1 재귀적 관계 dvk = min {duk-1+ wuv}, k > 0 dr0 = 0 dt0 = ∞, t ≠r for 모든 간선 (u, v)

플로이드-워샬Floyd-Warshall 알고리즘 모든 정점들간의 상호 최단거리 구하기 응용 예 Road Atlas 네비게이션 시스템 네트웍 커뮤니케이션

dijk : vertex set {v1, v2, …, vk}에 속하는 것들만 거쳐 vi에서 vj에 이르는 최단경로 길이 wij , k = 0 min {dijk-1, dikk-1+ dkjk-1}, k ≥ 1 dijk = 중간정점들이 모두 {1, 2, …, k-1}에 속함 중간정점들이 모두 {1, 2, …, k-1}에 속함 𝑑 𝑖𝑘 𝑘−1 𝑑 𝑘𝑗 𝑘−1 k i j 𝑑 𝑖𝑗 𝑘−1 중간정점들이 모두 {1, 2, …, k-1}에 속함

플로이드-워샬 알고리즘 FloydWarshall(G) { for i ← 1 to n for j ← 1 to n                          d0ij ← wij ;         for k ← 1 to n                        ▷ 중간정점 집합 {1, 2, …, k}                 for i ← 1 to n                 ▷ i : 시작 정점                         for j ← 1 to n ▷ j : 마지막 정점                                  dkij ← min {dk-1ij , dk-1ik + dk-1kj}; } 수행시간: Θ(|V|3) 문제의 총 수 Θ(|V|3), 각 문제의 계산에 Θ(1)

싸이클이 없는 그래프의 최단경로 싸이클이 없는 유향 그래프를 DAG라 한다 DAG: Directed Acyclic Graph DAG에서의 최단경로는 선형시간에 간단히 구할 수 있다

DAG-ShortestPath(G, r) { for each u∈V du ← ∞; dr ← 0; G의 정점들을 위상정렬한다;        for each v∈L(u) ▷ L(u) : 정점 u로부터 연결된 정점들의 집합 if (du + wu,v < dv ) then dv ← du + wu,v ;                    } ~10/31/2007 수행시간: Θ(|V|+|E|)

DAG-ShortestPath의 작동 예 7 DAG-ShortestPath의 작동 예 5 1 3 (a) 1 -2 6 -3 4 7 1 6 3 -2 -3 (b) 4 1 5 7 1 r 6 3 -2 -3 (c) ∞ ∞ ∞ ∞ ∞ 4 1 5

7 1 6 3 -2 -3 (d) ∞ ∞ ∞ ∞ ∞ 4 1 5 7 1 6 3 -2 -3 (e) ∞ ∞ 3 7 5 4 1 5 7 1 6 3 -2 -3 (f) ∞ 3 7 7 5 4 1 5

7 1 6 3 -2 -3 (g) ∞ 3 7 5 5 4 1 5 7 1 6 3 -2 -3 (h) ∞ 3 5 7 2 4 1 5 7 1 6 3 -2 -3 (i) ∞ 3 7 5 2 4 1 5

강연결요소 구하기 강하게 연결됨 임의의 그래프에서 강연결요소들을 찾는 알고리즘을 공부한다 유향 그래프의 모든 정점쌍에 대해서 양방향으로 경로가 존재하면 강하게 연결되었다고 한다 강하게 연결된 부분 그래프를 강연결요소Strongly connected component라 한다 임의의 그래프에서 강연결요소들을 찾는 알고리즘을 공부한다

강연결요소 구하기 알고리즘 stronglyConnectedComponent(G) {     그래프 G에 대해 DFS를 수행하여 각 정점 v의 완료시간 f [v] 를 계산한다.   G의 모든 간선들의 방향을 뒤집어 GR을 만든다.    DFS(GR)를 수행하되 [알고리즘 10-2]의 행에서 시작점을 택할 때 에 서 구한 f [v]가 가장 큰 정점으로 잡는다.     앞의 에서 만들어진 분리된 트리들 각각을 강연결요소로 리턴한다. } 1 2 4 3 수행 시간: Θ(|V|+|E|)

stronglyConnectedComponent의 작동 예 (a) G (b) (c) (d) G G 10 GR 5 10 9 5 9 7 9 7 6 6 10 5 6 6 8 6 8 4 4 4 1 5 1 5 7 7 8 7 8 8 2 2 3 3 3 3 3 2 2 2 4 4 1 1 1

(e) (f) (g) GR GR GR 9 9 9 10 5 10 5 10 5 6 4 6 4 6 4 7 8 7 8 8 7 3 3 3 2 2 2 1 1 1 (i) (h) GR GR 9 9 10 5 10 5 6 4 6 4 7 7 8 8 3 3 2 2 1 1

제대로 작동한다는 것의 증명 <Proof> ⇒ ⇒ [Claim] v & w are in the same strongly connected component iff v & w are in the same tree in the DFS forest of step 3 <Proof> ⇒ easy (trivial) Assume v & w are in the same strongly connected component. Then ᴲ(v →+ w) and ᴲ(w →+ v) in G. Hence ᴲ(w →+ v) and ᴲ(v →+ w) in G. Suppose DFS in GR starts at some vertex x and reaches v (or w), then it also reaches w(or v); i.e., they are in the same tree in the forest. x ⇒ Assume v & w are in the same tree in the forest of GR Then ᴲ(x →+ v) in GR ⇒ ᴲ(v →+ x) in G. Suppose, for the contradiction that ᴲno path x →+ v in G. Then, f[x] < f[v], contradiction! (Since f[x] > f[v] by step 3) Similarly, we can show that ᴲ(x →+ v) in G. Therefore ᴲ(v →+ w) and ᴲ(w →+ v) in G. v & w are in the same strongly connected component. w v

Thank you