정리 : 재귀적 알고리즘으로 구성한 재귀 트리의 마디의 수를 T(n)이라고 하면, n>=2인 모든 n에 대하여 T(n) > 2^n/2이다.
int fib2(int n) //n을 6이라고 가정
{
index i;
int f[0..n];
f[0] =0;
if (n>0)
{
f[1] =1;
for (i =2; i<=n; i++)
f[i] = f[i-1] +f[i-2];
}
return f[n];
}
횟수 = n+1번
알고리즘이 반복되고, 알고리즘의 입력 수가 증가할수록 걸리는 시간은 기하급수적으로 늘어나기 때문이다.
number sum (int n, cost number S[])
{
index i;
number result;
result = 0;
for (i =1; i<=n; i++)
result = result + S[i];
return result;}
//예시를 n에 5대입 해보면 됌.
단위 연산 : 덧셈
입력크기 : 배열의 크기 n
모든 경우 분석 :
- 배열 내용에 상관없이 for-루프가 n번 반복된다.
- 각 루프마다 덧셈이 1회 수행된다.
- 따라서, n에 대해서 덧셈이 수행되는 총 횟수는 T(n) =n이다.
void exchangesort(int n, keytype = S[])
{
indext i, j;
for(i=1; i<=n-1; i++)
for(j=i+1; j<=n; j++)
if(S[j] < S[i])
exchange S[i] and S[j]; }
(n에 5를 대입한다는 가정을 해서 보면 이해하기 쉽다)
따라서, 순차검색 알고리즘의 경우 입력배열의 값에 따라서 검색하는 횟수가 달라지므로, 모든 경우 분석은 불가능하다.
정확한 알고리즘이란?
- 어떠한 입력에 대해서도 답을 출력하면서 멈추는 알고리즘
정확하지 않은 알고리즘이란?
- 어떤 입력에 대해서 멈추지 않거나, 또는 틀린 답을 출력하면서 멈추는 알고리즘