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

Similar documents
-09- 학습목표 기본정렬알고리즘을이해한다. 정렬을귀납적관점에서볼수있도록한다. 1 장과 2 장에서배운기법을사용해각정렬의수행시간을분석할수있도록한다. 비교정렬의한계를이해하고, 선형시간정렬이가능한조건과선형시간정렬알고리즘을이해한다. - - 한빛미디어 Sortng Algorth

Algorithms

6장정렬알고리즘.key

chap 5: Trees

슬라이드 1

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

Microsoft PowerPoint - ch11_정렬 [호환 모드]

chap01_time_complexity.key

2002년 2학기 자료구조

Ch.8 Procedures and Environments

정렬 강의자료

정보

11강-힙정렬.ppt

쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

(실제 구현은 더욱 단순하다). 다음은 배열의 길이 n과 간격비 K의 서로 다른 셋팅에 대한 셸 정렬의 진행 순서에 대한 예이다. 1. n = 150, K = 3인 경우, Eq. (2)에 따라 m = 5이다. 즉, 셀 정렬은 총 5 단계를 거치며 (m = 5), 121

<4D F736F F F696E74202D203728B0E8BBEABAB9C0E2B5B5B0B3B7D02DC1A4B7C4B9AEC1A6292E BC8A3C8AF20B8F0B5E55D>

<FEFF E002D B E E FC816B CBDFC1B558B202E6559E830EB C28D9>

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

Microsoft PowerPoint 알고리즘 개요(Part 1).pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - 5장 정렬

쿠폰형_상품소개서

06_sorting

PowerPoint 프레젠테이션

Chapter 4. LISTS

슬라이드 1

Visual Basic 반복문

Microsoft PowerPoint - 26.pptx

슬라이드 1

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

01장.자료구조와 알고리즘

중간고사

I care - Do you?

Microsoft PowerPoint - 05알고리즘.pptx

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

슬라이드 1

Microsoft PowerPoint Merging and Sorting Files.ppt

자연언어처리


슬라이드 1

슬라이드 1

정렬문제란크기비교가가능한데이터의시퀀스를오름또는내림차순으로재배치하는문제를말한다. 즉, 다음의정수리스트를오름차순으로정렬하면, [4,2,3,1,6,8,3,2,6,7] 다음과같이된다. [1,2,2,3,3,4,6,6,7,8] 이장에서는정수리스트를오름차순으로정렬하는함수를다양한알고

슬라이드 1

PowerPoint Presentation

Chapter 4. LISTS

chap 5: Trees

Frama-C/JESSIS 사용법 소개

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

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

Microsoft PowerPoint Relations.pptx

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

09J1_ _R.hwp

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

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

Chapter 4. LISTS

슬라이드 1

chap x: G입력

Microsoft PowerPoint - chap11-포인터의활용.pptx

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

Microsoft PowerPoint - Java7.pptx

Discrete Mathematics

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

설계란 무엇인가?


<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

11장 포인터

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

Microsoft PowerPoint - 04알고리즘

OCW_C언어 기초


Microsoft PowerPoint - Chap5 [호환 모드]

1 경영학을 위한 수학 Final Exam 2015/12/12(토) 13:00-15:00 풀이과정을 모두 명시하시오. 정리를 사용할 경우 명시하시오. 1. (각 6점) 다음 적분을 구하시오 Z 1 4 Z 1 (x + 1) dx (a) 1 (x 1)4 dx 1 Solut

제 2 교시 2019 학년도 3 월고 1 전국연합학력평가문제지수학영역 1 5 지선다형 1. 의값은? [2점] 일차방정식 의해는? [2 점 ] 두수, 의최대공약수는? [2 점 ] 일차함수 의그래프에서

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04알고리즘

Microsoft PowerPoint - 6장 탐색.pptx

