Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 블록 검색 구현

<시간/>

검색 차단

이진 검색과 마찬가지로 블록 검색도 정렬된 배열에 대한 검색 알고리즘입니다. 기본 아이디어는 고정된 단계로 건너뛰거나 모든 요소를 ​​검색하는 대신 일부 요소를 건너뛰어 선형 검색보다 적은 수의 요소를 확인하는 것입니다.

예를 들어

길이가 n인 배열 arr와 크기가 m인 블록(점프할)이 있다고 가정합니다. 그런 다음 인덱스 arr[0], arr[m], arr[2 * m], ..., arr[k * m] 등에서 검색합니다.

arr[k * m]

이 알고리즘의 시간 복잡도는 -

O(√n)

예시

다음은 코드입니다 -

const arr = [1, 4, 6, 7, 9, 12, 15, 16, 17, 23, 25, 26, 27, 31];
const target = 25;
const blockSearch = (arr = [], target) => {
   let { length: len } = arr;
   let step = Math.floor(Math.sqrt(len));
   let blockStart = 0
   let currentStep = step;
   while (arr[Math.min(currentStep, len) - 1] < target) {
      blockStart = currentStep;
      currentStep += step;
      if (blockStart >= len)
         return -1;
   }
   while (arr[blockStart] < target){
      blockStart++;
      if (blockStart == Math.min(currentStep, len))
         return -1;
   }
   if (arr[blockStart] == target)
      return blockStart
   else
      return -1;
};
console.log(blockSearch(arr, target));

출력

다음은 콘솔의 출력입니다 -

10