알고리즘 설계와 분석 - sogang.ac.krgrmanet.sogang.ac.kr/ihm/cs081/15/1509final.pdf ·...

6
서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일) 1 알고리즘 설계와 분석 (CSE3081(2반)) 기 말 고 사 (2015년 12월17일 (목) 오전 9시 30분) 담당교수: 서강대학교 컴퓨터공학과 임인성 대상: 2학년 2학기생 ========================================= <주의> 문제지는 총6쪽이며, 제공한 답안지에 답을 쓴 후 제 출할 것. 만약 공간이 부족하면 답안지의 뒷면을 이용하고 반 드시 답을 쓰는 칸에 어느 쪽의 뒷면에 답을 기술하였는지 명 시할 것. 연습지는 수거하지 않음 . ========================================= 1. 다음은 Cormen 등의 Introduction to Algorithms라 는 책에서 발췌한 Minimum Spanning Tree에 대한 정 리 및 증명에 관한 문제이다. ============================== ============================== 가. 위의 정리에서 cut (S, V - S)란 그래프 G의 vertex 집합 V를 그의 부분 집합 S와 나머지 V-S로 partition한 것을 의미한다. 이때 G의 edge 집합 E의 부 분 집합 A에 대해, cut (S, V – S)가 A를 “respect”한 다는 것은 위 정리의 문맥상 무엇을 뜻하는지 정확히 기술하라. 나. 위의 정리에서 가정한 바와 같이, A가 어떤 특정 minimum spanning tree의 edge들의 집합의 부분 집합 이라고 하자. 이때 A에 속하지 않는 어떤 edge (u, v) 가 A에 대해 “safe”하다는 것을 무엇을 의미하는지 정 확히 기술하라. 다. 위의 정리에서 (HERE) 부분에는 E의 edge 중 어 떤 edge (u, v)에 대한 설명이 주어져 있다. 문맥 상 (u, v)는 어떤 edge이어야 할까? 라. 아래 그래프의 minimum spanning tree의 총 비용 을 얼마일까? ============================== ============================== 마. 위 문제의 그래프의 minimum spanning tree는 unique할까? (즉 오로지 한 개만 존재할까?) “예/아니 오”로 답하고 자신의 답에 대한 이유를 기술하라. 바. 다음은 adjacency matrix를 사용하여 구현한 minimum spanning tree 코드이다. 그래프 G = (V, E) 에 대해, n = |V|, m = |E|라 할 때, 이 방법의 시간 복잡도를 Big-O 기호를 사용하여 기술하라. ========================================= #define NOT_SELECTED 0 #define SELECTED 1 #define COST(G, I, J) ((G)->cost_matrix[(I)*(G)->n_v + (J)]) typedef struct _GRAPH { int n_v; int *cost_matrix; } GRAPH; int find_next_vertex(int n_v, int *MinCost, int *Selected) { int w, min_cost, selected_w; min_cost = INT_MAX; for (w = 0; w < n_v; w++) { if (Selected[w] == NOT_SELECTED && MinCost[w] < min_cost) { min_cost = MinCost[w]; selected_w = w; } } if (min_cost == INT_MAX) return -1; else return selected_w; } int MST_Prim(GRAPH *graph_ptr) { int i, v_next, w, *int_ptr[3]; int *Parent, *MinCost, *Selected; if (allocate_int_arrays(3, graph_ptr->n_v, int_ptr) == -1) return -1; Parent = int_ptr[0]; MinCost = int_ptr[1]; Selected = int_ptr[2]; for (i = 0; i < graph_ptr->n_v; i++) { MinCost[i] = INT_MAX; Selected[i] = NOT_SELECTED; } MinCost[0] = 0; Parent[0] = 0; for (i = 0; i < graph_ptr->n_v - 1; i++) { v_next = find_next_vertex(graph_ptr->n_v, MinCost, Selected); if (v_next == -1) { <HERE2> fprintf(stderr, "( ... )"); return -1; } Selected[v_next] = SELECTED; for (w = 0; w < graph_ptr->n_v; w++) { <HERE4> if (Selected[w] == NOT_SELECTED && <HERE3> ) { Parent[w] = v_next; MinCost[w] = COST(graph_ptr, v_next, w); } } } print_any_MST_information_here(graph_ptr, Parent, 0); free_int_arrays(3, int_ptr); return 0; } ==============================

Upload: others

