728x90
반응형
[알고리즘] 이진 검색 [Binary Search]
이진 검색(Binary Search)은 정렬된 배열에서 특정 값을 효율적으로 찾기 위한 알고리즘입니다.
이 알고리즘은 다음과 같은 단계를 따릅니다
주의
이진 검색은 분류된 배열을 대상으로만 작동함으로 데이터가 분류되어있어야 한다.
낮은 수에서 큰 수로, 알파벳 순으로 등등 순서가 있어야 한다.
기본 개념
분할 정복 (divide and conquer)
배열을 중간을 기준으로 나누고, 그 중간의 죄측 절반 / 우측 절반에 있을지 확인
이진 검색 방법
중간 값 확인
배열의 중간 값을 확인합니다.
비교
찾고자 하는 값과 중간 값을 비교합니다.
- 찾고자 하는 값이 중간 값보다 작으면, 배열의 왼쪽 절반을 탐색합니다.
- 찾고자 하는 값이 중간 값보다 크면, 배열의 오른쪽 절반을 탐색합니다.
반복
배열의 크기가 0이 될 때까지 이 과정을 반복합니다.
이진 검색은 배열이 정렬되어 있을 때만 사용할 수 있으며, 시간 복잡도는 O(log n)입니다.
예시
정렬된 배열과 값을 받아들이고 값이 존재하는 경우 그 인덱스를 반환하는 binarySearch라는 함수를 작성합니다.
값이 존재하지 않으면 -1을 반환합니다.
이 알고리즘은 linearSearch 보다 더 효율적일 것입니다.
function binarySearch(arr, num){
let start = 0;
let end = arr.length - 1;
let middle = Math.floor((start + end) / 2)
while(arr[middle] !== num && start <= end) {
if (arr[middle] > num) end = middle - 1;
else start = middle + 1;
middle = Math.floor((start + end) / 2);
}
return arr[middle] === num ? middle : -1;
}
binarySearch([2, 5, 6, 9, 13, 15, 28, 30], 13);
이진 검색의 시간 복잡도? (Big O)
참조!
https://www.udemy.com/course/best-javascript-data-structures/
728x90
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 선택 정렬 [Selection Sort] (0) | 2024.07.26 |
---|---|
[알고리즘] 버블 정렬 [Bubble Sort] (0) | 2024.07.25 |
[알고리즘] 핼퍼 메소드 재귀 (Helper Method Recursion) (0) | 2024.07.19 |
[알고리즘] 재귀 (Recursion) (0) | 2024.07.19 |
[알고리즘] 기준점 간 이동 배열 패턴 (Sliding Window) (0) | 2024.07.11 |
댓글