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에 대해서 이 알고리즘의 수행시간은 아무리 느려도 cf(n)과 같거나 빠르다(궁극적으로, cf(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 1n2 이 성립한다. 그러므로, c=1와 N=1을 선택하면, n (n2)이라 결론지을 수 있다. n3 (n2) ? n N인 모든 n에 대해서 n3 cn2 이 성립하는 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에 대해서 이 알고리즘의 수행시간은 아무리 빨라도 cf(n) 보다는 느리다. (궁극적으로, cf(n)이 복잡도의 하한이다.) Page 8 표기법의 예제 (1/3) [예제 1.12] 5n2 (n2) ? n 0인 모든 정수 n에 대해서, 5n2 1n2 이 성립한다. 그러므로, 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. c0, 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