쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/al/ch01.pdf · •...

35
IT COOKBOOK -1- 한빛아카데미㈜ 교재 소개 도서명 | IT CookBook, 쉽게 배우는 알고리즘: 관계 중심의 사고법 | 문병로 출판사 | 한빛아카데미㈜_http://www.hanb.co.kr 도서가격 | 25,000페이지 | 460페이지 출간일 | 2013719I S B N | 978-89-98756-40-6 93000

Upload: others

Post on 13-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 1 - 한빛아카데미㈜

교재 소개

도서명 | IT CookBook, 쉽게배우는알고리즘: 관계중심의사고법

저 자 |문병로

출판사 |한빛아카데미㈜_http://www.hanb.co.kr

도서가격 | 25,000원

페이지 | 460페이지

출간일 | 2013년 7월 19일

I S B N | 978-89-98756-40-6 93000

Page 2: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

http://www.hanbit.co.kr

쉽게 배우는 알고리즘

1장. 알고리즘 설계와 분석의 기초

Page 3: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 3 - 한빛아카데미㈜

1장. 알고리즘 설계와 분석의 기초

생각하는 방법을 터득한 것은

미래의 문제를 미리 해결한 것이다.

- 제임스 왓슨

Page 4: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 4 - 한빛아카데미㈜

학습목표

• 알고리즘의 정의와 필요성을 인지한다.

• 아주 기초적인 알고리즘 수행시간 분석을 할수 있도록 한다.

• 점근적 표기법을 이해한다.

Page 5: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 5 - 한빛아카데미㈜

알고리즘이란무엇인가?

• 문제해결절차를체계적으로기술한것

• 문제의요구조건

– 입력과출력으로명시할수있다

– 알고리즘은입력으로부터출력을만드는과정을기술

Page 6: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 6 - 한빛아카데미㈜

입출력의예

• 문제

– 100명의학생의시험점수의최대값을찾으라

• 입력

– 100명의학생들의시험점수

• 출력

– 위 100개의시험점수들중최대값

Page 7: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 7 - 한빛아카데미㈜

알고리즘공부의목적

• 특정한문제를위한알고리즘의습득

• 체계적으로생각하는훈련

• 지적추상화의레벨상승

– Intellectual abstraction

– 연구나개발에있어정신적여유를유지하기위해매우중요한요소

Page 8: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 8 - 한빛아카데미㈜

바람직한알고리즘

• 명확해야한다– 이해하기쉽고가능하면간명하도록

– 지나친기호적표현은오히려명확성을떨어뜨림

– 명확성을해치지않으면일반언어의사용도무방

• 효율적이어야한다– 같은문제를해결하는알고리즘들의수행시간이수백만배이상차이날수있다

Page 9: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 9 - 한빛아카데미㈜

문제의크기

수행시간

알고리즘의수행시간

Page 10: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 10 - 한빛아카데미㈜

문제의크기

수행시간

알고리즘의수행시간

Page 11: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 11 - 한빛아카데미㈜

알고리즘의수행시간

Page 12: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 12 - 한빛아카데미㈜

• 알고리즘의수행시간을좌우하는기준은다양하게잡을수있다

– 예: for 루프의반복횟수, 특정한행이수행되는횟수, 함수의호출횟수, …

• 몇가지간단한경우의예를통해알고리즘의수행시간을살펴본다

알고리즘의수행시간

Page 13: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 13 - 한빛아카데미㈜

sample1(A[ ], n)

{

k = n/2 ;

return A[k] ;

}

알고리즘의수행시간

n에관계없이상수시간이소요된다.

Page 14: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 14 - 한빛아카데미㈜

sample2(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

sum← sum+ A[i] ;

return sum ;

}

알고리즘의수행시간

n에비례하는시간이소요된다.

Page 15: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 15 - 한빛아카데미㈜

sample3(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

for j ← 1 to n

sum← sum+ A[i]*A[j] ;

return sum ;

}

알고리즘의수행시간

n2에비례하는시간이소요된다.

Page 16: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 16 - 한빛아카데미㈜

sample4(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

for j ← 1 to n {

k ← A[1 ... n] 에서임의로 n/2 개를뽑을때이중최대값 ;

sum ← sum + k ;

}

return sum ;

}

알고리즘의수행시간

n3에비례하는시간이소요된다.

Page 17: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 17 - 한빛아카데미㈜

sample5(A[ ], n)

{

sum ← 0 ;

for i ← 1 to n

for j ← i+1 to n

sum← sum+ A[i]*A[j] ;

return sum ;

}

알고리즘의수행시간

n2에비례하는시간이소요된다.

Page 18: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 18 - 한빛아카데미㈜

factorial(n)

{

if (n=1) return 1 ;

return n*factorial(n-1) ;

}

알고리즘의수행시간

n에비례하는시간이소요된다.

Page 19: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 19 - 한빛아카데미㈜

재귀와귀납적사고

• 재귀=자기호출(recurrence)

• 재귀적구조

– 어떤문제안에크기만다를뿐성격이똑같은작은문제(들)가포함되어있는것

– 예1: factorial

• N! = N×(N-1)!

– 예1: 수열의점화식• an = an-1 + 2

Page 20: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 20 - 한빛아카데미㈜

재귀의예: Mergesort

mergeSort(A[ ], p, r)

▷A[p ... r]을정렬한다

{

if (p < r) then {

q ← (p+q)/2; ----------------------- ① ▷ p, q의중간지점계산

mergeSort(A, p, q); ---------------- ② ▷전반부정렬

mergeSort(A, q+1, r); -------------- ③ ▷후반부정렬

merge(A, p, q, r); ------------------ ④ ▷병합

}

}