Post on 13-Feb-2020

19 views

Category:

Documents


1 download

TRANSCRIPT

서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일)

1

알고리즘 설계와 분석 (CSE3081(2반))

기 말 고 사 (2015년 12월17일 (목) 오전 9시 30분)

담당교수: 서강대학교 컴퓨터공학과 임인성

대상: 2학년 2학기생

=========================================

<주의> 문제지는 총6쪽이며, 제공한 답안지에 답을 쓴 후 제

출할 것. 만약 공간이 부족하면 답안지의 뒷면을 이용하고 반

드시 답을 쓰는 칸에 어느 쪽의 뒷면에 답을 기술하였는지 명

시할 것. 연습지는 수거하지 않음.

=========================================

1. 다음은 Cormen 등의 Introduction to Algorithms라는 책에서 발췌한 Minimum Spanning Tree에 대한 정리 및 증명에 관한 문제이다.==============================

==============================

가. 위의 정리에서 cut (S, V - S)란 그래프 G의 vertex 집합 V를 그의 부분 집합 S와 나머지 V-S로 partition한 것을 의미한다. 이때 G의 edge 집합 E의 부분 집합 A에 대해, cut (S, V – S)가 A를 “respect”한다는 것은 위 정리의 문맥상 무엇을 뜻하는지 정확히 기술하라. 나. 위의 정리에서 가정한 바와 같이, A가 어떤 특정 minimum spanning tree의 edge들의 집합의 부분 집합이라고 하자. 이때 A에 속하지 않는 어떤 edge (u, v)가 A에 대해 “safe”하다는 것을 무엇을 의미하는지 정확히 기술하라. 다. 위의 정리에서 (HERE) 부분에는 E의 edge 중 어떤 edge (u, v)에 대한 설명이 주어져 있다. 문맥 상 (u, v)는 어떤 edge이어야 할까? 라. 아래 그래프의 minimum spanning tree의 총 비용을 얼마일까?==============================

==============================

마. 위 문제의 그래프의 minimum spanning tree는 unique할까? (즉 오로지 한 개만 존재할까?) “예/아니오”로 답하고 자신의 답에 대한 이유를 기술하라. 바. 다음은 adjacency matrix를 사용하여 구현한 minimum spanning tree 코드이다. 그래프 G = (V, E)에 대해, n = |V|, m = |E|라 할 때, 이 방법의 시간 복잡도를 Big-O 기호를 사용하여 기술하라.=========================================

#define NOT_SELECTED 0

#define SELECTED 1

#define COST(G, I, J) ((G)->cost_matrix[(I)*(G)->n_v +

(J)])

typedef struct _GRAPH {

int n_v; int *cost_matrix;

} GRAPH;

int find_next_vertex(int n_v, int *MinCost, int *Selected) {

int w, min_cost, selected_w;

min_cost = INT_MAX;

for (w = 0; w < n_v; w++) {

if (Selected[w] == NOT_SELECTED

&& MinCost[w] < min_cost) {

min_cost = MinCost[w]; selected_w = w;

}

}

if (min_cost == INT_MAX) return -1;

else return selected_w;

}

int MST_Prim(GRAPH *graph_ptr) {

int i, v_next, w, *int_ptr[3];

int *Parent, *MinCost, *Selected;

if (allocate_int_arrays(3, graph_ptr->n_v, int_ptr) == -1)

return -1;

Parent = int_ptr[0]; MinCost = int_ptr[1];

Selected = int_ptr[2];

for (i = 0; i < graph_ptr->n_v; i++) {

MinCost[i] = INT_MAX; Selected[i] = NOT_SELECTED;

}

MinCost[0] = 0; Parent[0] = 0;

for (i = 0; i < graph_ptr->n_v - 1; i++) {

v_next = find_next_vertex(graph_ptr->n_v,

MinCost, Selected);

if (v_next == -1) { <HERE2>

fprintf(stderr, "( ... )"); return -1;

}

Selected[v_next] = SELECTED;

for (w = 0; w < graph_ptr->n_v; w++) { <HERE4>

if (Selected[w] == NOT_SELECTED

&& <HERE3> ) {

Parent[w] = v_next;

MinCost[w] = COST(graph_ptr, v_next, w);

}

}

}

print_any_MST_information_here(graph_ptr, Parent, 0);

free_int_arrays(3, int_ptr); return 0;

}

