본문 바로가기
컴퓨터 이론/C언어 & 자료구조 & 알고리즘

41. 탐색 (2)

by 컴퓨터공부용 2023. 5. 27.

피보나치 탐색

피보나치 탐색은 피보나치 수열을 이용하는 탐색 방법이다.

 

int fiboSearch(int arr[], int n, int key){
    int fib2 = 0, fib1 = 1, fib = fib2 + fib1;
    int i, offset = -1;
    
    while (fib < n){
        fib2 = fib1;
        fib1 = fib;
        fib = fib2 + fib1;
    }
    while(fib > 1){
        i = (offset + fib2) < (n - 1) ? offset + fib2 : n - 1;
        if(arr[i] < key){
            fib = fib1;
            fib1 = fib2;
            fib2 = fib - fib1;
            offset = i;
        }
        else if (arr[i] > key){
            fib = fib2;
            fib1 = fib1 - fib2;
            fib2 = fib - fib1;
        }
        else
            return i;
    }
    
    if(fib1 == 1 && arr[offset + 1] == key)
        return offset + 1;
    return -1;
}

보간 탐색

보간탐색은 예측을 이용하는 탐색 방법이다.

배열의 값을 보간하여 특정 값이 위치할 것으로 예측하고, 그에 따라 탐색 범위를 좁혀가는 방식이다.

int interpolationSearch(int arr[], int n, int key){
    int low = 0, high = n - 1, pos;
    
    while(low <= high && key >= arr[low] && key <= arr[high]){
        if(low == high){
            if(arr[low] == key) return low;
            return -1;
        }
        pos = low + (((double)(high - low) / (arr[high] - arr[low])) * (key - arr[low]));
        
        if (arr[pos] == key)    return pos;
        else if (arr[pos] < key) low = pos + 1;
        else high = pos - 1;
    }
    return -1;
}

'컴퓨터 이론 > C언어 & 자료구조 & 알고리즘' 카테고리의 다른 글

44. 동적 해싱  (0) 2023.06.15
43. 해싱 오버플로우 처리 기법  (0) 2023.06.15
40. 탐색 (1)  (0) 2023.05.25
39. AOE  (0) 2023.05.19
38. AOV  (0) 2023.05.18

댓글