• 검색 결과가 없습니다.

연습 문제

N/A
N/A
Protected

Academic year: 2022

Share "연습 문제 "

Copied!
13
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

연습 문제

아래 그래프에서 Dijkstra의 single source all destination 알고리즘을 이용하여 vertex E에서 나머지 vertex로의 최 단 경로를 구하고자 한다. 최단 경로가 발견되는 vertex의 순서는 무엇인가?

F A

B D

C E

3 5

7

2 2

5 2

2

(2)

4.2 All Pairs Shortest Paths

문제 정의

그래프 G에 포함된 모든 vertex의 쌍들에 대해 최단 경 로를 발견

해법

1. V(G)에 속하는 각각의 vertex에 대해 shortestpath() 알 고리즘을 수행: 복잡도 = O(n3)

2. 동적 프로그래밍 방법(Dynamic programming

method) : 복잡도 = O(n3) with smaller constant factor

(3)

동적 프로그래밍 알고리즘

가정: 0에서 n – 1까지 n 개의 vertex가 존재

기본적인 자료구조

Ak[i][j]: k보다 크지 않은 vertex들로 구성된 i에서 j까 지 최단 경로의 길이

i에서 j까지의 최단 경로의 길이 = An-1

[i][j]

A

-1

[i][j] = cost[i][j]

연속적으로 A0, A1, A2, ..., An-1 을 생성

Ak-1 이용하여 Ak 생성하는 방법

vertex k를 지나지 않는 경로: Ak[i][j] = Ak-1[i][j]

vertex k를 지나는 경로:

A

k

[i][j] = min{A

k-1

[i][j], A

k-1

[i][k] + A

k-1

[k][j]}, k≥0

A

-1

[i][j] = cost[i][j]

(4)

Program 6.12: allcosts()

void allcosts (int cost[ ][MAX_V], int distance[][MAX_V], int n) {

/* 각 vertex에서 나머지 모든 vertex까지의 최단 경로를 계산.

cost[][]: 인접 행렬, distance[][]: 경로의 거리를 저장 */

int i, j, k;

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

distance[i][j] = cost[i][j];

// A-1[][]의 초기화

for (k = 0; k < n; k++)

// A0부터 An-1까지 차례대로 생성

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

if (distance[i][k] + distance[k][j] < distance[i][j])

distance[i][j] = distance[i][k] + distance[k][j];

(5)

그림 6.34: allcosts()에서 생성되는 A k

A-1 0 1 2

0 0 4 11

1 6 0 2

2 3 ∞ 0

A0 0 1 2

0 0 4 11

1 6 0 2

2 3 7 0

A1 0 1 2

0 0 4 6

1 6 0 2

2 3 7 0

A2 0 1 2

0 0 4 6

1 5 0 2

2 3 7 0

V0 V1

V2

6

4 11 2 3

(6)

이행적 폐쇄(Transitive Closure)

Transitive Closure Matrix: A+

A+[i][j] = 1 if there is a path of length > 0 from i to j

Otherwise, A+[i][j] = 0.

Reflexive Transitive Closure Matrix: A*

A*[i][j] = 1 if there is a path of length ≥ 0 from i to j

Otherwise, A*[i][j] = 0.

Program: allcosts() 알고리즘을 수정

distance[i][j] = distance[i][j] || distance[i][k] &&

distance[k][j]

(7)

Transitive Closure의 예

0 1 2 3 4

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

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

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

Digraph G Adjacent matrix A for G

A

+

A

*

(8)

연습 문제

동적 프로그래밍을 이용하여 오른쪽 그래프에 대해 "All pairs shortest path"를 구하고자 한다. 아래 A0 행렬을 채 우시오.

1

2 0

3

2 1

4 5 2 6

3

2

0 1 2 3

0 1 2 3

(9)

5. 작업 네트워크(Activity Networks)

작업(Activity)

부분 프로젝트 (divide and conquer)

각각의 작업들이 완료되어야 전체 프로젝트가 성공적 으로 완료

가지 종류의 네트워크

Activity on Vertex (AOV) Networks

Activity on Edge (AOE) Networks

(10)

5.1 AOV Network

가지 정의들:

AOV Network: Digraph G (vertex = 작업, edge = 작업 들 간의 선행 관계)

u에서 v까지 방향 경로(directed path)가 존재할 경우

u = predecessor of v, v = successor of u

Immediate Predecessor (Successor): <u, v>

Partial Order: transitive

이며 irreflexive한 선행 관계

Topological Order: vertex들 간의 선행 관계를 고려하

여 모든 vertex의 선형 순서(linear ordering)를 정의

Topological Sort

작업들 간에는 partial order만 존재할 수 있으므로,

(11)

AOV Network의 예

과목번호 과목명 선수과목

C1 C언어 None

C2 이산수학 None

C3 자료구조 C1, C2

C4 미분적분 I None

C5 미분적분 II C4

C6 선형대수 C5

C7 알고리즘 분석 C3, C6

C8 어셈블리어 C3

C9 운영체제 C7, C8

C10 프로그래밍언어 C7

C11 컴파일러 설계 C10

C12 인공 지능 C7

C13 계산 이론 C7

C14 병렬 알고리즘 C13

C15 수치 해석 C5

C1

C2

C4

C3

C8

C7

C5 C6

C9

C10

C12

C11

C13 C14

C15

(a) Courses needed for a computer science degree

(b) AOV network representing courses as vertices and edges as prerequisites

(12)

Program 6.13: Topological Sort

for ( i = 0; i < n; i++) {

if (every vertex has a predecessor) {

fprintf (stderr, "Network has a cycle.\ n");

exit (1);

}

pick a vertex v that has no predecessors;

output v;

delete v and all edges leading out of v from the network;

}

(13)

그림 6.39: Topological Sort의 동작

V1 V2 V3

V0 V4

V5

(a) initial

V1 V2 V3

V4 V5

(b) V0

V1

V2 V4 V5

(c) V3

V1

V4 V5

(d) V2

V1

V4

(e) V5

V4

(f) V1 (g) V4

생성된 topological order : V , V , V , V , V , V

참조

관련 문서

단, 명령줄 인수를 이 용하여 이진 파일의 경로를

[r]

[r]

그런데 표에서 수레의 질량과 나무 도막의 이동 거리가 비례하므로 수레의 운동 에너지는 수레의 질량에 비례한다.. 자동차의 질량과 자동차에 작용하는

• 사람, 시간, 날짜, 장소 등 특정한 의미를 가지고 있는 단 어를 인식하는 sequence labeling 문제. • ETRI의 엑소브레인

따라서 엄지손가락을 왼쪽으로 두고 코일 을 감아쥐는 네 손가락의 방향으로 전류가 흘러야 한다.. 개념 Feedback | 자석과 도선이

다음 빈칸에 알맞은 말을 써서 대화문을 완성하시오.. Listen Up A Listen and Number

수렴형 경계 충돌형 경계 대륙판과 대륙판이 충돌하는 경계 섭입형 경계 해양판이 대륙판 아래로 파고드는 경계.. 발산형 경계