merge(A[ ], p, q, r) {

정렬되어있는두배열A[p ... q]와A[q+1 ... r]을합하여정렬된하나의배열A[p ... r]을만든다.

}

Page 21: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 21 - 한빛아카데미㈜

mergeSort(A[ ], p, r)

▷A[p ... r]을정렬한다

{

if (p < r) then {

q ← (p+q)/2; ----------------------- ① ▷ p, q의중간지점계산

mergeSort(A, p, q); ---------------- ② ▷전반부정렬

mergeSort(A, q+1, r); -------------- ③ ▷후반부정렬

merge(A, p, q, r); ------------------ ④ ▷병합

}

}

②, ③은재귀호출①, ④는재귀적관계를드러내기위한오버헤드

Page 22: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 22 - 한빛아카데미㈜

다양한알고리즘의적용주제들

• 카네비게이션• 스케쥴링

– TSP, 차량라우팅, 작업공정, …

• Human Genome Project– 매칭, 계통도, functional analyses, …

• 검색– 데이터베이스, 웹페이지들, …

• 자원의배치• 반도체설계

– Partitioning, placement, routing, …

• …

Page 23: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 23 - 한빛아카데미㈜

알고리즘을왜분석하는가?

• 무결성확인

• 자원사용의효율성파악

– 자원• 시간

• 메모리, 통신대역, …

Page 24: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 24 - 한빛아카데미㈜

알고리즘의분석

• 크기가작은문제– 알고리즘의효율성이중요하지않다

– 비효율적인알고리즘도무방

• 크기가충분히큰문제– 알고리즘의효율성이중요하다

– 비효율적인알고리즘은치명적

• 입력의크기가충분히큰경우에대한분석을점근적분석이라한다

Page 25: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 25 - 한빛아카데미㈜

점근적분석Asymptotic Analysis

• 입력의크기가충분히큰경우에대한분석

• 이미알고있는점근적개념의예

• Ο, Ω, Θ, ω, ο표기법

lim f(n)n→∞

Page 26: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 26 - 한빛아카데미㈜

점근법표기법Asymptotic Notations

• O( f(n) )

– 기껏해야 f(n)의비율로증가하는함수

– e.g., O(n), O(n log n), O(n2), O(2n), …

• Formal definition

– O( f(n) ) = { g(n) | ∃c > 0, n0 ≥ 0 s.t.∀n ≥ n0, cf(n) ≥ g(n) }

– g(n) ∈ O(f(n)을관행적으로 g(n) = O(f(n))이라고쓴다.

• 직관적의미

– g(n) = O(f(n)) ⇒ g 는 f 보다빠르게증가하지않는다

– 상수비율의차이는무시

Page 27: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 27 - 한빛아카데미㈜

점근적표기법

• 예, O( n2 )

– 3n2 + 2n

– 7n2 – 100n

– nlogn + 5n

– 3n

• 알수있는한최대한 tight 하게– nlogn + 5n = O(nlogn) 인데굳이 O( n2 )으로쓸필요없다

– Tight하지않은만큼정보의손실이일어난다

Page 28: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 28 - 한빛아카데미㈜

• Ω( f(n) )

– 적어도 f(n)의비율로증가하는함수

– O( f(n) )과대칭적

• Formal definition

– Ω(f(n)) = { g(n) | ∃c > 0, n0 ≥ 0 s.t.∀n ≥ n0, cf(n)≤g(n) }

• 직관적의미– g(n) = Ω(f(n)) ⇒ g 는 f 보다느리게증가하지않는다

점근적표기법

Page 29: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 29 - 한빛아카데미㈜

• Θ( f(n) )

– f(n)의비율로증가하는함수

• Formal definition

– Θ( f(n) ) = O( f(n) ) ∩ Ω( f(n) )

• 직관적의미– g(n) = Θ(f(n)) ⇒ g 는 f 와같은정도로증가한다

점근적표기법

Page 30: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 30 - 한빛아카데미㈜

• O( f(n) )

– Tight or loose upper bound

• Ω( f(n) )

– Tight or loose lower bound

• Θ( f(n) )

– Tight bound

각점근적표기법의직관적의미

Page 31: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 31 - 한빛아카데미㈜

점근적복잡도의예

• 정렬알고리즘들의복잡도표현예(3장에서공부함)

– 선택정렬• Θ( n2 )

– 힙정렬• O(nlogn)

– 퀵정렬• O( n2 )

• 평균 Θ(nlogn)

Page 32: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 32 - 한빛아카데미㈜

시간복잡도분석의종류

• Worst-case

– Analysis for the worst-case input(s)

• Average-case

– Analysis for all inputs

– More difficult to analyze

• Best-case

– Analysis for the best-case input(s)

– 별유용하지않음

Page 33: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 33 - 한빛아카데미㈜

저장/검색의복잡도

• 배열– O(n)

• Binary search trees

– 최악의경우 Θ(n)

– 평균 Θ(logn)

• Balanced binary search trees

– 최악의경우 Θ(logn)

• B-trees

– 최악의경우 Θ(logn)

• Hash table

– 평균 Θ(1)

Page 34: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 34 - 한빛아카데미㈜

크기 n인배열에서원소찾기

• Sequential search

– 배열이아무렇게나저장되어있을때

– Worst case: Θ(n)

– Average case: Θ(n)

• Binary search

– 배열이정렬되어있을때

– Worst case: Θ(log n)

– Average case: Θ(log n)

Page 35: 쉽게 배우는 알고리즘 강의노트nlp.chonbuk.ac.kr/AL/ch01.pdf · • 알고리즘의수행시간을좌우하는기준은 다양하게잡을수있다 –예: for 루프의반복횟수,

IT COOKBOOK

- 35 - 한빛아카데미㈜

Thank you