==============================

서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일)

2

사. 위 코드에서 <HERE2>에서와 같이 변수 v_next가 –1인 경우에는 이 그래프에 어떤 문제가 있다는 것을 암시하는 것일까? 아. 위 코드에서 <HERE3>에 들어갈 내용을 C/C++ 언어 문법에 맞게 정확히 기술하라. 자. 위 구현의 골격을 유지하면서 그래프에 대한 자료구조만 adjacency matrix에서 adjacency list로 바꾸어 다시 구현한다고 가정하자. 이때 <HERE4>의 for 문장내부의 계산이 minimum spanning tree를 구하는데 필요한 총 계산 중 얼마만큼의 비용을 차지할지, 위 문제에서 정의한 n과 m에 대해 Big-O 기호를 사용하여 기술하라.

2. 주어진 양의 정수 k에 대해 n = 2k-1개의 노드를 가지는 full binary tree Tn의 노드를 루트 노드부터 시작하여 레벨 별로 하나씩 방문하면서 어떤 계산을 수행 하려한다. (아래의 그림은 k = 4, 즉 n = 15인 경우의 트리를 도시하고 있는데, 루트 노드의 레벨은 1로 가정함) 가. 만약 각 노드에 대한 계산 비용이 각 노드가 속한 레벨 l에 대해 k-l이라할 경우에 대해, Tn에 대한 전체 처리 비용 C(n)은 얼마가 될지 그 값을 정확하게 n의 함수로 표현하라. (주의: 계산량을 와 같은 식으로 표현한 후 자신의 답에 이르게 된 계산과정을 기술할 것)==============================

3

2 2

1 1 1 1

0 0 0 0 0 0 0 0

Level 1

Level 2

Level 3

Level 4

============================== 나. 이때의 시간 복잡도를 n에 대하여 Big-O 기호를 사용하여 기술하라. 다. 이 문제의 계산 비용을 n이 아니라 k의 함수로 D(k)와 같이 표현한다고 할 때, k = 1, 2, 3, ...에 대해 D(k)를 recurrence relation을 사용하여 기술하라.

3. 다음은 Heap Sort 방법의 구현에 관한 문제이다. 가. 아래 코드에서 (A)에 들어갈 내용을 C/C++ 언어

문법에 맞게 정확히 기술하라. 나. 아래 코드의 (B)와 (C)에 들어갈 내용을 C/C++

언어 문법에 맞게 정확히 기술하라.

=========================================

=========================================

다. list[] 배열의 list[1]부터 list[10]까지의 장소에 다음과 같이 10개의 정수가 저장되어 있다고 하자. (25, 0, 78, 48, 61, 13, 59, 15, -1, 18)만약 이 상태의 배열에 대해 adjust(list, 2, 10);과 같은 함수를 호출할 경우 위 배열의 내용이 어떻게 변할지 기술하라. 라. list[] 배열의 list[1]부터 list[10]까지의 장소에 다음과 같이 10개의 정수가 저장되어 있다고 하자. (60, 48, 59, 15, 19, 11, 26, 5, 0, 78)만약 이 상태의 배열에 대해 SWAP(list[1], list[9],

temp); adjust(list, 1, 8);과 같은 함수를 호출할 경우 위 배열의 내용이 어떻게 변할지 기술하라. 마. n개의 원소를 가지는 배열 list[]에 대해 위의heapsort() 함수를 호출할 경우, 이 함수의 첫 번째 for 문장 수행에 필요한 계산 비용을 Big-O 기호를 사용하여 기술하라. 바. (위 문제에 대해) 두 번째 for 문장 수행에 필요한 계산 비용을 Big-O 기호를 사용하여 기술하라.

서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일)

3

4. 다음은 min-max heap에 관한 문제이다. 가. list[] 배열의 list[1]부터 list[12]까지의 장소에 아래와 같이 저장되어 있는 min-max heap에서 값이 5인 원소를 삽입한 후의 list[1]부터 list[13]까지의 내용을 기술하라.

(7, 70, 40, 30, 9, 10, 15, 45, 50, 30, 20, 12) 나. list[] 배열의 list[1]부터 list[12]까지의 장소에 아래와 같이 저장되어 있는 min-max heap에서 가장 작은 원소를 제거한 후의 list[1]부터 list[11]까지의 내용을 기술하라.

