선형, 이진 및 보간 검색 알고리즘 설명
선형 검색
순차 검색이라고도 하는 선형 검색은 가장 기본적인 검색 알고리즘입니다. O(n)의 a를 사용하면 선형 검색은 데이터 구조의 각 요소를 검색 중인 요소와 비교하는 것으로 구성됩니다. 값을 찾았는지 여부에 따라 찾고 있던 값을 반환할지 또는 부울을 반환할지 여부는 구현에 달려 있습니다. 짐작할 수 있듯이 이것은 매우 비효율적인 프로세스입니다.
function linearSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) return i;
}
return null;
}
이진 검색
이진 검색 알고리즘은 정렬된 데이터 구조와 함께 작동합니다. 이 구현에서는 퀵 정렬 알고리즘을 사용합니다. 이 알고리즘의 big-O 표기법은 O(log n)입니다. 프로세스는 다음과 같습니다.
function linearSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) return i;
}
return null;
}
이진 검색 알고리즘은 정렬된 데이터 구조와 함께 작동합니다. 이 구현에서는 퀵 정렬 알고리즘을 사용합니다. 이 알고리즘의 big-O 표기법은 O(log n)입니다. 프로세스는 다음과 같습니다.
value
를 선택합니다.value
가 검색 대상이면 완료된 것입니다value
보다 작으면 왼쪽 하위 배열value
보다 크면 올바른 하위 배열을 사용하여 1단계로 돌아가십시오.function binarySearch(arr, target) {
const sortedArr = quickSort(arr);
let low = 0;
let high = sortedArr.length - 1;
while (low <= high) {
const mid = Math.floor(low + high);
const element = sortedArr[mid];
if (element < target) {
low = mid + 1;
} else if (element > target) {
high = mid - 1;
} else {
return mid;
}
}
return null;
}
보간 검색
보간 검색은 기본적으로 이진 검색의 향상된 버전입니다. 이 검색 알고리즘은 전화번호부에서 이름을 검색하는 방법과 유사합니다. 각 단계에서 알고리즘은 나머지 검색 공간에서 대상 요소가 대상 요소와 비교한 경계 값을 기반으로 할 수 있는 위치를 계산합니다. 요소가 균일하게 분포된 경우 시간 복잡도는 O(log(log n))입니다. 최악의 경우 O(n)까지 소요될 수 있습니다.
이 알고리즘의 단계는 첫 번째 단계를 제외하고 이진 검색의 단계와 동일합니다. 배열 중간에 있는 값을 value
로 선택하는 대신 아래 구현에서 알 수 있는 position
공식을 사용하여 값을 선택합니다.
function interpolationSearch(arr, target) {
let low = 0;
let high = arr.length - 1;
let position = -1;
let delta = -1;
while (low <= high && target >= arr[low] && target <= arr[high]) {
delta = (target - arr[low])/(arr[high] - arr[low]);
position = low + Math.floor((high - low) * delta);
if (arr[position] === target) {
return position;
}
if (arr[position] < target) {
low = position + 1;
} else {
high = position - 1;
}
}
return null;
}
다음 예에서는 분포가 매우 균일하고 델타/차이가 매우 작기 때문에 이 검색에 매우 이상적인 상황입니다.
결론
이 기사가 몇 가지 일반적인 검색 알고리즘을 더 명확하게 이해하는 데 도움이 되었기를 바랍니다. 검색 알고리즘은 알고리즘 연습의 기본이며 훨씬 더 복잡하고 흥미로운 솔루션에 대한 문을 열어줍니다. 이 게시물에서 다루는 많은 자료에 의존하는 향후 게시물에서 몇 가지 흥미로운 알고리즘을 검토할 예정이니 계속 지켜봐 주시기 바랍니다.
Reference
이 문제에 관하여(선형, 이진 및 보간 검색 알고리즘 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/christinamcmahon/linear-binary-and-interpolation-search-algorithms-explained-55ni
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function interpolationSearch(arr, target) {
let low = 0;
let high = arr.length - 1;
let position = -1;
let delta = -1;
while (low <= high && target >= arr[low] && target <= arr[high]) {
delta = (target - arr[low])/(arr[high] - arr[low]);
position = low + Math.floor((high - low) * delta);
if (arr[position] === target) {
return position;
}
if (arr[position] < target) {
low = position + 1;
} else {
high = position - 1;
}
}
return null;
}
이 기사가 몇 가지 일반적인 검색 알고리즘을 더 명확하게 이해하는 데 도움이 되었기를 바랍니다. 검색 알고리즘은 알고리즘 연습의 기본이며 훨씬 더 복잡하고 흥미로운 솔루션에 대한 문을 열어줍니다. 이 게시물에서 다루는 많은 자료에 의존하는 향후 게시물에서 몇 가지 흥미로운 알고리즘을 검토할 예정이니 계속 지켜봐 주시기 바랍니다.
Reference
이 문제에 관하여(선형, 이진 및 보간 검색 알고리즘 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/christinamcmahon/linear-binary-and-interpolation-search-algorithms-explained-55ni텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)