2학년 1학기 1,2단원 1 차례 세 자리의 수 1-1 왜 몇 백을 배워야 하나요? 1-2 세 자리 수의 자릿값 알아보기와 크기 비교하기 1-3 뛰어 세기와 수 배열표에서 규칙 찾기 1단원 기본 평가 단원 창의 서술 논술형 평가 22 1단원 심화 수

2_안드로이드UI

PowerPoint 프레젠테이션

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

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

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

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

2007_2_project4

슬라이드 1

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

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

7장

입학사정관제도

statistics


adfasdfasfdasfasfadf

Microsoft PowerPoint - chap06-2pointer.ppt

2 장수의체계 1. 10진수 2. 2진수 3. 8진수와 16진수 4. 진법변환 5. 2진정수연산과보수 6. 2진부동소수점수의표현 한국기술교육대학교전기전자통신공학부전자전공 1

Transcription:

쉽게배우는알고리즘 장. 정렬 Sorting http://www.hanbit.co.kr

장. 정렬 Sorting 은유, 그것은정신적상호연관성의피륙을짜는방법이다. 은유는살아있다는것의바탕이다. - 그레고리베이트슨 - 2 -

학습목표 기본정렬알고리즘을이해한다. 정렬을귀납적관점에서볼수있도록한다. 1 장과 2 장에서배운기법을사용해각정렬의수행시간을분석할수있도록한다. 비교정렬의한계를이해하고, 선형시간정렬이가능한조건과선형시간정렬알고리즘을이해한다. - -

Sorting Algorithms 대부분 O(n 2 ) 과 O(nlogn) 사이 Input 이특수한성질을만족하는경우에는 O(n) sorting 도가능 E.g., input 이 O(n) 과 O(n) 사이의정수 - 4 -

원시적 Sorting 알고리즘들의재조명 알고리즘을보는시각 flow 중심 관계중심 원시적정렬알고리즘들을관계중심의시각으로다시한번조명 생각하는방법에대한좋은연습자료 - 5 -

Selection Sort 각루프마다 최대원소를찾는다 최대원소와맨오른쪽원소를교환한다 맨오른쪽원소를제외한다 하나의원소만남을때까지위의루프를반복 - 6 -

Finding the Recursive Structure The largest item 수행시간 : (n-1)+(n-2)+ +2+1 = O(n 2 ) - 7 - Worst case Average case

selectionsort(a[], n) 배열 A[1... n] 을정렬한다 { for last n downto 2 { ------------------ 1 A[1... last] 중가장큰수 A[k] 를찾는다 ; ----------- 2 A[k] A[last]; A[k] 와 A[last] 의값을교환 -------- } } 수행시간 : 1 의 for 루프는 n-1 번반복 2 에서가장큰수를찾기위한비교횟수 : n-1, n-2,, 2, 1 의교환은상수시간작업 (n-1)+(n-2)+ +2+1 = O(n 2 ) - -

정렬할배열이주어짐 1 4 가장큰수를찾는다 (7) 7 IT COOKBOOK Selection Sort 의작동예 1 4 7 7 을맨오른쪽수 () 와자리바꾼다 1 의첫번째 loop 1 4 7 맨오른쪽수를제외한나머지에서가장큰수를찾는다 () 1 4 7 를맨오른쪽수 () 와자리바꾼다 1 의두번째 loop 1 4 7 맨오른쪽두수를제외한나머지에서가장큰수를찾는다 (4) 1 4 7... 을맨오른쪽수 () 와자리바꾼다 1 4 7 최종배열 1 4-9 - 7

Bubble Sort 수행시간 : (n-1)+(n-2)+ +2+1 = O(n 2 ) - 10 - Worst case Average case

bubblesort(a[], n) A[1... n] 을정렬한다 { for last n downto 2 ----------------- 1 for i 1 to last-1 ------------------ 2 if (A[i] > A[i+1]) then A[i] A[i+1]; 원소교환 -- } 수행시간 : 1 의 for 루프는 n-1 번반복 2 의 for 루프는각각 n-1, n-2,, 2, 1 번반복 은상수시간작업 (n-1)+(n-2)+ +2+1 = O(n 2 ) - -