(7, 70, 40, 30, 9, 10, 15, 45, 50, 30, 20, 12) 다. 다음은 min-max heap에서 가장 작은 원소를 제거해주는 함수이다. 문맥 상 min_element() 함수가 찾아주는 원소의 인덱스의 범위를 기술하라. (만약 인덱스가 4, 5, 6, 7, 8, 9의 값을 가질 수 있다면 [4, 9]와 같이 기술할 것. 배열의 크기는 매우 크다고 가정함)==============================element del_min(element heap[], int *s) {

int i, last, m, parent;

element temp, x;

if (!(*s)) {

heap[0].key = INT_MAX;

return(heap[0]);

}

heap[0] = heap[1];

x = heap[(*s)--];

for (i = 1, last = (*s) / 2; i <= last; ) {

m = min_element(i, *s);

if (x.key <= heap[m].key) break; <CASE-A>

heap[i] = heap[m];

if (m <= <HERE> ) {

i = m; break; <CASE-B>

}

parent = m / 2;

if (x.key > heap[parent].key)

SWAP(heap[parent], x, temp); <CASE-C>

i = m;

}

heap[i] = x;

return heap[0];

}

============================== 라. 이 함수가 제대로 작동하기 위해서 <HERE>에 들어갈 내용을 C/C++ 언어 문법에 맞게 정확히 기술하라. 마. 다음 그림의 네 가지 경우 중 프로그램의

<CASE-A> 옆의 break; 문장이 수행되는 경우의 번호

를 모두 기술하라.

==============================[경우 1]

[경우 2]

[경우 3]

[경우 4]

============================== 바. 위 그림의 네 가지 경우 중 프로그램의

<CASE-B> 옆의 break; 문장이 수행되는 경우의 번호

를 모두 기술하라.

사. 위 그림의 네 가지 경우 중 프로그램의

<CASE-C> 옆의 매크로 함수가 수행되는 경우의 번호

를 모두 기술하라.

서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일)

4

5. 다음은 Dijkstra의 Single-source Shortest Path 알고리즘에 관한 문제이다. 가. 다음과 같은 weighted directed graph에 대해,==============================

==============================vertex A를 source vertex로 하여 Dijkstra의 알고리즘을 적용할 경우 생성되는 (A를 root로 하는) spanning tree를 그려라. (화살표 방향에 주의할 것) 나. 아래는 이 알고리즘을 단계적으로 기술하고 있다.

여기서 l(u,v)는 서로 다른 vertex u와 v에 대해 어떤 값을 가진다고 가정할지, u와 v 사이에 꼭지점이 있을 경우와 그렇지 않을 경우로 나누어 기술하라. 다. 문맥상 8번 문장에서 지워진 부분에 들어갈 내용을 위 알고리즘의 기호를 사용하여 정확히 기술하라. 라. |V| = n이고 |E| = m인 그래프 G = (V, E)를 내부적으로 adjacency matrix를 사용하여 표현할 경우, 위 알고리즘의 시간 복잡도를 Big-O 기호를 사용하여 표현하라. 마. 이 문제의 마지막에는 위에서 기술한 알고리즘이 올바르게 원하는 결과를 산출한다는 사실에 대한 간략한 증명이 주어져 있다. 여기서 (HERE)에 들어갈 내

용을 v0, v, S 등의 기호를 사용하여 정확히 기술하라.

바. (HERE2) 부분에서 v는 P의 어떤 vertex를 의미

할지 기술하라.

사. (HERE3) 부분에서 공통적으로 들어갈 수식을 기

술하라.

==============================

==============================

6. 다음은 Floyd-Warshall 알고리즘에 관한 문제이다.==============================

============================== 가. 이 문제를 다음과 같은 recurrence relation을 사용하여 해결하려 한다. 과연 여기서 Ak[i][j]는 어떤 값을 가지는 변수인지 정확히 기술하라. ==============================

============================== 나. 위의 식에서 (HERE)에 들어갈 수식을 기술하라.

다. n개의 vertex로 구성된 그래프 G에 대해 위의 식을 사용하여 가급적 효율적으로 문제를 풀려고 할 때의 시간 복잡도를 Big-O 기호를 사용하여 기술하라. 라. 바로 위 문제의 시간 복잡도를 얻기 위하여 사용한 알고리즘 설계 방법의 이름은 무엇일까?

서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일)

5

