보간 검색에 익숙하지 않은 사용자의 경우 이진 검색보다 잠재적으로 더 빠른 정렬 된 배열의 값을 검색하는 방법입니다. 첫 번째 요소와 마지막 요소를보고 (배열의 내용이 균일하게 분포되어 있다고 가정하면) 선형 적으로 보간하여 위치를 예측합니다.문자열의 보간 검색
예 : 우리는 array [0] = 0 및 array [99] = 99 인 길이 100의 배열을 가지고 있습니다. 우리가 80을 찾고 있다면 배열 [50]에 배열 [80]을 시도하는 것이 직관적이며, 배열이 균일하게 분포되어 있다면 예상 런타임은 log(log(N))
으로 줄어 듭니다. 숫자의 경우 확인 할 위치 방정식 : low + ((toFind - sortedArray[low]) * (high - low + 1))/(sortedArray[high] - sortedArray[low])
에 의해 정의됩니다.
보간 검색의 직관적 인 특성을 과시하는 데 사용되는 일반적인 예는 다음과 같습니다. 사전에서 '노란색'단어를 찾으려고합니다. 이진 검색을 사용하지 않고 중간 지점으로 이동합니다. 오히려 예상되는 위치로 이동합니다.
인간은 자연스럽게 선형으로 문자열을 삽입 할 수 있지만 코드 작성 방법을 이해할 수는 없습니다. 문자열을 선형 보간하는 방법은 무엇입니까?
좋은 지적입니다. +1 –
추가 복잡성은 2 mult/div + 5 add/sub입니다. 나는 그것을 테스트했고 네, 바이너리 서치 (N이 어리석지 않다면)보다 조금 느립니다. 그러나 비교가 중요하지 않은 경우 (문자열의 경우처럼) 가치가있을 수 있습니다. – user108088
@ user108088, 복잡도는 거리 계산에도 영향을 미치며, 문자열의 경우에도 중요하지 않습니다. 내 편집을 참조하십시오. –