알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2...

26
알고리즘 분석 1

Transcript of 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2...

Page 1: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

알고리즘 분석

1

Page 2: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

2

만약 동일한 결과를 구할 수 있는 알고리즘이여러 개 존재한다면,우리는 당연히 더 좋은 알고리즘을 사용한다.

그러면, 어떤 알고리즘이 더 좋은 알고리즘일까?더 좋은 알고리즘을 선택하는 기준은 무엇인가?

Page 3: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

3

일반적으로 좋은 알고리즘을 선택하는 기준은

속도:이 알고리즘을 실행할 때 시간이 얼마나 걸리는가?

메모리 사용 공간:이 알고리즘을 실행할 때 메모리 공간이 얼마나 필요한가?

Page 4: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

Bubble sort

4

Get n and a list of n items, (a1,a2, …, an)marker ← nWhile (marker ≠ 1)

i ← 1while (i < marker)

if ( ai > ai+1) exchange ai with ai+1

i ← i +1marker ← marker - 1

Page 5: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

5

예를 들어, 리스트 (5, 1, 3, 9, 4, 2)을 정렬한다면,

1 단계: (5,1,3,9,4,2)↑

(1,5,3,9,4,2)(1,3,5,9,4,2)(1,3,5,9,4,2)(1,3,5,4,9,2)(1,3,5,4,2,9)

2 단계: (1,3,5,4,2,9)↑

(1,3,5,4,2,9)(1,3,5,4,2,9)(1,3,4,5,2,9)(1,3,4,2,5,9)

3 단계: (1,3,4,2,5,9)↑

(1,3,4,2,5,9)(1,3,4,2,5,9)(1,3,2,4,5,9)

4 단계: (1,3,2,4,5,9)↑

(1,3,2,4,5,9)(1,2,3,4,5,9)

5 단계: (1,2,3,4,5,9)↑

(1,2,3,4,5,9)

Page 6: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

6

Bubble sort에서 각 단계에서 걸리는 시간은 두 가지 동작에 의해 결정된다.

1. 비교(comparison)2. 위치 교환(swap)

각 단계에서 “비교”와 “위치 교환”을 하는 회수는 얼마인가?

Page 7: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

Selection sort

7

Get n and a list of n items, (a1,a2, …, an)marker ← nWhile (marker ≠ 1)

large ← a1

large_position← 1i ← 2while (i ≤ marker)

if ( ai > large) large ← ai

large_postion ← ii ← i +1

exchange alarge_postion with amarker

marker ← marker - 1

Page 8: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

8

예를 들어, 리스트 (5, 1, 3, 9, 4, 2)을 정렬한다면,

1 단계: (5,1,3,9,4,2)↑

large=5 (5,1,3,9,4,2)large=5 (5,1,3,9,4,2)large=9 (5,1,3,9,4,2)large=9 (5,1,3,9,4,2)large=9 (5,1,3,9,4,2)

(5,1,3,2,4,9)2 단계: (5,1,3,2,4,9)

↑large=5 (5,1,3,2,4,9)large=5 (5,1,3,2,4,9)large=5 (5,1,3,2,4,9)large=5 (5,1,3,2,4,9)

(4,1,3,2,5,9)

3 단계: (4,1,3,2,5,9)↑

large=4 (4,1,3,2,5,9)(4,1,3,2,5,9)(4,1,3,2,5,9)(2,1,3,4,5,9)

4 단계: (2,1,3,4,5,9)↑

large=2 (2,1,3,4,5,9)large=3 (2,1,3,4,5,9)

(2,1,3,4,5,9)

5 단계: (2,1,3,4,5,9)↑

large=2 (2,1,3,4,5,9)(1,2,3,4,5,9)

Page 9: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

9

각 단계에서 “비교”와 “위치 교환”을 하는 회수는 얼마인가?

Page 10: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

10

두 개의 sort 알고리즘의 비교 회수는?

N개로 이루어진 리스트에서(n-1) + (n-2) + (n-3) + … + 2 + 1 = n(n-1)/2

n n2 n(n-1)/2

10 100 45

100 10,000 4,950

1000 1,000,000 499,500

10000 100,000,000 49,995,000

100000 10,000,000,000 4,999,950,000

Page 11: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

11

앞의 표에서 보는 바와 같이 n(n-1)/2은 n2과 동일한 추세로증가한다.

증가 추세를 결정하는 것은 최고 차수(n2)이고 나머지 차수는상관없다.

그리고 최고 차수의 계수의 값에 상관없이 증가 추세는 최고 차수에의해 결정된다.

Page 12: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

12

0.0001n2과 100n은 어느 것이 계산 회수가 더 많은가?

n이 커지면 결국은 n2이 n보다 계산 회수가 많아진다.