7. 다음은 Huffman 코딩 알고리즘에 관한 문제이다. 가. 압축을 하려하는 어떤 문서를 분석한 결과 각 문자에 대한 빈도수는 다음과 같다.

문자 A B C D E F빈도수 46 13 20 10 5 6

이때 Huffman 코딩 알고리즘의 수행 결과 생성되는 각 문자의 Huffman 코드를 기술하라. (주의: 본 알고리즘에서 이진 트리 구축 시 항상 빈도수가 낮은 노드나 트리가 왼쪽(비트 0에 해당하는 쪽)에 와야 함. 빈도수가 같은 경우, height가 낮은 트리가 왼쪽에 오며, 둘 다 동일할 경우 A쪽에 가까운 문자를 포함하는 트리가 왼쪽에 옴)나. 아래의 코드는 Huffman 트리를 구축해주는 코드의 일부이다. 문맥상 <HERE>와 <HERE2> 부분에 들어갈 내용을 C/C++ 언어 문법에 맞게 정확히 기술하라. ==============================

typedef struct _node {

char symbol; int freq;

struct _node *left; struct _node *right;

} NODE;

NODE *u, *v, *w;

for (i = 1; i <= n; i++) { <HERE3>

/* insert the n single-node trees */

}

for (i = 1; i <= n-1; i++) {

<HERE>

w = make_a_new_node();

w->left = u; w->right = v;

w->freq = <HERE2>;

PQ_insert(w);

}

w = PQ_delete();

============================== 다. 위 프로그램에서 min heap에 기반을 두어 priority queue를 구현한다고 가정하자. 이때 <HERE3>의 for 문장에 대한 계산을 최대한 효율적으로 구현한다고 할 때 걸리는 시간을 Big-O 기호를 사용하여 기술하라. 라. 위 프로그램에서 min heap이 아니라 sorted array에 기반을 두어 priority queue를 구현한다고 가정하자. 이때 위의 프로그램의 수행하는데 필요한 총 시간비용을 Big-O 기호를 사용하여 기술하라. 마. Huffman 코딩 알고리즘은 각각의 문자를 한 개의 원소를 가지는 트리로 초기화 한 후, 반복적으로 두 개의 트리를 선택하여 결합하면서 한 개의 트리가 나올 때까지 진행된다. (즉 위의 프로그램에서와 같이 n개의 문자에 대해 n-1 번의 동일한 과정이 반복된다) 이때 매 단계에서 어떤 두 트리가 선택이 되는지 정확히 기술하라. 바. 다음은 Huffman 코딩 기법이 최적의 코드를 생성

함을 보이는 증명에 관한 그림이다. ==============================

==============================이제 다음과 같은 Huffman 코딩 알고리즘에 대한 증명의 일부를 살펴보자. ==============================S를 i 번째 단계라 끝났을 때까지 구축된 트리들의 집

합이라고 하자. 또한 u와 v를 각각 현재 (i+1)번째 단계

에서 결합이 되는 두 트리의 루트 노드라 하자. 만약 u

와 v가 최적의 트리 T에서 형제 관계라면 증명 끝. 만

약 그렇지 않다면 (위의 그림에서와 같이) u의 깊이가

v의 깊이보다 같거나 크고, 이때 T에서 w가 u의 형제

라고 가정하자. 이때 w를 루트 노드로 하는 T의

branch를 생각하면, 이 branch는 S에 속하는 트리이거

나 S의 트리들을 내부에 포함한다. (왜냐하면, u를 루

트로 하는 branch가 S에 속해야하므로, S의 트리가 w

노드를 벗어날 수 없음)

==============================지금 어떤 노드 u에 대해 f(u)를 u를 root로 하는 branch에 포함되는 모든 문자들의 빈도수의 합이라고 하자. 위에서 밑줄 친 마지막 문장은 f(u), f(v), 그리고 f(w)값 간에 어떤 관계를 암시하는지, 이를 수식으로 정확히 표현하라. 사. (위 문제에 이어) 지금 어떤 노드 u에 대해 d(u)를 해당 트리 내에서 u의 root node로부터의 깊이라 하자. 위 그림에서 왼쪽 트리 T에 대해 각각 v와 w를 루트로 하는 branch를 서로 바꾸어 새로운 트리 T'(오른쪽 트리)를 생성하였는데, 이때 전체 문서를 암호화하는데 있어 증가하는 비용 bit(T') - bit(T)를 위의 d()와 f() 함수를 사용하여 표현하라.

