답변:
보간 검색을 수행하려면 순서보다 더 많은 키 유형이 필요합니다. 키를 비교하여 키를 비교하는 것뿐만 아니라 키를 계산하여 가능한 거리를 추정 할 수 있어야합니다. 보다 작은.
데이터 셋의 속성에 관한 한, 그것은 주로 하나의 속성에 관한 것입니다 : 키가 가능성의 범위에 걸쳐 합리적으로 (또는 적어도 예측 가능하게) 분배 될 가능성. 그렇지 않으면 보간 검색이 실제로 는 이진 검색보다 느릴 수 있습니다 .
예를 들어 소문자 문자열을 키로 사용하는 데이터 세트를 고려하십시오. "x"로 시작하는 키가 있다고 가정 해 봅시다. 보간 검색은 세트의 끝 부분에 매우 근접하여 검색을 시작해야한다는 것을 분명히 나타냅니다. 그러나 대부분 의 키가 실제로 'z'로 시작하고 'y'를 통해 'a'의 항목이 거의없는 경우 실제로 검색하는 키가 실제로 세트의 시작 부분에 매우 가깝습니다. 검색이 'w'로 시작하는 문자열이있는 시작 부분에 가까워지기 전에 상당한 반복 횟수가 걸릴 수 있습니다. 반복 할 때마다 데이터 세트의 ~ 10 % 만 제거되므로 키가 'w'로 시작하는 시작 부분에 가까워지기 전에 여러 번 반복해야합니다.
반대로 이진 검색은 중간에서 시작 하여 두 번째 반복에서 1/4 표시, 세 번째에서 1/8 표시 등을 수행합니다. 키의 왜곡으로 인해 성능이 거의 영향을받지 않습니다. 각 반복은 키가 균등하게 분배 된 것처럼 데이터 세트의 절반을 고려에서 제거합니다.
나는 정말 가지고 간다, 그러나, 추가 서둘러 아주 보간은 이진 검색보다 눈에 띄게 악화를 검색하기 위해 왜곡 된 분포를. 예를 들어, 상당한 양의 현지화 된 클러스터링이있는 경우에도 성능이 매우 우수합니다.
또한 보간 검색에 반드시 선형 보간을 사용할 필요는 없습니다. 예를 들어, 키가 비선형 분포 (예 : 종 곡선)를 따르는 것으로 알려진 경우 보간 함수에서 키를 고려하면 분포가 균일하지 않은 결과와 거의 다른 결과를 얻을 수 있습니다.
a
그러나로 시작하는 단일 특이 치는 성능을 크게 저하시킵니다.
문제는 실제로 이진 검색보다 더 나은 보간 함수를 얼마나 쉽게 만들 수 있을까요?
big-O 표기법을 사용하여 크기 N의 데이터 세트에 대한 보간 알고리즘의 성능은 O (N)입니다. 그러나 보간에 사용 된 선형 스케일로 데이터의 균일 한 분포를 가정하면 성능은 O (log log N)로 표시 될 수 있습니다.
보간 탐색의 실제 성능은 감소 된 프로브 수가 각 프로브에 필요한보다 복잡한 계산에 의해 초과되는지 여부에 따라 다릅니다. 디스크의 큰 정렬 파일에서 레코드를 찾는 데 유용 할 수 있습니다. 여기서 각 프로브는 디스크 탐색을 포함하며 보간 산술보다 훨씬 느립니다.
B- 트리와 같은 인덱스 구조는 디스크 액세스 수를 감소 시키며 많은 유형의 데이터를 인덱싱하고 온라인으로 업데이트 할 수 있기 때문에 온 디스크 데이터를 부분적으로 인덱싱하는 데 더 자주 사용됩니다. 그러나 보간 검색은 정렬되었지만 색인이 생성되지 않은 특정 온 디스크 데이터 세트를 강제로 검색 할 때 유용 할 수 있습니다.
이진 탐색과 보간 탐색은 모두 선형 탐색 방법으로 간주됩니다.
둘 다 검색중인 목록이 키 라고하는 열에서 정렬 될 것으로 예상합니다 . 이건 매우 중요합니다.
이진 검색은 문자열이나 숫자가 정렬 된 순서대로 저장되어있는 한 작동합니다. 이진 검색의 기본 아이디어는 중간 요소 검사를 기반으로한다는 것입니다. 보간 검색은 변형입니다. 정확한 중간 요소를 사용하는 대신 전달 된 값과 비교할 다음 요소가 어디에 있는지 추측합니다. 보간 검색 알고리즘이 다음 키 값을 계산하는 방법에 대한 자세한 내용은 JB King 답변에서 제공 한 참조 또는이 답변에서 아래 참조를 참조하십시오 .
"보간 탐색은 균일 한 분포를 갖는 정렬 된 배열 순서로 정렬 된 숫자 요소에 대해서만 작동합니다 (즉, 연속 요소들 사이의 간격은 거의 일정합니다"(P 737 아래 참조에서 인용). ).