알고리즘이란, 어떤 입력에 모든 사례에 대해서 해답을 찾을 수 있도록 컴퓨터 프로그램을 만들어 내기 위해서 각 사레에 대해 해답을 찾아주는 일반적인 단계별 절차를 명시
-의사코드는 배열 인덱스 범위의 제한x (아무 숫자나 시작가능하나 보통 1로 시작)
-c++은 인덱스 0부터 시작
-c++ 명령문 대신 수학적 표현식 허용
문제에서 특정값이 주어지지 않은 변수
void seqsearch(int n,
const keytype S[], //여기서 keytype는 아무 타입이나 상관 없다는 의미
index& location) { // &를 붙여서 출력함
location = 1;
while (location <= n && S[location] != x) //이부분이 true라면 loc 1증가
location++;
if(location > n)
location = 0;
//while 문을 돌리고 if 돌리고 조건x 출력으로 리턴함.
void binsearch(int n, //입력 (1)
const keytype S[], // 입력 (2)
keytype x, // 입력(3)
index& location) { //출력
index low, high, mid;
low =1; high = n;
location =0;
while (low <= high && location ==0 {
mid = (low + high) / 2; //정수 나눗셈
if(x == S[mid])
location = mid;
else if (x < S[mid])
high = mid - 1;
else
low = mid + 1 ;
}
}
int binsearch ( int n, int*s, int x);
void main(){
int size = 6,loc;
int array[6] = {2,5,6,7,10,11,12};
int key;
printf("검색할 데이터 입력 =>");
scanf("%d", &key);
loc = binsearch (size, array, key);
printf("검색한 위치는 =%d 입니다 \n", loc);
}
int binsearch(int n, int*s, int x){ // *s 는 배열의 주소를 몰라서 포인터로 받음.
int low, high, mid, location = -1;
low=0;
high=n-1;
while( low <= high && location == -1)
{
mid = (low+high)/2;
if(x== s[mid]) //포인터를 배열로 표현
location =mid
else if (x< s[mid])
high =mid-1;
else
mid +1;
} return location; }
-피보나치 알고리즘
int fib(int n)
{
if ( n <=1)
return n;
else
return fib (n-1) + fib (n-2);}
참고 : 피보나치인 재귀 알고리즘은 수행속도가 매우 느리다는 단점이 있다.
-fib(n)의 함수 호출 횟수 계산
T(n) = fib(n)
T(0) = 1 // T ==횟수
T(1) = 1 // for n>-2 왜냐하면 T(n-1)>T(n-2)
T(n) = T( n-1) + T(n-2) + 1
'>' 2 x T (n-2) // 큰 차수로 해줘서 성능 올려 식 간단히 함, 큰 차수만으로 계산해서 흐름확인.
'>' 2x2 x T (n-4)
'>' 2x2x2 x T (n-6)
...
'>' 2^(n/2) x T(0)
=2^(n/2)