8. 다음과 같은 scheduling 문제를 고려하자.==============================

============================== 가. 아래에 주어진 11개의 activity로 구성된 집합 A에

서강대학교 공과대학 컴퓨터공학과 CSE3081 알고리즘 설계와 분석(2반) 기말고사 (2015년 12월 17일)

6

대해 위 문제에서 요구하는 activity 집합 S를 구하라. (즉 A의 부분집합인 S의 원소들을 해당하는 ai들로 표현할 것)

i 1 2 3 4 5 6 7 8 9 10 11si 3 3 0 1 11 8 5 2 6 5 8fi 6 8 6 4 14 12 9 13 10 7 11

나. 다음은 이 문제를 해결해주는 한 알고리즘의 일부이다. 이 알고리즘이 올바르게 작동하기 위하여 어느 부분에 어떠한 계산이 추가되어야 하는지 정확히 기술하라.==============================

==============================다. 문제의 크기 n에 대하여 위 알고리즘의 시간 복잡

도(위 문제의 내용이 추가된 후)를 Big-O 기호를 사용하여 표현하라.

9. 다음과 같은 scheduling 문제를 고려하자.==============================

==============================아래에 주어진 6개의 job으로 구성된 집합 J에 대해 위 문제에서 요구하는 최적의 schedule S를 구하라. (답은 수행이 되는 순서대로 job의 번호를 기술하고, 최종 maximum lateness L 값을 기술할 것)

i 1 2 3 4 5 6ti 2 1 3 3 4 2di 15 8 6 14 9 7

10. 다음의 단답식 질문에 답하라. 가. |V| = n인 undirected graph G = (V, E)의 임

의의 두 vertex 사이에는 항상 정확히 한 개의 path만

이 존재할 때, 이 그래프의 |E|값은?

나. 다음은 forest라는 그래프의 정의이다. A forest is an undirected graph, all of whose connected components are trees.

|V| = n이고 |E| = m인 forest G = (V, E)가 k개

의 connected component를 가질 경우, m을 n과 k의

식으로 표현하라.

다. 어떤 undirected graph가 simple graph라는 것은 넓은 의미의 general graph에서 어떤 두 가지 경우가 없어야 한다. 그 두 가지가 무엇일까? 라. 다음 괄호 안에 들어갈 정확한 용어를 영어 단어로 기술하라.

Two vertices v and w of a graph G are said to be adjacent if there is an edge joining them. The vertices v and w are then said to be ( ) to such an edge.

마. 다음 괄호 안에 들어갈 정확한 용어를 영어 단어로 기술하라.

A simple graph in which every pair of distinct vertices are adjacent is called a ( ) graph.

바. 다음 괄호 안에 들어갈 정확한 용어를 영어 단어로 기술하라.

A ( ) is a connected graph that has no articulation points.

사. |V| = n이고 |E| = m인 그래프 G = (V, E)를 adjacency matrix로 표현한 후, depth first search를 수행할 경우 시간 복잡도를 Big-O 기호를 사용하여 표현하라. 아. |V| = n이고 |E| = m인 그래프 G = (V, E)를 adjacency list로 표현한 후, 한 꼭지점 u에서 또 다른 꼭지점 v까지 경로가 존재하는지 여부를 가급적 효율적으로 판별하려 한다. 이러한 계산의 시간 복잡도를 Big-O 기호를 사용하여 표현하라. 자. 그래프에 대한 추가적인 정보가 없는 상태에서 “insert edge”, “find if v is isolated”, “destroy”, “remove edge” 등의 그래프 연산 중 adjacent matrix나 adjacent list 중 어떤 자료구조를 사용하여 구현하건 (최악의 경우의) 비용이 동일한 연산은 어떤 것이며, 그때의 비용을 위 문제의 n과 m을 사용하여 Big-O 기호를 통하여 기술하라. 차. |V| = n인 tree graph G = (V, E)를

adjacency matrix로 표현한 후, breadth first search를 수행할 경우 시간 복잡도를 Big-O 기호를 사용하여 n의 함수로 표현하라. 카. |V| = n인 tree graph G = (V, E)를

adjacency list로 표현한 후, breadth first search를 수행할 경우 시간 복잡도를 Big-O 기호를 사용하여 n의 함수로 표현하라.

수고 많았습니다!