E N D
제 2장 기본 개념 • 수학적 배경 • 자료 구조와 알고리즘 • 알고리즘 성능 분석 • 성능 측정
1 수학적 배경1.1 표기법 : 실수 x에 대해(x의 floor) : x보다 작거나 같은 정수들 중에서 가장 큰 정수(x의 ceiling) : x보다 크거나 같은 정수들 중에서 가장 작은 정수<예>1.2 지수(1) XaXb = Xa+b (2) (3) (Xa)b = Xab (4) Xn+Xn = 2Xn ≠ X2n (5) 2n+2n = 2n+1
1.3 대수11[증명] X = logcb, y = logca, z = logab → cx = b, cy = a, az = b → (cy)z = cx = b → x = yz가 되어 z =x /y가 된다.
2 logab=loga+logb[증명] x=loga, y=logb, z=logab라 하고 밑이 2라 가정→ 2x =a, 2y = b, 2z =ab → 2x2y = 2z = ab → 2x+y = 2z =ab가되어 x+y = z가 된다
·유용한 공식(1) (2) (3) (4)1.4 수열(1) (2)식 (2)에서 만약 0<a<1이라면, 그 값은 에 접근
(3) 의 계산가 정 :
<예> 2+5+8+…+(3k-1) 의 계산2+5+8+…+(3k-1) = 3(1+2+3+…+k)-(1+1+1+…+1) (5) (6) (7) (8)
1.5 모드(modular) 연산·“a≡b(mod n)”: a는 모드 n에 대하여 b와 합동·a≡b(mod n) ↔ a와 b를 n으로 나누었을 때 그 나머지 값이 같음<예> 81≡61≡1(mod10)·a≡b(mod n) → a+c≡b+c(mod n) and ad≡bd(mod n)1.6 증명 방법(1) 수학적 귀납법p(m), p(m+1), …: 일련의 명제라 가정이들 명제들이 참이라는 것을 다음과 같이 보임
첫째, p(m)이 참임을 보임둘째, m≤k에 대해, p(k)가 참이면 언제나 p(k+1)이 참임을 보임위의 두 단계가 참이면 모든 명제는 참이 됨1피보나치 수열 에 대해 i≥1일 때, 임을 보이시오
[증명]첫째, 임으로 자명 둘째,i=1, 2, …, k에 대해, 라 가정하고 i=k+1 일 때 이 참임을 보인다. 정의에 의해 이고 귀납 가정으로부터, 임으로 다음 식을 얻을 수 있다.
(2) 모순 증명법·정리가 거짓 임을 가정하고 이러한 가정이 사실이 아님을 보임2가 무리수임을 보이시오.[증명] 가정 : 가 유리수 유리수의 정의에 따라 (n,m은 정수이고 서로소)양변을 제곱하여 정리 : 이 짝수이므로 도 반드시 짝수가 되어 n이 짝수
n=2k로 표현할 수 있고 이것을 식 2m2 = n2에 대입 → 도 짝수가 되고 m 역시 마찬가지로 짝수m과 n이 동시에 짝수가 되므로 m과 n이 서로소라는 가정에 모순∴ 는 유리수가 아닌 무리수
(3) 직접 증명법·주어진 유용한 정보로부터 추론을 통하여 원하는 결론에 다다를 수 있도록 유도3|x|는 x의 절대값을 나타내며 x가 양수이거나 0이면 x이고, x가 음수일 경우에는 -x가 된다. 만약 |x|>|y|이면 임을 보이시오.[증명] |x|>|y| 임으로 이고, 모든 수 z에 대해 임으로 이다.
(4) 반례 증명법·명제를 모순이 되게 하는 하나의 예를 보임으로써 그 명제가 거짓임을 보이는 방법4피보나치 수열에서 명제 이 거짓임을 보이시오.[증명] 임으로 는 거짓이다.
2 자료 구조와 알고리즘2.1 정의·자료 구조 : 처리하고자 하는 자료들 사이의 관계를 고려하여 컴퓨터 내부에 표현하는 방법들을 총칭·알고리즘 : 자료 구조로 표현된 자료들을 이용하여 자료들을 처리하는 절차들의 모임·프로그램 : 자료구조 + 알고리즘
2알고리즘 알고리즘이란 특정한 일을 수행하는 명령어들의 유한집합으로 다음 조건을 만족(1) 입력(input): 외부에서 제공되는 0개 이상의 입력이 존재(2) 출력(output): 최소한 하나 이상의 결과를 생성(3) 명확성(definiteness): 각 명령어가 명확하고 애매 모호하지 않아야 함(4) 유한성(finiteness): 유한 단계를 거친 후 반드시 수행을 종료(5) 효율성(effectiveness): 모든 명령어는 효율적으로 실행 가능해야 함
알고리즘과 프로그램의 차이점 : 알고리즘은 유한성을 가져야하나 프로그램은 그럴 필요가 없음 <예> 운영 체제 : 시스템이 붕괴되지 않는 한 계속 수행5n개의 정수를 갖는 리스트에서 가장 큰 원소를 갖는 곳의 위치를 찾아 반환하는 알고리즘을 작성
2.2 반복 알고리즘과 순환 알고리즘·순환 함수 직접 순환(direct recursion) 함수 : 자기 자신을 직접 호출간접 순환(indirect recursion) 함수 : 호출된 함수가 호출한 함수를 다시 호출61부터 n까지 연속된 정수를 더하는 문제의 반복 및 순환 알고리즘 [풀이] 1부터 n까지 연속된 정수를 더하는 문제의 반복적 및 순환적 정의반복적 정의 : Isum = 1+2+3+ +n = 순환적 정의 : Rsum(i) = 1, i=1
·알고리즘을 순환적으로 정의하기 위해 필요한 절차① 순환 호출을 끝내는 종료 조건(boundary condition)을 설정② 각 순환 호출이 종료 조건에 한 단계씩 접근하도록 순환 호출을 구현
7Fac(n)=n!을 구하는 순환 알고리즘을 작성[풀이] n!은 다음과 같이 반복적 방법과 순환적 방법을 사용하여 정의될 수 있다.반복적 정의 : n!=n×(n-1)×(n-2)×…×1순환적 정의 : Fac(n) = 1, n = 1 인 양의정수 n × Fac(n-1), n≠1
3 알고리즘 성능 분석- 알고리즘의 성능 판단 기준 알고리즘 수행에 필요한 시간(시간 복잡도 : time complexity) 알고리즘의 수행에 필요한 기계 독립적인 시간의 양 알고리즘 수행에 필요한 공간(공간 복잡도 : space complexity)알고리즘의 수행에 필요한 기계 독립적인 공간의 양 정확성(correctness)알고리즘이 입력에 대한 정확한 결과를 출력해 내는지를 나타냄
간결성(simplicity)알고리즘의 간단하고 읽기 쉬운 정도를 나타냄최적성(optimality)해결하고자 하는 문제를 최소의 비용으로 해결하고 있는지를 나타냄3.1 시간 복잡도- 알고리즘을 수행하는 데 필요한 시간을 계산 : 하드웨어에 독립적인 실행 시간의 추정치를 사용- 실행 시간의 추정은 알고리즘이 실행한 연산의 빈도수로 추정
풀고자 하는 문제에 대해 전체 알고리즘에서 수행되는 가장 중요한 기본 연산(basic operation)들만으로 실행 시간을 추정<예>- 해결하고자 하는 문제에 내재된 기본 연산이 여러 개인 경우 : 각각의 중요한 기본 연산들의 실행 빈도수의 합으로간주하거나 중요 기본 연산 들에 가중치를 두어 계산
8n×n 행렬을 곱셈하는 알고리즘의 시간 복잡도를 분석3.2 공간 복잡도- 문제의 특정 입력에 따라 가변적으로 요구되는 공간의 양
-고정적으로 요구되는 공간① 명령어 공간(프로그램 코드가 저장되는데 필요한 공간)② 단순 변수를 위해 필요한 공간③ 고정된 크기의 구조체 변수들이나 상수들을 위해서 필요한 공간-가변적으로 요구되는 공간 풀려고 하는 문제의 특정 입력에 의존하는 변수들이 필요로 하는공간<예> 함수가 순환을 사용할 때 요구되는 부가적인 공간
9n개의 숫자를 더하는 순환 함수의 공간 복잡도 분석 [풀이] 함수가 순환적으로 호출될 때 인수, 지역변수, 반환주소 등의 저장이 필요한번의 Rsum의 순환 호출에 의해 필요한 공간 :
두 개의 매개 변수, 반환 주소를 저장하기 위해 필요한 바이트 수 → 가정 : 정수와 포인터를 저장하기 위해 2바이트가 필요 → 한번 순환에 의해 필요한 기억 공간은 6바이트 → 수행에 필요한 공간의 양은 Rsum()이 n번 호출되므로 6n 바이트3.3 점근 표기법- 점근 표기법(asymptotic notation) : 상수 인자나 적은 수의 입력 자료는 무시하고 가장 중심이 되는 기본 연산의 실행 빈도수를 특정 입력 값의 함수 내는 표기법
알고리즘의 성능 분석을 위해 점근 표기법을 사용하는 이유① 같은 기능을 수행하는 두 알고리즘의 시간 복잡도를 비교② 입력 자료의 특성 변화에 따른 실행 시간의 증가를 예측- 함수 f, g : 음이 아닌 함수라 가정3<Big "oh">
10n≥2인 모든 n에 대해, 3n+2≤4n 임으로 3n+2=O(n) n≥2인 모든 n에 대해, 3n+3≤3n2임으로 3n+2=O(n2) 3. f(n) = amnm+…a1n+ao이면, f(n)=O(nm)이다.[증명] f(n) ≤ (|am|+|am-1|n-1+…+|a1|n-m+1+|a0|n-m)nm
4. <Omega> n≥n0인 모든 n에대하여 f(n)≥c·g(n)을 만족하는 양의 상수 c 와 n0가 존재 → f(n)=Ω(g(n))11 n≥1인 모든n에 대해 3n+2≥3n임으로3n+2=Ω(n) 6· 2n+n2 = Ω(n2)
5 <Theata>n≥n0인 모든 n에 대하여 c1·g(n)≤f(n)≤c2·g(n)을 만족하는 양의 상수 c1, c2, n0가 존재 → f(n)= (g(n)) 12 n≥2인 모든 n에 대해, 3n+2≥3n이고3n+2≤4n임으로 3n+2 = (n) 4 f(n)=O(g(n))이고 f(n)=Ω(g(n))이면 f(n)= (g(n))
13행렬의 덧셈을 구하는 알고리즘의 시간 복잡도를 - 표기법으로 표기[풀이] 7번째 있는 문장이 rows·cols만큼 실행 → (rows·cols)
14 이진 탐색 알고리즘의 시간 복잡도를 O-표기법으로 표기
[풀이] 이진 탐색 알고리즘에서 기본 연산 : 비교 연산 검색해야 할 레코드= n → 한번 비교에 의해 검색 공간이 반으로 감소비교 횟수 T(n)은 다음과 같은 순환식으로 유도됨T(n) = 1, n=1T(n) =
이진 탐색 알고리즘은 최악의 경우 시간 복잡도 : O(logn)최선의 경우 시간 복잡도 : O(1)3.4 실제적인 복잡도- 알고리즘의 시간 복잡도 : 입력 자료의 특성에 관한 함수<예> 알고리즘 A의 복잡도 : O(n), 알고리즘 B의 복잡도: → 충분히 큰 n에 대해 A가 B보다 빠르다고 할 수 있음
n 값의 변화에 따른 함수 값의 비교3.5 최적 알고리즘- 최적 알고리즘 : 문제 자체에 내재된 복잡도와 알고리즘의 최악의 경우의 복잡도가 같은 알고리즘
→ 더 빠른 알고리즘이 존재하지 않는다는 의미- 알고리즘의 최적성(optimality)을 결정하기 위해 하한(lower bound)과 상한(upper bound)이라는 개념을 사용하한(lower bound) ·특정 문제를 해결하기 위해 가능한 모든 알고리즘을 고려하여 이들 중 최악의 경우가 가장 최소인알고리즘의 복잡도·문제 자체에 내재된 복잡도를 수학적으로 분석
상한(upper bound) ·특정 문제를 해결하기 위해 기존의 알려진 알고리즘들 중에서 최악의 경우 그 복잡도가 최소인 알고리즘의 복잡도- 최적 알고리즘 : 그 알고리즘의 복잡도와 그 문제의 하한이 같은 알고리즘
15 n개의 원소를 갖는 리스트 내에서 가장 큰 원소를 찾는 문제의 최적 알고리즘
[풀이] 알고리즘의 기본 연산 : 비교 연산① 상한: FindMax알고리즘의 5번째 줄에서 (n-1)번 비교가 이루어지므로 알고리즘의 상한은 (n-1)② 하한: ·리스트 내의 모든 원소가 서로 다르다고 가정·n개의 서로 다른 원소에서 (n-1)개의 원소는 최대값이 아님·임의의 원소가 리스트 내의 최소한 하나의 다른 원소보다 적다면 그 원소는 최대값이 아님·(n-1)개의 원소는 다른 것보다 적게 되고, 한번 비교에 의해서 하나의 원소가 다른 원소 보다 적다는 사실을 알 수 있으므로 (n-1)번의 비교가 필요·문제 자체에 내재된 복잡도 : (n-1)
FindMax알고리즘의복잡도가 그 하한 값과 같으므로 최적 알고리즘4 성능 측정- 실제 시스템에서 프로그램의 실행 시간을 측정- C 언어에서 사건(event)들의 시간을 측정하기 위해 사용하는 시스템 호출① clock() : 프로그램의 수행이 시작되어 사용된 프로세서의 시간을 반환② time() : 1970년 1월 1일 00:00:00시부터 경과된 시간을 초 단위로 반환