250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- JS module system
- js배열 알고리즘
- 항해99 부트캠프
- 리액트 메모
- 리덕스
- 리액트 렌더링 최적화
- v8 원리
- 렌더링 최적화
- this
- 테스트 코드 툴 비교
- 웹 크롤링
- jwt
- Js module
- 항해99 사전스터디
- 코어자바스크립트
- FP 특징
- next js
- 알고리즘
- toggle-btn
- 항해99
- gql restapi 차이
- chromatic error
- 리액트 메모이제이션
- 리액트
- 타입스크립트
- 실행컨텍스트
- 항해99 미니프로젝트
- 함수형 프로그래밍 특징
- 웹팩 기본개념
- 자바스크립트 엔진 v8
Archives
- Today
- Total
Jaeilit
이진탐색 본문
728x90
완전탐색 중 단순 브루트포스는 모든 값을 읽어내기 때문에 가장 오래걸리지만 가장 확실한 방법입니다.
주어진 배열에서 어떤 값을 비교해서 최대 값을 찾거나 최소 값을 찾거나 이런 경우에는 배열을 2중으로 훑어야 하기 때문에
시간 복잡도는 O(n^2) 이 됩니다.
이진탐색 나무위키 그림입니다.
기본개념은 분할정복인데,
이유는 계속 반으로 나누면서(분할) 내가 원하는 조건에 상회하는지 지속적으로 살피는 것이기 때문이다.
이진탐색의 시간복잡도는 O(log N)으로 선형탐색 O(N) 보다 더 빠릅니다.
이유는 정말 간단하게도 분할을 하기 때문입니다.
이진탐색의 예시 코드 입니다.
left 또는 statrt 라고 표현하며 시작 지점과,
rigth 또는 End 라고 표현하는 끝 지점을 지정해주고
middle 지점은 left 와 rigth 를 더 한 값의 /2 를 해준 중간 지점을 찾게 해줍니다.
배열의 Middle 지점이 제가 원하는 값의 크기에 따라 좌우로 움직이며 계속 제가 제시한 값의 위치, 인덱스를 찾아서 반환해줄 것입니다.
function binarySearch(arr, elem) {
let start = 0;
let end = arr.length - 1;
let middle = Math.floor((start + end) / 2);
while(arr[middle] !== elem && start <= end) {
if(elem < arr[middle]){
end = middle - 1;
} else {
start = middle + 1;
}
middle = Math.floor((start + end) / 2);
}
if(arr[middle] === elem){
return middle;
}
return -1;
}
console.log(binarySearch([1, 2, 3, 4, 5], 3)); // 2
console.log(
binarySearch(
[
5, 6, 10, 13, 14, 18, 30, 34, 35, 37, 40, 44, 64, 79, 84, 86, 95, 96, 98,
99,
],
10
)
); // 2
console.log(
binarySearch(
[
5, 6, 10, 13, 14, 18, 30, 34, 35, 37, 40, 44, 64, 79, 84, 86, 95, 96, 98,
99,
],
95
)
); // 16
console.log(
binarySearch(
[
5, 6, 10, 13, 14, 18, 30, 34, 35, 37, 40, 44, 64, 79, 84, 86, 95, 96, 98,
99,
],
100
)
); // -1)
728x90
'알고리즘' 카테고리의 다른 글
백준 2805 나무 자르기 (0) | 2022.10.02 |
---|---|
백준 1920 이진탐색 (0) | 2022.10.01 |
카카오 신고 결과 받기 (0) | 2022.08.30 |
투포인트 JS (0) | 2022.08.27 |
배열 검사 (0) | 2022.08.23 |