보간 검색
보간 검색은 키에 할당된 숫자 값(키 값)으로 정렬된 배열에서 키를 검색하는 알고리즘입니다.
예를 들어
n개의 균일하게 분포된 값 arr[]의 정렬된 배열이 있고 배열에서 특정 요소 대상을 검색하는 함수를 작성해야 한다고 가정합니다.
위치를 찾기 위해 다음 작업을 수행합니다 -
// 공식의 아이디어는 pos의 더 높은 값을 반환하는 것입니다.
// 검색할 요소가 arr[hi]에 가까울 때. 그리고
// arr[lo]
에 가까울 때 더 작은 값pos = lo + ((x - arr[lo]) * (hi - lo) / (arr[hi] - arr[Lo]))
키 -
-
arr[] - 요소를 검색해야 하는 배열
-
x - 검색할 요소
-
lo - arr[]
의 시작 인덱스 -
hi - arr[]
의 끝 인덱스
숫자 배열을 첫 번째 인수로, 검색 대상을 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다.
함수는 배열에서 대상을 검색하기 위해 보간 검색 알고리즘을 사용해야 합니다.
예시
다음은 코드입니다 -
const arr = [1, 4, 6, 7, 9, 12, 15, 16, 17, 23, 25, 26, 27, 31];
const target = 25;
const interpolationSearch = (arr = [], target) => {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const rangeDelta = arr[right] - arr[left];
const indexDelta = right - left;
const valueDelta = target - arr[left];
if (valueDelta < 0) {
return -1;
}
if (!rangeDelta) {
return arr[left] === target ? left : -1;
}
const middleIndex = left + Math.floor((valueDelta * indexDelta) / rangeDelta);
if (arr[middleIndex] === target) {
return middleIndex;
}
if (arr[middleIndex] < target) {
left = middleIndex + 1;
} else {
right = middleIndex - 1;
}
};
return -1;
};
console.log(interpolationSearch(arr, target)); 출력
다음은 콘솔의 출력입니다 -
10