보간 검색

  1. 보간 검색 알고리즘
  2. 보간 검색 예
  3. 보간 검색 알고리즘 구현
  4. 보간 검색 알고리즘 복잡성
보간 검색

보간 검색은 빠르고 효율적인 검색 알고리즘입니다. 배열 요소가 정렬 된 배열에 균일하게 분산되는 시나리오에 대한 이진 검색 알고리즘을 개선합니다. 필요한 값의 프로빙 위치에서 작동합니다. 이진 검색과 달리 항상 배열의 중간으로 이동하지는 않지만 검색 할 키의 값에 따라 임의의 위치로 이동할 수 있습니다. 추정 된 위치의 값을 비교하고 검색 공간을 전후 부분으로 줄입니다. 예를 들어, 사전에서 단어를 검색 할 때 매번 검색 공간을 두 개로 나누지 않고 그 안에있는 글자의 위치에 따라 페이지를 넘깁니다.

보간 검색 알고리즘

n요소를 포함하는 정렬되지 않은 배열A[]가 있고 주어진 요소X를 찾고 싶다고 가정 해 보겠습니다.

  • lo0으로,mid-1로,hin-1로 설정합니다.
  • lo<=hi와 X가lohi사이의 범위에있는 동안, 즉X> = A[lo]X <= A[hi].
    • 프로브 위치 공식을 사용하여mid계산-mid = lo + (X-A[lo]) * (hi-lo) / (A[hi]-A[lo])
    • 프로브 위치의 요소가 목표 요소보다 작 으면 오른쪽으로 이동합니다. A[mid]<X이면lomid + 1로 설정합니다.
    • 그렇지 않으면 요소가 대상 요소보다 크면 왼쪽으로 이동합니다. A[mid]>X인 경우himid-1로 설정합니다.
    • 그렇지 않으면 요소를 찾아mid를 반환합니다.
  • lo==hi이면 하나의 요소 만 남습니다. 대상 요소인지 확인합니다. 즉,A[lo]==X인지 확인합니다.
    • true이면lo를 반환합니다.
    • 그렇지 않으면-1을 반환합니다.

보간 검색 예

배열이(1, 3, 7, 8, 11, 15, 17, 18, 21)이고 X-18을 찾고 싶다고 가정합니다.

  • lo=0,mid=-1hi=8을 설정합니다.
  • 공식-0 + (18-1) * (8-0)/(21-1)을 사용하여mid6으로 계산합니다.
  • 그런 다음A[6]X와 비교하여 더 작은 지 확인하고lo7로 설정합니다.
  • 7 + (18-18) * (8-7) / (21-18)을 사용하여mid를 계산합니다.
  • 그런 다음A[7]X와 비교하여18과 같은지 확인하고7인덱스를 반환합니다.

보간 검색 알고리즘 구현

#include <bits/stdc++.h>
using namespace std;

int interpolation_search(int arr[], int n, int X) {
  int lo = 0;
  int hi = n - 1;
  int mid;

  while ((arr[hi] != arr[lo]) && (X >= arr[lo]) && (X <= arr[hi])) {
    mid = lo + ((X - arr[lo]) * (hi - lo) / (arr[hi] - arr[lo]));

    if (arr[mid] < X)
      lo = mid + 1;
    else if (X < arr[mid])
      hi = mid - 1;
    else
      return mid;
  }

  if (X == arr[lo])
    return lo;
  else
    return -1;
}

int main(void) {
  int n = 9;
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int x = 4;
  int result = interpolation_search(arr, n, x);
  if (result == -1) {
    cout << "Element not found !!";
  } else
    cout << "Element found at index " << result;
  return 0;
}

보간 검색 알고리즘 복잡성

시간 복잡성

  • 평균 사례

알고리즘의 평균 케이스 시간 복잡도는O(log(logn))의 순서입니다. 배열 내부의 모든 요소가 균일하게 분포 될 때 발생합니다.

  • 베스트 케이스

가장 좋은 경우는 우리가 검색하는 요소가 보간 검색에 의해 탐색 된 첫 번째 요소 일 때 발생합니다. 알고리즘의 최상의 경우 시간 복잡도는O(1)입니다.

  • 최악의 경우

최악의 경우는 목표의 숫자 값이 기하 급수적으로 증가 할 때 발생합니다. 알고리즘의 최악의 경우 시간 복잡도는O(n)입니다.

공간 복잡성

이 알고리즘의 공간 복잡성은 임시 변수 이외의 데이터 구조가 필요하지 않기 때문에O(1)입니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

관련 문장 - Search Algorithm