쉽게 배우는 알고리즘 9장. 그래프 알고리즘.

Slides:



Advertisements
Similar presentations
Lesson 2 A Caring Friend. Making true friends is hard. Keeping them is even harder. To keep a good friendship, you need to care about others. Then, how.
Advertisements

Lesson 7 Science! It’s Cool! 과학 ! 멋져요 !. Can You Sink an Orange? 오렌지를 가라앉게 할 수 있나요 ? Tom: Look! The orange is floating. Tom: 봐 ! 오렌지가 떠 있어. Sora: Let’s.
명륜종합사회복 지관. * 강사 : 소 찾는 아이 작가 이상희, 김매화 팀장 외 * 북아트란 : 논술교육의 중요성, 자유로운 사고, 창 의력, 논리력 * 준비물 : 색연필, 사인펜, 연필, 지우개, 딱풀, 가위.
평코칭 리더용 제2과: 자산평가와 자기발견 GO Thrive Coaching S Belmont Dr
그래프.
15 장. 알고리즘의 설계 알고리즘 설계 학습목표 기본 패턴 패턴의 한계점 일곱 가지 패턴의 알고리즘 설계 기법을 이해한다.
A: Could you tell me how to make a call from this phone
1-1. How to Make a Strong First Impression vocabulary
ALL IN ONE WORKING HOLIDAY!
Maximum Flow.
(Mathematical Induction)
Shortest Path Algorithm
제 6 장 그래프 6.1 그래프의 정의 6.2 용어 및 표현법 6.3 그래프의 표현 방법 6.4 그래프의 순회와 신장 트리
Chapter 7. Binary Search Trees - 보충 자료-
코칭의 강의순서 1. 코칭의 정의 2.코칭의 성서관 3.코칭의 진단 4.코칭의 과정/처방 5.코칭의 기술 6.코칭의 목표/
11. Characters Are Everywhere
7장 : 캐시와 메모리.
Ch.04 Greedy Method (탐욕적 방법)
Internet Computing KUT Youn-Hee Han
CHAP 10:그래프 순천향대학교 하상호.
부분집합의 합 구하기 문제 부분집합의 합 구하기(Sum-of-Subsets) 문제
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 학기 데이터구조.
CHAP 10:그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 62).
제5장 트리.
자료구조론 10장 그래프(graph).
On the computation of multidimensional Aggregates
제 6 장 그래프.
시간 관리 및 경력관리 이 대 성.
Dynamic Programming.
Internet Computing KUT Youn-Hee Han
 Branch-and-Bound (분기한정)
알고리즘(Algorithm) – Greedy Method (탐욕적 방법)
C언어 응용 제 13 주 그래프2, 정렬.
Chapter 10 그래프(graph) SANGJI University Kwangman KO
Chapter 2. Finite Automata Exercises
숭실대학교 마이닝연구실 김완섭 2009년 2월 8일 아이디어  - 상관분석에 대한 연구
발표자 : 홍익대학교 소프트웨어 공학 연구실 변은영 지도교수 : 김영철
10장. 그래프 알고리즘.
그래프(graph) 연결되어 있는 객체 간의 관계를 표현하는 자료구조 가장 일반적인 자료구조 형태
EnglishCare 토.마.토. 토익 L/C 일상 어휘 ④ 강 사 : 김 태 윤.
9장. 동적 프로그래밍Dynamic Programming (DP)
Open Class Lesson- L2B3 Greeting (5’ 00”) Word Like Daddy, Like Mommy
CHAPTER 6 그래프.
동적 계획(Dynamic Programming)
Ch.03 Dynamic Programming (동적 프로그래밍 or 동적 계획법)
Dynamic Programming.
5장 동적계획법 (Dynamic Programming)
CEO가 가져야 할 품질 혁신 마인드.
그래프의 용어 알고리즘 수업자료 김정현.
그래프와 트리 (Graphs and Trees)
게임인공지능 제 5 장 그래프의 비밀 2008년 4월 28일.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
좋 으 - 신 하 나 - 님 인 자 - 와 자비 - 영 원 - 히 - - Lord You are good and Your
동적계획법과 최적화 문제 Dynamic Programming을 사용한 최적화 문제를 해결하는 알고리즘 설계 절차
Time (by Pink Floyd).
CHAP 10 : 그래프.
점화와 응용 (Recurrence and Its Applications)
DP 기반 최단경로 – 자료 구조 및 전략 (1/4) 주어진 그래프에 대한 W:인접행렬(adjacent matrix) 표현 W
이산수학(Discrete Mathematics)
Traveling Salesman Problem – 개요 (1/2)
경영학의 상황학파에 대해서… 경제학과 3학년 최준용 회계학과 4학년 진현빈
4. 분자 상호 작용의 네트워크 분석 4.1 네트워크 표현과 계산
MST – Kruskal 알고리즘 (추상적)
Presentation by Timothy Kane
제 4장 그리디 알고리즘.
[CPA340] Algorithms and Practice Youn-Hee Han
Traveling Salesman Problem – 개요 (1/2)
Traveling Salesman Problem – 개요 (1/2)
Sawasdee ka.
Presentation transcript:

쉽게 배우는 알고리즘 9장. 그래프 알고리즘

9장. 그래프 알고리즘 수학은 패턴의 과학이다. 음악 역시 패턴들이다. 컴퓨터 과학은 추상화와 패턴의 형성에 깊은 관련이 있다. 컴퓨터 과학이 다른 분야들에 비해 특징적인 것은 지속적으로 차원이 급상승한다는 점이다. 미시적 관점에서 거시적 관점으로 도약하는 것이다. -도널드 크누스

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

Graph 현상이나 사물을 정점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 가중치를 가진 유향 그래프

Graph의 표현 1: Adjacency Matrix 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 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 6 9 8 8 5 5 7 9 6 2 1 3 4 5 6 8 7 5 6 9 2 1 6 1 9 8 8 5 2 4 6 2 5 7 3 9 6 2 1 4 3 5 5 5 6 가중치 있는 유향 그래프의 예

유향 그래프의 다른 예

가중치 있는 그래프의 다른 예

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

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

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

Graph Traversal 대표적 두가지 방법 너무나 중요함 BFS (Breadth-First Search) DFS (Depth-First Search) 너무나 중요함 그래프 알고리즘의 기본 DFS/BFS는 간단해 보이지만 제대로 아는 사람은 매우 드물다 DFS/BFS는 뼛속 깊이 이해해야 좋은 그래프 알고리즘을 만들 수 있음

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(u); 수행시간: Θ(|V|+|E|)

BFS너비우선탐색 수행시간: Θ(|V|+|E|) BFS(G, v) { for each v ∈ V visited[v] ← NO; visited[s] ← YES; enqueue(Q, s); while (Q ≠Ф) { u ← dequeue(Q); for each v ∈ L(u) if (visited[v] = NO) then visited[u] ← YES; enqueue(Q, v); } 수행시간: Θ(|V|+|E|)

동일한 Tree를 각각 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 2 5 5 2 3 3 8 8 1 7 1 7 6 ~10/22/2007 5 5 2 3 (f) 3 (g) 8 8 1 7 1 7 6 4 6 4 5 2 5 2 3 (i) 3 (h)

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

Prim Algorithm 수행시간: 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|) 힙 이용

Prim Algorithm의 작동 예 (a) (b) (c) (d) : 방금 S에 포함된 정점 : 방금 이완이 일어난 정점 S 8 8 8 ∞ 10 10 r ∞ ∞ 9 9 5 5 11 ∞ 9 11 13 12 13 12 ∞ ∞ ∞ 11 8 11/13 수정됨 7 8 7 ∞ ∞ (d) (c) 8 8 10 8 10 S 10 S 5 9 9 5 11 5 9 11 9 13 12 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 수정됨 10 9 (i) S (h) 12 8 8 7 11 5 7 10 8 8 9 9 7 11 7 11 7 8 8 S

Correctness of Prim Algorithm Proof of correctness: 1. Inductively, assume tree built so far is consistent with an MST (there might be more than one). This is certainly true at the start. 2. Need to show this is maintained each time we add an edge. Say T is tree so far, and M is MST consistent with it. If new edge is in M, then fine. If new edge is not in M, then edge forms a cycle with M. This edge e goes from T to outside, so if we follow the cycle we must eventually get to an edge e' that goes back in to T. We know length(e') >= length(e) by definition of the algorithm. So, if we add e to M and remove e', we get a new tree that is no longer than M was. This maintains inductive hypothesis.