Page 13: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

13

2n2

100n2

2n2+10n

등등

n2

따라서, c2n2+c1n+c0 의 증가 추세는 n2이라고 할 수 있다.

Page 14: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

단순 정렬 알고리즘의 복잡도

14

그렇다면 우리는 다음과 같이 정렬(sort) 알고리즘의 복잡도를정리할 수 있다.

정렬 알고리즘의 복잡도는 비교하는 회수에 의해 결정된다.비교 회수는 n(n-1)/2이다.

단순 정렬 알고리즘의 복잡도는 n2이라고 할 수 있다.

n(n-1)/2의 증가 추세는 n2으로 나타낼 수 있다.

Page 15: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

15

알고리즘의 복잡도를 결정하는 것은n이 증가할 때 계산 회수의 증가 추세이다.

따라서 알고리즘의 복잡도가 n인 것은 n2보다더 좋은 알고리즘이다.

Page 16: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

알고리즘 복잡도

16

앞에서 본 바와 같이 어떤 알고리즘의 복잡도는함수 f(n)으로 나타낼 수 있다.

f(n) : 입력 데이터의 수 n에 대한계산 회수의 증가추세를 나타내는 식

f(n)의 비교

Page 17: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

알고리즘 복잡도 표기법

17

어떤 알고리즘의 복잡도를 나타내는 함수를O(f(n))으로 표현한다. (Big-Oh라고 읽음)

O(f(n))이외에도 Θ(f(n)), Ω(f(n))등이 있는데이것의 자세한 정의는 여기서는 생략한다.

Page 18: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

18

우리가 관심을 갖는 (실행 가능한) 알고리즘은O(nk)이다.

- 즉, 1, n, n2, n3 등등- 그리고 O(log n), 혹은 O(n logn)은 아주

좋은 알고리즘이다.- polynomially bounded

만약 어떤 문제를 푸는 알고리즘의 복잡도가O(kn)이라면 우리는 그 문제를아주 어려운(intractable) 문제라고 한다.

Page 19: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

19

만약에 1초에 10,000번 연산을 하는 컴퓨터라면,

Page 20: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

예: 순차 검색(sequential search)

20

Page 21: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

알고리즘 분석

21

이 알고리즘의 실행 시간은 비교 회수에 의해 결정된다.

최선의 경우(best case) – 비교 회수는 1번최악의 경우(worst case) – 비교 회수는 n번평균 경우(average case) – 비교 회수는 n/2번

따라서, 이 알고리즘의 증가 추세 함수 f(n)=?

이 알고리즘의 복잡도는 O(n)이다.

Page 22: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

예: 이진 탐색(binary search)

22

get target, N and [n1,n2,…nN]beginning ← 1end ← nFound ← NOWhile (Found = NO AND beginning ≤ end)

m ← (beginning + end)/2if (target = nm)

print nm

Found = YESelse

if(target < nm) end ← m-1

elsebeginning ← m+1

if (Found = NO) print “can’t find target”stop

Page 23: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

예: 이진 탐색(binary search)

23

만약 list가 정렬이 되어 있다면,

예: target=10, list = [1, 4, 5, 7, 10, 12, 14, 22]

1st 비교: mid=4 (value=7), target > 7, 왼쪽 부분은 버림

[1, 4, 5, 7, 10, 12, 14, 22]

2nd 비교: mid=7 (value=14), target < 14, 오른쪽 부분은 버림

3rd 비교: mid=5 (value=10), target=10, 드디어 찾음!!

[1, 4, 5, 7, 10, 12, 14, 22]

Page 24: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

알고리즘 분석

24

이 알고리즘의 실행 시간은 비교 회수에 의해 결정된다.

최선의 경우(best case) – 비교 회수는 1번

최악의 경우(worst case) – 비교 회수는 ??

Page 25: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

25

7=10?

1, 4, 5 10, 12, 14, 22

14=10?

10, 12 22

10=10?

10 12마지막까지 비교할 경우log2 n 만큼 비교하게 된다.

Page 26: 알고리즘분석ants.mju.ac.kr/2019Fall/DM/module4-2.pdf · 2019-10-07 · 2 만약동일한결과를구할수있는알고리즘이 여러개존재한다면, 우리는당연히더좋은알고리즘을사용한다.

알고리즘 분석

26

이 알고리즘의 실행 시간은 비교 회수에 의해 결정된다.

최선의 경우(best case) – 비교 회수는 1번최악의 경우(worst case) – 비교 회수는 log2n평균 경우(average case) – 비교 회수는 log2n/2

따라서, 이 알고리즘의 증가 추세 함수 f(n)=?

이 알고리즘의 복잡도는 O(log2n)이다.