정렬할배열이주어짐 1 4 7 Bubble Sort 의작동예 왼쪽부터시작해이웃한쌍들을비교해간다 1 4 7 순서대로되어있지않으면자리바꾼다 1 4 7 1 4 7 1 4 7 1 4 7 맨오른쪽수 (7) 를대상에서제외한다 1 4 7-12 -

왼쪽부터시작해이웃한쌍들을비교해간다 1 4 7 순서대로되어있지않은경우에는자리바꾼다 1 4 7 1 4 7 1 4 7 1 4 7 1 4 7 1 4 7 맨오른쪽수 () 를대상에서제외한다 1 4-1 - 7

앞의작업을반복하면서계속제외해나간다 1 4 7 두개짜리배열의처리를끝으로정렬이완료된다 1 4 7 1 4 7-14 -

Insertion Sort 수행시간 : O(n 2 ) Worst case: 1+2+ +(n-2)+(n-1) Average case: ½ (1+2+ +(n-2)+(n-1)) - -

insertionsort(a[], n) A[1... n] 을정렬한다 { for i 2 to n ---------------------- 1 A[1... i] 의적당한자리에 A[i] 를삽입한다 ; ----------- 2 } 수행시간 : 1 의 for 루프는 n-1 번반복 2 의삽입은최악의경우 i-1 회비교 Worst case: 1+2+ +(n-2)+(n-1) = O(n 2 ) Average case: ½ (1+2+ +(n-2)+(n-1)) = O(n 2 ) - 16 -

Inductive Verification of Insertion Sort 배열 A[1] 만놓고보면 정렬되어있음 배열 A[1 k] 까지정렬되어있다면 2 행의삽입에의해 A[1 k+1] 까지정렬된다 고등학교에서배운수학적귀납법과다를바없음 - 17 -

Inductive Verification of Selection/Bubble Sort IT COOKBOOK 각자생각해보기 삽입정렬과가장큰차이점은무엇인가? - 1 -

Mergesort mergesort(a[ ], p, r) A[p... r] 을정렬한다 { if (p < r) then { q (p+q)/2; ----------------------- 1 p, q 의중간지점계산 mergesort(a, p, q); ---------------- 2 전반부정렬 mergesort(a, q+1, r); -------------- 후반부정렬 merge(a, p, q, r); ------------------ 4 병합 } } merge(a[ ], p, q, r) { 정렬되어있는두배열 A[p... q] 와 A[q+1... r] 을합하여정렬된하나의배열 A[p... r] 을만든다. } - 19 -

Mergesort 의작동예 정렬할배열이주어짐 1 7 4 배열을반반으로나눈다 1 7 4 1 각각독립적으로정렬한다 1 7 4 2 병합한다 ( 정렬완료 ) 1 4 7 - - 4

p q r 1 7 4 IT COOKBOOK Merge 의작동예 i j t 1 7 4 i t j 1 7 4 i j t - 21 -

1 7 4 i j t 1 7 4 i j t 1 7 4 i t j - 22 -

1 7 4 i j t 7 4 i j 1 t 7 i j 1 4 t - 2 -

1 4 7 i j t - 24 -

Animation (Mergesort) 72 1 42 97 94 6 1 7 691 27 74 2 49 7 49 27 72 94 94 7 2 9 4 수행시간 : O(nlogn) - 25 -

Quicksort quicksort(a[], p, r) A[p... r] 을정렬한다 { if (p < r) then { q = partition(a, p, r); 분할 quicksort(a, p, q-1); 왼쪽부분배열정렬 quicksort(a, q+1, r); 오른쪽부분배열정렬 } } partition(a[], p, r) { 배열 A[p... r] 의원소들을 A[r] 을기준으로양쪽으로재배치하고 A[r] 이자리한위치를 return 한다 ; } - 26 -

