Transcript Document

시간 복잡도와 최고차항
 다음 두 복잡도 식을 가지고 있는 알고리즘은 어느 것이 복잡도가
높은가?

알고리즘 A: 0.1n2

알고리즘 B: 0.1n2+n+100
 복잡도 수식이 2차 이하의 항으로만 구성된 경우, 2차 항이 궁극적
으로 지배한다.
n
0.1n2
0.1n2+n+100
10
20
50
100
1,000
10
40
250
1,000
100,000
120
160
400
1,200
101,100
 즉, 위 두 알고리즘은 동일한 복잡도 카테고리에 속한다.
Page 1
Big O 표기법 (1/2)
 정의: 점근적 상한(Asymptotic Upper Bound)
• 복잡도 함수 f(n)과 g(n)에 대해서 다음을 만족하면 g(n)(f(n)) 이다.
 n  N인 모든 정수 n에 대해서 g(n)  c  f(n)이 성립하는 실수 c  0와
음이 아닌 정수 N이 존재한다.
 간단히 말해서, (f(n)) 는 g(n)  c  f(n) 를 만족하는 g(n) 의 집합이다.
 g(n)  (f(n)) 읽는 방법:
“g(n)은 f(n)의 Big 이다.” 또는
“g(n)은 f(n)의 Big 에 속한다.”
Page 2
Big O 표기법 (2/2)
 어떤 함수 g(n)이 (n2)에 속한다는 말은…
• 함수 g(n)는 궁극에 가서는 (즉, n이 어떤 임의의 N보다 큰 값부터 무한대까지)
어떤 2차 함수 cn2 보다는 작은 값을 가지게 된다는 것을 뜻한다.
(그래프 상에서는 아래에 위치한다는 의미)
 어떤 알고리즘의 시간복잡도가 (f(n))이라는 것은…
• 입력의 크기 n에 대해서 이 알고리즘의 수행시간은 아무리 느려도 cf(n)과
같거나 빠르다(궁극적으로, cf(n)이 복잡도의 상한이다)라는 것을 의미한다.
Page 3
Big O 표기법 예제 (1/3)
 [예제 1.7] 5n2  (n2) ?
c=5와 N=0을 선택하면, n  0인 모든 정수 n에 대해서
5n2  5n2이 성립한다.
 [예제 1.8] T(n) 
n(n  1)
2
일 때, T(n)  (n2) ?
n  0인 모든 정수 n에 대해서
n(n  1) n2

2
2
이 성립한다.
그러므로, c=1/2와 N=0을 선택하면, T(n) (n2)이라고 결론지을
수 있다.
Page 4
Big O 표기법 예제 (2/3)
 [예제 1.9] n2+10n  (n2) ?
(1) n  10인 모든 정수 n에 대해서 n2+10n  2n2 이 성립한다.
그러므로, c = 2와 N = 10을 선택하면, “Big  ”의 정의에 의해서
n2+10n  (n2)이라고 결론지을 수 있다.
(2) n  1인 모든 정수 n에 대해서 n2+10n  n2+10n2 = 11n2 이 성립한다.
그러므로, c = 11와 N = 1을 선택하면, “Big  ”의 정의에 의해서
n2+10n  (n2)이라고 결론지을 수 있다.
Big O를 보이는데 있어서 c와 N에 대해 한 가지 해답만 있는 것이 아니다.
적당히 큰 N과 c를 선택하여 보이면 된다.
Page 5
Big O 표기법 예제 (3/3)
 [예제 1.10] n2  (n2+10n) ? (생략)
 [예제 1.11] n  (n2) ?
n  1인 모든 정수 n에 대해서, n  1n2 이 성립한다.
그러므로, c=1와 N=1을 선택하면, n (n2)이라 결론지을 수 있다.
 n3  (n2) ?
n  N인 모든 n에 대해서 n3  cn2 이 성립하는 c와 N값은
존재하지 않는다.
즉, 양변을 n2으로 나누면, n  c 가 되는데 c를 아무리 크게
잡더라도 그 보다 더 큰 n이 존재한다.
Page 6
 표기법 (1/2)
 정의: 점근적 하한(Asymptotic Lower Bound)
• 복잡도 함수 f(n)과 g(n)에 대해서 다음을 만족하면 g(n)  (f(n))이다.
 n  N인 모든 정수 n에 대해서 g(n)  c  f(n)이 성립하는 실수 c  0와
음이 아닌 정수 N이 존재한다.
 g(n)  (f(n)) 읽는 방법:
“g(n)은 f(n)의 오메가(omega)이다.” 또는
“g(n)은 f(n)의 오메가(omega)에 속한다.”
Page 7
 표기법 (2/2)
2
 어떤 함수 g(n)이 (n )에 속한다는 말은
• 그 함수는 궁극에 가서는 (즉, n이 어떤 임의의 N보다 큰 값부터 무한대
까지에서는) 어떤 2차 함수 cn2 의 값보다는 큰 값을 가지게 된다는 것을
뜻한다 (그래프 상에서 윗 부분에 위치한다).
 어떤 알고리즘의 시간복잡도가 (f(n))이라면,
