Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ

Similar documents
Line (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max


서강대학교공과대학컴퓨터공학과 CSE3081 알고리즘설계와분석 (2 반 ) 기말고사 (2015 년 12 월 17 일 ) 알고리즘설계와분석 (CSE3081(2 반 )) 기말고사 (2015년 12월17일 ( 목 ) 오전 9시 30분 ) 담당교수 : 서강대학교컴퓨터공학과임인성

chap 5: Trees

11강-힙정렬.ppt

chap01_time_complexity.key

Chap 6: Graphs

Chap 6: Graphs

Chapter 4. LISTS


Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

6장정렬알고리즘.key

chap8.PDF

10주차.key

untitled

Microsoft PowerPoint - Chap5 [호환 모드]

Microsoft PowerPoint - ch12 - Graph, Graph Algorithms

2002년 2학기 자료구조

K&R2 Reference Manual 번역본

슬라이드 제목 없음

Chap 6: Graphs

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Index

PowerPoint Presentation

11장 포인터

03장.스택.key

신림프로그래머_클린코드.key

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint 프레젠테이션

Chapter 4. LISTS

C++-¿Ïº®Çؼ³10Àå

기본자료형만으로이루어진인자를받아서함수를결과값으로반환하는고차함수 기본자료형과함수를인자와결과값에모두이용하는고차함수 다음절에서는여러가지예를통해서고차함수가어떤경우에유용한지를설명한다. 2 고차함수의 예??장에서대상체만바뀌고중간과정은동일한계산이반복될때함수를이용하면전체연산식을간 단

03_queue

WISHBONE System-on-Chip Interconnection Architecture for Portable IP Cores

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

OCaml

untitled

Modern Javascript

13주-14주proc.PDF

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

chap x: G입력

Javascript.pages

Chapter 4. LISTS

Microsoft PowerPoint - 27.pptx

sna-node-ties

5.스택(강의자료).key

2007_2_project4

C 언어 프로그래밊 과제 풀이

PowerPoint 프레젠테이션

Frama-C/JESSIS 사용법 소개

PowerPoint 프레젠테이션

09-interface.key

06장.리스트

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

07 자바의 다양한 클래스.key

untitled

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

untitled

BMP 파일 처리

Microsoft PowerPoint - ch12 - Graph, Graph Algorithms

UI TASK & KEY EVENT

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

chap 5: Trees

ePapyrus PDF Document

정의 이진탐색트리 이진탐색트리 (BST: binary search tree) 는각각의노드가 BST 특성을만족하는키 - 주소쌍을가지고있는이진트리 BST 특성 트리에있는각각의키에대해, 왼쪽서브트리에있는모든키는이것보다작고, 오른쪽서브트리에있는모든키는이것보다큼 < > 2

02 C h a p t e r Java

C# Programming Guide - Types

/chroot/lib/ /chroot/etc/

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

슬라이드 1

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

강의10

C 언어 강의노트

슬라이드 1

Week5

untitled

슬라이드 1

KEY 디바이스 드라이버

7장

C프로-3장c03逞풚

12-file.key

UI TASK & KEY EVENT

컴파일러

선형자료구조 16.1 그래프 배열, 스택, 큐, 리스트를사용하여해결할수있다. 비선형자료구조 순환, 트리, 이진트리로복잡한문제를해결한다. 그래프 (graph) ; 인터넷과같은통신네트워크나고속도로나철도와같은교통네트워크에적합하다. 그래프 (graph) 링크에의해연결되어있는노

(JBE Vol. 21, No. 1, January 2016) (Regular Paper) 21 1, (JBE Vol. 21, No. 1, January 2016) ISSN 228

Data structure: Assignment 3 Seung-Hoon Na December 14, 2018 레드 블랙 트리 (Red-Black Tree) 1 본 절에서는 레드 블랙 트리를 2-3트리 또는 2-3-4트리 대한 동등한 자료구조로 보고, 두 가지 유형의 레

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

PowerPoint 프레젠테이션

Lab 3. 실습문제 (Single linked list)_해답.hwp

4 CD Construct Special Model VI 2 nd Order Model VI 2 Note: Hands-on 1, 2 RC 1 RLC mass-spring-damper 2 2 ζ ω n (rad/sec) 2 ( ζ < 1), 1 (ζ = 1), ( ) 1

Microsoft PowerPoint - IP11.pptx

04_오픈지엘API.key

PowerPoint Presentation

5장.key

untitled

Transcription:

알고리즘설계와분석 (CSE3081(2 반 )) 기말고사 (2016년 12월15일 ( 목 ) 오전 9시40분 ~) 담당교수 : 서강대학교컴퓨터공학과임인성 < 주의 > 답안지에답을쓴후제출할것. 만약공간이부족하면답안지의뒷면을이용하고, 반드시답을쓰는칸에어느쪽의뒷면에답을기술하였는지명시할것. 연습지는수거하지않음. function MakeSet(x) { x.parent := x; x.rank := 0; function Find(x) { if (x.parent == x) return x; else return here ; function Union(x, y) { xroot := Find(x); yroot := Find(y); if (xroot == yroot) return; if ( there-1 ) xroot.parent := yroot; else if ( there-2 ) yroot.parent := xroot; else { yroot.parent := xroot; xroot.rank := xroot.rank + 1; Find(x) x here Union(x) there-1 there-2 Union(x) Union(x) Find(x) herethere function Find(x) { if (x.parent!= x) x.parent := herethere ; return x.parent; KRUSKAL(G, w) { 1. A := ; 2. for each v V 3. MakeSet(v); 4. Sort the edges in E by non-increasing weight; 5. for each edge (u, v) E in the sorted order { 6. if ( here ) { 7. A := A {(u, v); 8. Union(u, v); 9. 10. 11. return A; 12. here Find(x) 1

Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is included in some minimum spanning tree for G, let (S, V-S) be any cut of G that respects A, and let (u, v) be a light edge crossing (S, V-S). Then, edge (u, v) is safe for A. let (S, V-S) be any cut of G that respects A edge (u, v) is safe for A here 2

A linear ordering of all its vertices such that if G contains an edge (u, v), then here in the ordering. F[i][ j] = F[i][j] there ; return (F[n][L]); here there 3 Level 1 2 2 Level 2 Merge-Lists(, + ) 1 1 1 1 Level 3 0 0 0 0 0 0 0 0 Level 4 Trim(L, ) F[0][0] = TRUE; for (i = 1; i <= t; i++) F[0][i] = FALSE; for (i = 1; i <= n; i++) { for (j = 0; j <= t; j++) { F[i][ j] = here ; if ( j - x[i] >= 0) 3

Trim(*) here APPROX_SUBSET_SUM(*) Trim(, / ) APPROX_SUBSET_SUM(*) whichone i d i g i 1 3 120 2 1 115 3 4 105 4 1 100 5 3 90 6 2 85 7 6 80 8 4 50 9 5 40 4

character frequency a 10 e 15 i 12 s 3 t 5 sp(space) 13 nl(newline) 1 5

struct AdjListNode { int dest; int weight; struct AdjListNode* next; ; struct AdjList { struct AdjListNode *head; ; // Size of array will be V (number of vertices in graph) struct Graph { int V; struct AdjList* array; ; struct MinHeapNode { int v; int dist; ; struct MinHeap { int size; // Number of heap nodes present currently int capacity; // Capacity of min heap int *pos; // This is needed for decreasekey(). struct MinHeapNode **array; ; struct MinHeapNode* newminheapnode(int v, int dist) { struct MinHeapNode* minheapnode = (struct MinHeapNode*) malloc(sizeof (struct MinHeapNode)); minheapnode->v = v; minheapnode->dist = dist; return minheapnode; struct MinHeap* createminheap(int capacity) { struct MinHeap* minheap = (struct MinHeap*) malloc(sizeof(struct MinHeap)); minheap->pos = (int *) malloc(capacity * sizeof(int)); minheap->size = 0; minheap->capacity = capacity; minheap->array = (struct MinHeapNode**) malloc(capacity * sizeof(struct MinHeapNode*)); return minheap; void dijkstra(struct Graph* graph, int src) { int V = graph->v; int dist[n_max_vertices]; struct MinHeap* minheap = createminheap(v); for (int v = 0; v < V; ++v) { dist[v] = INT_MAX; minheap->array[v] = newminheapnode(v, dist[v]); minheap->pos[v] = v; minheap->size = V; dist[src] = 0; decreasekey(minheap, src, dist[src]); // Line C while (!isempty(minheap)) { struct MinHeapNode* minheapnode = extractmin(minheap); // Line A int u = minheapnode->v; struct AdjListNode* pcrawl = graph->array[u].head; while (pcrawl!= NULL) { // Point A int v = pcrawl->dest; if (isinminheap(minheap, v) && dist[u]!= INT_MAX && (here) < dist[v]) { dist[v] = (here) ; decreasekey(minheap, v, dist[v]); // Line B pcrawl = pcrawl->next; // print the calculated shortest distances printarr(dist, V); dijkstra(*) Line A extractmin(minheap); dijkstra(*) Point A dijkstra(*) Line A extractmin(minheap); dijkstra(*) Line B decreasekey(minheap, v, dist[v]); (here) decreasekey(*) void swapminheapnode(struct MinHeapNode** a, struct MinHeapNode** b) { struct MinHeapNode* t = *a; *a = *b; *b = t; 6

void decreasekey(struct MinHeap* minheap, int v, // Get the index of v in heap array int i = minheap->pos[v]; minheap->array[i]->dist = dist; while (i && minheap->array[i]->dist int dist) { < minheap->array[ (there) ]->dist) { minheap->pos[minheap->array[i]->v] = (there) ; minheap->pos[minheap->array[ (there) ]->v] = i; swapminheapnode(&minheap->array[i], i = (herethere) ; &minheap->array[ (there) ]); (there) decreasekey(*) (herethere) dijkstra(*) Line C dijkstra(*) extractmin(minheap) void minheapify(struct MinHeap* minheap, int idx) { int smallest, left, right; smallest = idx; left = (here) ; right = (there) ; // Line A = minheap->array[smallest]; MinHeapNode *idxnode = minheap->array[idx]; minheap->pos[smallestnode->v] = idx; minheap->pos[idxnode->v] = smallest; swapminheapnode(&minheap->array[smallest], (herethere) ; // Line B int isempty(struct MinHeap* minheap) { return minheap->size == 0; &minheap->array[idx]); struct MinHeapNode* extractmin(struct MinHeap* minheap) { if (isempty(minheap)) return NULL; struct MinHeapNode* root = minheap->array[0]; struct MinHeapNode* lastnode = minheap->array[minheap->size - 1]; minheap->array[0] = lastnode; minheap->pos[root->v] = minheap->size - 1; minheap->pos[lastnode->v] = 0; minheapify(minheap, 0); return root; minheapify(minheap, 1); if (left < minheap->size && minheap->array[left]->dist < minheap->array[smallest]->dist) smallest = left; if (right < minheap->size && minheap->array[right]->dist < minheap->array[smallest]->dist) smallest = right; if (smallest!= idx) { MinHeapNode *smallestnode Line A (here) (there) idx // Line B 7

(herethere) extractmin(*) minheap->size extractmin(*) 수고했습니다. 8