Kruskal Algorithm 수행시간: O(|E|log|V|) Kruskal (G, r) { T ← Ф ; ▷ T : 신장트리 단 하나의 정점만으로 이루어진 n 개의 집합을 초기화한다; 모든 간선을 가중치가 작은 순으로 정렬한다; while (T의 간선수 < n-1) { 최소비용 간선 (u, v)를 제거한다; 정점 u와 정점 v가 서로 다른 집합에 속하면 { 두 집합을 하나로 합친다; T ← T∪{u, v)}; } 수행시간: O(|E|log|V|)

Kruskal Algorithm의 작동 예 (b) 8 8 10 10 9 9 5 12 11 12 11 13 13 (c) 8 10 8 8 8 7 8 7 9 11 13 12 (d) (e) 8 10 10 8 9 9 11 12 11 13 13 12 8 8 8 : 방금 고려한 간선 : 성공적으로 더해진 간선

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

Correctness of Kruskal Algorithm Proof of correctness: Can basically use same argument as before: assume inductively there is some MST M consistent with forest F found so far. Now we add in a new edge e between components C and C' of our forest. We know that M gets between C and C' somehow. In particular, either M has e in it, or else e forms a cycle with M, and this cycle has some other edge e' in it that connects C to some other component (maybe C' or maybe an intermediate one) in our forest. By definition of our algorithm, len(e) <= len(e'). So either M has e already, or substituting e for e' produces a tree M' that is just as good and maintains our inductive hypothesis.

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

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

Dijkstra Algorithm 이완(relaxation) 수행시간: O(|E|log|V|) 힙 이용 모든 간선의 가중치는 음이 아니어야 함 Dijkstra(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 dv<du+wu,v) then dv ←  du+wu,v ;         } } extractMin(Q, d)         집합 Q에서 d값이 가장 작은 정점 u를 리턴한다 ; 이완(relaxation) 수행시간: O(|E|log|V|) 힙 이용

Dijkstra Algorithm의 작동 예 ∞ 8 10 8 8 10 8 10 6 ∞ ∞ 2 6 2 18 6 2 9 1 9 1 11 ∞ ∞ 11 1 ∞ 5 9 5 9 ∞ 3 12 3 12 3 12 5 ∞ ∞ ∞ 8 11 ∞ 8 11 8 8 7 4 8 7 4 7 ∞ 8 4 ∞ ∞ 8 8 8 6 10 10 6 10 2 2 1 ∞ 9 12 9 12 9 12 5 12 5 12 5 3 19 ∞ ∞ 11 11 11 8 8 8 7 8 7 4 8 7 4 8 4 19 ∞ ∞

8 8 6 10 10 9 12 9 12 12 5 19 19 11 8 11 8 7 4 19 16 ~10/29/2007(not sequential) 8 8 10 8 10 2 10 9 1 11 9 12 3 12 5 9 12 5 12 19 8 8 10 11 19 11 7 4 10 2 16 9 1 16 11 9 12 3 12 5 19 11 7 4 16

Bellman-Ford Algorithm 음의 가중치를 허용한다 BellmanFord(G, r) { for each u∈V du← ∞; dr ← 0; for i ← 1 to |V|-1 for each (u, v) ∈E if (du + wu,v < dv ) then dv ← du + wu,v ; } 이완(relaxation) 수행시간: Θ(|E||V|)

Bellman-Ford Algorithm의 작동 예 (b) i =1 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

DP로 본 Bellman-Ford 알고리즘 dtk : 중간에 최대 k 개의 간선을 거쳐 정점 r로부터 정점 t에 이르는 최단거리 목표: dtn-1 재귀적 관계 dvk = min {duk-1+ wu, v}, k > 0 dr0 = 0 dt0 = ∞, t ≠r for 모든 간선 (u, v)

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

Floyd-Warshall Algorithm 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}; } dkij : 중간 정점으로 정점 집합 {1, 2, …, k}만을 사용하여 정점 i에서 정점 j에 이르는 최단경로 수행시간: Θ(|V|3)

dkij 관련 k j i 중간정점들이 모두 {1, 2, …, k-1}에 속함

Example: Floyd-Warshall Algorithm

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

SCC 구하기 알고리즘 stronglyConnectedComponent(G) {    1. 그래프 에 대해 DFS를 수행하여 각 정점 v의 완료시간 fv를 계산한다;    2. GR을 만든다;    3. DFS를 수행하되 시작점은 1에서 구한 fv가 가장 큰 정점으로 잡는다;    4. 3에서 만들어진 분리된 트리들 각각을 강연결요소로 리턴한다; } 수행시간: Θ(|V|+|E|)

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

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

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

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

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

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

(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 5 1 5 1 3 3 (i) (j) 2 6 2 점화 점화 냄비에 물붓기 라면넣기 계란 풀어넣기 냄비에 물붓기 라면넣기 라면봉지 뜯기 수프넣기 라면봉지 뜯기 수프넣기 (i) (j) 2 6 2

싸이클이 없는 Graph의 Shortest Path 싸이클이 없는 유향 그래프를 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

Thank you