chap01_time_complexity.key

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

11강-힙정렬.ppt

03장.스택.key

03_queue

chap 5: Trees

untitled

6장정렬알고리즘.key

Chapter 4. LISTS

Chapter 4. LISTS

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

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

Chapter 4. LISTS

untitled

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은


o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

C프로-3장c03逞풚

Chap 6: Graphs

OCaml

K&R2 Reference Manual 번역본

슬라이드 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 includ

ABC 10장

06장.리스트

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

Microsoft Word - FunctionCall

chap x: G입력

슬라이드 1

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

10주차.key

Microsoft PowerPoint - 07-chap05-Stack.ppt

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

untitled

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

슬라이드 제목 없음

PowerPoint 프레젠테이션

untitled

데이터구조 (Chapter 3: Stacks and Queues) 2011 년봄학기 숙명여자대학교이과대학멀티미디어과학과박영호

Microsoft Word - ExecutionStack

쉽게 배우는 알고리즘 강의노트

Algorithms

슬라이드 1

슬라이드 1

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

Microsoft PowerPoint - 자료구조2008Chap06

13주-14주proc.PDF

슬라이드 1

2. QUEUE OPERATIONS Initialize the queue Insert to the rear of the queue (also called as Enqueue) Remove (Delete) from the front of the queue (also ca

슬라이드 1

중간고사 (자료 구조)

Microsoft PowerPoint - ch07_스택 [호환 모드]

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

11장 포인터

슬라이드 1

untitled

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

2002년 2학기 자료구조

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

chap x: G입력

CompareAndSet(CAS) 함수는 address 주소의값이 oldvalue 인지비교해서같으면 newvalue 로 바꾼다. 소프트웨어 lock 을사용하는것이아니고, 하드웨어에서제공하는기능이므로더빠르고 간편하다. X86 에서는 _InterlockedCompareEx

UI TASK & KEY EVENT

4장

»ê¾÷¿¬±¸¿øÇ¥Áö

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

C 언어 강의노트

Microsoft PowerPoint - ch08_큐 [호환 모드]

Microsoft PowerPoint - chap-11.pptx

슬라이드 1

chap8.PDF

untitled

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M.

본 강의에 들어가기 전

슬라이드 1

Microsoft PowerPoint - 08-Queue.ppt

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

chap x: G입력

歯9장.PDF

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

문서의 제목 나눔명조R, 40pt

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

PowerPoint 프레젠테이션

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

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

USER GUIDE

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

1장. 리스트

Javascript.pages

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft PowerPoint - 08-chap06-Queue.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

, ( ),, ( ), 3, int kor[5]; int eng[5]; int Microsoft Windows 4 (ANSI C2 ) int kor[5] 20 # define #define SIZE 20 int a[10]; char c[10]; float

09-interface.key

untitled

hlogin7

; 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

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

Transcription:

1 :

(resource),,, 2

(time complexity),,, (worst-case analysis) (average-case analysis) 3

(Asymptotic) n growth rate Θ-, Ο- ( ) 4

: n data, n/2. int sample( int data[], int n ) { int k = n/2 ; return data[k] ; n. O(1). 5

: n data,. int sum(int data[], int n) { int sum = 0 ; for (int i = 0; i < n; i++) sum = sum + data[i]; return sum;, n. n n, n. O(n). 6

: data target. int search(int n, int data[], int target) { for (int i=0; i<n; i++) { if (data[i] == target) return i; return -1;, n. O(n). 7

Quadratic x. bool is_distinct( int n, int x[] ) { for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) if (x[i]==x[j]) return false; return true;, n(n-1)/2. n(n-1)/2. O(n 2 ). 8

? for (i=1; i<n; i*=2) { // Do something? 9

10

f(n) 2 O(g(n)) if there exist constant c>0 and n 0 0 such that for all n n 0 we have f(n) apple cg(n) f(n) = 32n 2 + 17n 2 32 f(n) 2 O(n 2 ) but also f(n) 2 O(n 3 ) and O(n 2 log n) 11

f(n) 2 (g(n)) if there exist constant c>0 and n 0 0 such that for all n n 0 we have f(n) cg(n). f(n) = 32n 2 + 17n 2 32 f(n) 2 (n 2 ) but also f(n) 2 (n) and (n log n) 12

:Θ- f(n) 2 (g(n)) if there exist constants c 1 > 0,c 2 > 0, and n 0 0 such that for all n n 0 we have 0 apple c 1 g(n) apple f(n) apple c 2 g(n). f(n) 2 (g(n)) if f(n) 2 O(g(n)) and f(n) 2 (g(n)) f(n) = 32n 2 + 17n 2 32 f(n) 2 (n 2 ) but f(n) 62 (n 3 ),f(n) 62 (n) 13

f(n) =O(g(n)) f(n) 2 O(g(n)) k 0 O(n k ) f(n) =c k n k + c k 1 n k 1 + + c 1 n + c 0 = O(n k ) p q O(n max{p,q ) If g(n) =O(n p ) and h(n) =O(n q ), then f(n) =g(n)+h(n) =O(n max(p,q) ) 14

A B A = O(B)? A = (B)? log k n n k p n n c n n sin n 2 n 2 n/2 n log c c log n log(n!) log(n n ) 15

16 Common Growth Rate

17 Common Growth Rate

18 Common Growth Rate

19

20

(Binary Search). target Dustin Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first = 0 middle = 3 last = 6 21

(Binary Search). target Dustin Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first = 0 last = 2 middle = 1 22

(Binary Search). target Dustin Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first= middle = last = 2 23

data n. int binarysearch(int n, char *data[], char *target) { int begin = 0, end = n-1; while(begin <= end) { int middle = (begin + end)/2; int result = strcmp(data[middle], target); if (result == 0) return middle; else if (result < 0) begin = middle+1; else end = middle-1; return -1;. O(log2n). 24

? (middle) O(1). O(n) O(log2n).. 25

(bubble sort) void bubblesort(int data[], int n) { for ( int i=n-1; i>0; i--) { for ( int j=0; j<i; j++ ) { if (data[j] > data[j+1]) { int tmp = data[j]; data[j] = data[j+1]; data[j+1] = tmp;? 26

(Insertion sort) 8 4 1 7 11 13 5 2 void insertion_sort(int n, int data[]) { for ( int i=1; i<n; i++) { int tmp = data[i]; int j = i-1; while (j>=0 && data[j]>data[i]) { data[j+1] = data[j]; j ; data[j+1] = tmp; data[i] 를 data[0] ~ data[i-1] i 4 8 1 7 11 13 5 2 i 1 4 8 7 11 13 5 2 i 1 4 7 8 11 13 5 2 i? 27

(quicksort) O(n 2 ), O(nlog2n) O(nlog2n) (merge sort) (heap sort)? 28

Code Review 29

push and pop: void push(stack s, Item i) { if (is_full(s)) reallocate(s); s->top++; s->contents[s->top] = i; Item pop(stack s) { if (is_empty(s)) terminate("error in pop: stack is empty. ); s->top -; return s->contents[s->top+1]; n reallocate O(n). reallocate O(1). pop() O(1). 30

push and pop: void push(stack s, Item i) { struct node *new_node = malloc(sizeof(struct node)); if (new_node == NULL) terminate("error in push: stack is full."); new_node->data = i; new_node->next = s->top; s->top = new_node; Item pop(stack s) { struct node *old_top; Item i; if (is_empty(s)) terminate("error in pop: stack is empty."); old_top = s->top; i = old_top->data; s->top = old_top->next; free(old_top); return i; push pop O(1). 31

enqueue and dequeue reallocate enqueue dequeue O(1). enqueue dequeue O(1). 32

(ordered list) : void insert_to_ordered_array(int n, int data[], int item) { int i = n-1; for (; i>=0 && data[i]>item; i--) data[i+1] = data[i]; data[i+1] = item; O(n). 33

(ordered list) : Node *insert_to_ordered_linked_list(node *head, int item) { Node *new_node = (Node *)malloc(sizeof(node)); new_node->data = item; new_node->next = NULL; Node *p = head, *q=null; while (p!=null && p->data < item) { q = p; p = p->next; if (q==null) { new_node->next = head; head = new_node; else { new_node->next = p; q->next = new_node; return head; O(n)... 34

a b 1 5 6 9 12 15 2 3 10 11 23 A B m n C. c 1 2 3 5 6 9 void merge_sorted_arrays(int m, int a[], int n, int b[], int c[]) { for (int i=0; i<m; i++) a c c[i] = a[i]; for (int j=0; j<n; j++) b c insert. insert_to_ordered_array(m+j, c, b[j]); O(mn). 35

a 1 5 6 9 12 15 b 2 3 10 11 23 c void merge_sorted_arrays_linear(int m, int a[], int n, int b[], int c[]) { int i=0, j=0, k=0; while (i<m && j<n) { if (a[i] <= b[j]) c[k++] = a[i++]; else c[k++] = b[j++]; while(i<m) c[k++] = a[i++]; while(j<n) c[k++] = b[j++]; O(m+n). 36

Node *merge_two_ordered_list(node *first, Node *second) { /* insert nodes of the second list into the first list */ Node *p = second; Node *q = first; while (p!=null) { Node *the_node = p; p = p->next; first = insert_to_ordered_list(first); return first; O(mn). 37

2 Node *merge_two_ordered_lists2(node *first, Node *second) { Node *head = NULL, *tail = NULL; Node *tmp; while (first!= NULL && second!= NULL) { if (first->data <= second->data) { tmp = first; first = first->next; else { tmp = second; second = second->next; first tmp->next = NULL; if (tail == NULL) { head = tail = tmp; else { tail->next = tmp; tail = tmp; second head tail 38

2 first NULL if (first!= NULL) tail->next = first; else if (second!= NULL) tail->next = second; return head; second head tail O(m+n). 39

3 Node *merge_two_ordered_list3(node *first, Node *second) { /* insert nodes of second into first */ Node *p = second; Node *q = first, *pre_q = NULL; while (p!=null) { Node *the_node = p; p = p->next; while(q!=null && q->data < the_node->data) { pre_q = q; q = q->next; if (pre_q == NULL) { /* add p at the front */ the_node->next = first; first = the_node; else { /* add after pre_q */ the_node->next = q; pre_q->next = the_node; pre_q = the_node; return first; O(m+n). 40

Node *inverse_list(node *head) { if (head == NULL head->next == NULL) return head; Node *p = head; Node *q = NULL; /* before p */ Node *r = p->next; /* next to p */ while (p!= NULL) { p->next = q; q = p; p = r; if (r!=null) r = r->next; return q; O(n). 41

Node *remove_all_divisible(node *head, int divisor) { Node *p = head; Node *q = NULL, *deleted = NULL; while(p!=null) { if (p->data%divisor == 0) { if (q==null) head = p->next; else q->next = p->next; deleted = p; p = p->next; free(deleted); else { q = p; p = p->next; return head; O(n). 42

int maze() { Stack s = create(); Position cur; cur.x = 0; cur.y = 0; int init_dir = 0; /* */ while(1) { maze[cur.x][cur.y] = VISITED; /* visited */ if (cur.x == n-1 && cur.y == n-1) { break; bool forwarded = false; for (int dir = init_dir; dir<4; dir++) { if (movable(cur, dir)) { push(s, dir); cur = move_to(cur, dir); forwarded = true; init_dir = 0; break; if (!forwarded) { maze[cur.x][cur.y] = BACKTRACKED; /* backtracked */ if (is_empty(s)) break; int d = pop(s); cur = move_to(cur, (d+2)%4); init_dir = d+1; 2 4. O(n 2 ). 43

Queue queue = create_queue(); Position cur; cur.x = 0; cur.y = 0; enqueue(queue, cur); maze[0][0] = -1; bool found = false; while(!is_empty(queue)) { Position cur = dequeue(queue); for (int dir=0; dir<4; dir++) { if (movable(cur, dir)) { Position p = move_to(cur, dir); maze[p.x][p.y] = maze[cur.x][cur.y] - 1; if (p.x == n-1 && p.y == n-1) { printf("found the path.\n"); found = true; break; enqueue(queue, p); 2. O(n 2 ). 44