보간 검색 대 이진 검색


13

이진 검색 대신 보간 검색을 언제 사용해야합니까?

예를 들어 정렬 된 데이터 집합이 있는데, 어떤 상황에서 이진 검색을 사용하여이 데이터 집합에서 항목을 찾거나 어떤 상황에서 보간 검색을 사용해야합니까?

데이터 셋의 어떤 속성이 결정 요인이 될까요?

답변:


12

보간 검색을 수행하려면 순서보다 더 많은 키 유형이 필요합니다. 키를 비교하여 키를 비교하는 것뿐만 아니라 키를 계산하여 가능한 거리를 추정 할 수 있어야합니다. 보다 작은.

데이터 셋의 속성에 관한 한, 그것은 주로 하나의 속성에 관한 것입니다 : 키가 가능성의 범위에 걸쳐 합리적으로 (또는 적어도 예측 가능하게) 분배 될 가능성. 그렇지 않으면 보간 검색이 실제로 는 이진 검색보다 느릴 수 있습니다 .

예를 들어 소문자 문자열을 키로 사용하는 데이터 세트를 고려하십시오. "x"로 시작하는 키가 있다고 가정 해 봅시다. 보간 검색은 세트의 끝 부분에 매우 근접하여 검색을 시작해야한다는 것을 분명히 나타냅니다. 그러나 대부분 의 키가 실제로 'z'로 시작하고 'y'를 통해 'a'의 항목이 거의없는 경우 실제로 검색하는 키가 실제로 세트의 시작 부분에 매우 가깝습니다. 검색이 'w'로 시작하는 문자열이있는 시작 부분에 가까워지기 전에 상당한 반복 횟수가 걸릴 수 있습니다. 반복 할 때마다 데이터 세트의 ~ 10 % 만 제거되므로 키가 'w'로 시작하는 시작 부분에 가까워지기 전에 여러 번 반복해야합니다.

반대로 이진 검색은 중간에서 시작 하여 두 번째 반복에서 1/4 표시, 세 번째에서 1/8 표시 등을 수행합니다. 키의 왜곡으로 인해 성능이 거의 영향을받지 않습니다. 각 반복은 키가 균등하게 분배 된 것처럼 데이터 세트의 절반을 고려에서 제거합니다.

나는 정말 가지고 간다, 그러나, 추가 서둘러 아주 보간은 이진 검색보다 눈에 띄게 악화를 검색하기 위해 왜곡 된 분포를. 예를 들어, 상당한 양의 현지화 된 클러스터링이있는 경우에도 성능이 매우 우수합니다.

또한 보간 검색에 반드시 선형 보간을 사용할 필요는 없습니다. 예를 들어, 키가 비선형 분포 (예 : 종 곡선)를 따르는 것으로 알려진 경우 보간 함수에서 키를 고려하면 분포가 균일하지 않은 결과와 거의 다른 결과를 얻을 수 있습니다.


1
설명하는 문제는 Int.MIN_VALUE 및 Int.MAX_VALUE를 가정하는 대신 첫 번째 요소와 마지막 요소를 사용하여 범위를 결정함으로써 쉽게 조정됩니다 (적어도 알고리즘을 배운 방법입니다).
Malfist

2
@Malfist : 도움이 될 수 있지만 반드시 문제를 해결할 필요는 없습니다. 이 예에서 'a'부터 'q'까지 어떤 것으로 시작하는 키 가 0아닌 경우 보간은 매우 부드럽게 진행됩니다. a그러나로 시작하는 단일 특이 치는 성능을 크게 저하시킵니다.
Jerry Coffin

1

문제는 실제로 이진 검색보다 더 나은 보간 함수를 얼마나 쉽게 만들 수 있을까요?

보간 검색 위키 백과에서 :

big-O 표기법을 사용하여 크기 N의 데이터 세트에 대한 보간 알고리즘의 성능은 O (N)입니다. 그러나 보간에 사용 된 선형 스케일로 데이터의 균일 한 분포를 가정하면 성능은 O (log log N)로 표시 될 수 있습니다.

보간 탐색의 실제 성능은 감소 된 프로브 수가 각 프로브에 필요한보다 복잡한 계산에 의해 초과되는지 여부에 따라 다릅니다. 디스크의 큰 정렬 파일에서 레코드를 찾는 데 유용 할 수 있습니다. 여기서 각 프로브는 디스크 탐색을 포함하며 보간 산술보다 훨씬 느립니다.

B- 트리와 같은 인덱스 구조는 디스크 액세스 수를 감소 시키며 많은 유형의 데이터를 인덱싱하고 온라인으로 업데이트 할 수 있기 때문에 온 디스크 데이터를 부분적으로 인덱싱하는 데 더 자주 사용됩니다. 그러나 보간 검색은 정렬되었지만 색인이 생성되지 않은 특정 온 디스크 데이터 세트를 강제로 검색 할 때 유용 할 수 있습니다.


0

이진 탐색과 보간 탐색은 모두 선형 탐색 방법으로 간주됩니다.

둘 다 검색중인 목록이 라고하는 열에서 정렬 될 것으로 예상합니다 . 이건 매우 중요합니다.

이진 검색은 문자열이나 숫자가 정렬 된 순서대로 저장되어있는 한 작동합니다. 이진 검색의 기본 아이디어는 중간 요소 검사를 기반으로한다는 것입니다. 보간 검색은 변형입니다. 정확한 중간 요소를 사용하는 대신 전달 된 값과 비교할 다음 요소가 어디에 있는지 추측합니다. 보간 검색 알고리즘이 다음 키 값을 계산하는 방법에 대한 자세한 내용은 JB King 답변에서 제공 한 참조 또는이 답변에서 아래 참조를 참조하십시오 .

"보간 탐색은 균일 한 분포를 갖는 정렬 된 배열 순서로 정렬 된 숫자 요소에 대해서만 작동합니다 (즉, 연속 요소들 사이의 간격은 거의 일정합니다"(P 737 아래 참조에서 인용). ).

Google 도서-클래식 데이터 구조 2Nd Ed.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.