• 입력의 크기 n에 대해서 이 알고리즘의 수행시간은 아무리 빨라도 cf(n)
보다는 느리다. (궁극적으로, cf(n)이 복잡도의 하한이다.)
Page 8
 표기법의 예제 (1/3)
 [예제 1.12] 5n2  (n2) ?
n  0인 모든 정수 n에 대해서, 5n2  1n2 이 성립한다.
그러므로, c=1와 N=0을 선택하면, 5n2  (n2)이라 할 수 있다.
 [예제 1.13] n2 +10n  (n2) ?
n  0인 모든 정수 n에 대해서 n2+10n  n2 이 성립한다.
그러므로, c = 1와 N = 0을 선택하면, n2 +10n  (n2)이라
결론지을 수 있다.
Page 9
 표기법의 예제 (2/3)
n(n  1)
 [예제 1.14] T(n) 
일 때, T(n)n  ?
2
2
n  2인 모든 n에 대해서 n  1 
n
이 성립한다.
2
그러므로, n  2인 모든 n에 대해서
n(n  1) n n 1 2
   n
2
2 2 4
이 성립한다.
따라서 c  14 과 N = 2를 선택하면, T(n)n2  이라 할 수 있다.
3
 ?
2
 [예제 1.15] n  n
3
2
n  1인 모든 정수 n에 대해서, n  1  n 이 성립한다.
 
3
2
그러므로, c = 1와 N = 1을 선택하면, n  n 이라 할 수 있다.
Page 10
 표기법의 예제 (3/3)
 [예제 1.17] n  (n2) ?
모순유도에 의한 증명(Proof by contradiction):
 
n  n2 이라 가정하자.
그러면 n  N인 모든 정수 n에 대해서, n  c  n2 이 성립하는 실수
c > 0, 그리고 음이 아닌 정수 N이 존재한다.
위의 부등식의 양변을 cn으로 나누면
1
 n 가 된다.
c
그러나, 1/c보다 큰 n이 항시 존재하기 때문에 위 부등식은 성립할
수 없다. 따라서 위의 가정은 모순이다.
Page 11
 표기법
 정의: (Asymptotic Tight Bound)
• 복잡도 함수 f(n)과 g(n)에 대해서 다음을 만족하면 g(n)  (f(n)) 이다.
 n  N 인 모든 정수 n에 대해서 c  f(n)  g(n)  d  f(n)이 성립하는
실수 c  0와 d  0, 그리고 음이 아닌 정수 N이 존재한다.
• (f(n)) = O(f(n))  (f(n))의 관계가 성립한다.
 참고: g(n)  (f(n))은 “g(n)은 f(n)의 차수(order)” 또는 “g(n)은 f(n)과 동
일한 차수(order)” 라고 한다.
은 O(n2)이면서 (n2)이이므로
 예:
즉,
는
이다.
과 동일한 차수이다.
Page 12
O(n2), (n2), (n2) 간의 관계
O(n2)
(n2)
(n2)=O(n2)  (n2)
Page 13
Small o(n)?
 자주 사용되지 않는 개념이므로, 본 강의에서 제외한다.
Page 14
복잡도 카테고리의 주요 성질 (1/3)
 1. g n f n iff
 2. g n f n iff
f n g n
f n g n
 3. b > 1이고 a > 1이면, loga n  (logb n)은 항상 성립한다.
다시 말하면 로그(logarithm) 복잡도 함수는 모두 같은 카테
고리에 속한다. 따라서 통상 (lg n)으로 표시한다.
 4. 지수(exponential) 복잡도 함수는 모두 같은 카테고리 있지
않다.
• 즉, 임의의 서로 다른 a와 b에 대해서 an  (bn) 이다.
Page 15
차수의 주요 성질 (2/3)
 5. n!은 어떤 지수 (an )복잡도 함수보다도 더 나쁘다.
 6. 복잡도 카테고리들은 다음 순서로 나열된다.
         
lg n , n , n lg n ,  n2 ,  n j ,  nk ,  an ,  bn , n!
여기서 k>j>2이고 b>a>1이다.
 7. c0, d>0, g(n)O(f(n)), h(n)(f(n))이면, 다음이 성립한다.
c  g(n) + d  h(n)  (f(n))
Page 16
차수의 주요 성질 (3/3)
 [예제 1.21] (log4n)=(lgn) ?
• 차수의 주요 성질 3번 사용
 [예제 1.23] 5n + 3lgn+10nlgn+7n2  (n2) ?
• 차수의 주요 성질 6과 7을 사용
Page 17
본 강의 처음으로 돌아가서…
 다음 두 복잡도 식을 가지고 있는 알고리즘의 복잡도 표기법은?

알고리즘 A: 0.1n2

알고리즘 B: 0.1n2+n+100

알고리즘 A, B 둘 다 O(n2), (n2), (n2) 로 표기가능…
하지만, 각각의 늬앙스(의미) 및 해석은 다르다.
 어떻게 다를까?...

모든 경우분석이 가능한 알고리즘이라면 (n2) 표기사용

모든 경우 분석이 되지 않는 경우 흔히 최악의 분석을 수행하고
복잡도 표기는 O(n2) 를 사용
Page 18