Animation (Quicksort) 5 1 2 1 49 4 2 45 269 66 9 2 1 21 4 4 2 69 6 9 21 2 1 1 2 4 6 6 1 평균 6 수행시간 : O(nlogn) 최악의경우수행시간 : O(n 2 ) - 27 -

Quicksort 의작동예 정렬할배열이주어짐. 첫번째수를기준으로삼는다. 1 4 7 기준보다작은수는기준의왼쪽에나머지는기준의오른쪽에오도록재배치한다 1 4 7 (a) 기준 (1) 왼쪽과오른쪽을각각독립적으로정렬한다 ( 정렬완료 ) 1 4 7 (b) - 2 -

p 1 4 7 r IT COOKBOOK Partition 의예 i i j 1 4 7 j 1 4 7 i j 1 4 7 i j 1 4 7 i j 4 7 1 i j - - (a) (b) (c)

7 1 4 i j 7 1 4 i j 7 1 4 i j 7 1 4 i 1 4 7 i - 0 - (d) (e)

Heapsort Heap Complete binary tree 로서다음의성질을만족한다 Heapsort 각노드의값은자신의 children 의값보다크지않다 주어진배열을힙으로만든다음, 차례로하나씩힙에서제거함으로써정렬한다 - 1 -

heapsort(a[ ], n) { buildheap(a, n); 힙만들기 for i n downto 2 { A[1] A[i]; 교환 heapify(a, 1, i-1); } } 최악의경우에도 O(nlogn) 시간소요! - 2 -

Heap 6 4 4 9 7 힙 6 9 7 힙아님 - -

6 4 7 9 힙아님 - 4 -

Heap 은 Array 를이용해서표현할수있다 1 4 2 6 4 5 6 9 7 A 1 2 4 5 6 6 4 9 7-5 -

Heapsort 의작동예 (a) (b) 7 (c) 제거 4 6 4 6 4 6 7 9 7 9 9 (f) 6 (e) 6 (d) 9 4 제거 7 9 4 9 7 4 6 7 4-6 -

6 제거 (h) 7 제거 9 (g) 9 7 7 9 7 (i) 6 4 6 4 6 4 (k) 9 제거 (j) 7 6 4-7 - 9 7 6 4

O(n) Sort 두원소를비교하는것을기본연산으로하는정렬의하한선은 Ω (nlogn) 이다 그러나원소들이특수한성질을만족하면 O(n) 정렬도가능하다 Counting Sort 원소들의크기가모두 O(n) ~ O(n) 범위에있을때 Radix Sort 원소들이모두 k 이하의자리수를가졌을때 (k: 상수 ) - -

Counting Sort countingsort(a[ ], n) simple version { A[ ]: 입력배열, n: 입력크기 for i = 1 to k C[i] 0; for j = 1 to n C[A[j]]++; 이지점에서 C[i] : 값이 i 인원소의총수 for i = 1 to k print C[i] i s; i 를 C[i] 번출력 } 원리에집중하기위한 Simple version 임. Full version 은 textbook 참조! - 9 -

Radix Sort radixsort(a[ ], d) { } for j = d downto 1 { } Stable sort Do a stable sort on A[ ] by j th digit; 같은값을가진 item 들은 sorting 후에도원래의순서가유지되는성질을가진 sort 를일컫는다. - 40 -

012 60 0004 0004 0004 24 0222 1061 012 0222 1061 012 012 0222 0004 0222 02 02 012 24 24 1061 60 02 60 0222 60 1061 24 1061 02 0004 02 60 24 Running time: O(n) d: a constant - 41 -

효율성비교 Worst Case Average Case Selection Sort n 2 n 2 Bubble Sort n 2 n 2 Insertion Sort n 2 n 2 Mergesort nlogn nlogn Quicksort n 2 nlogn Counting Sort n n Radix Sort n n Heapsort nlogn nlogn - 42 -

Thank you - 4 -