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 |
Tags
- 웹 크롤링
- 자바스크립트 엔진 v8
- 항해99 미니프로젝트
- 항해99 사전스터디
- 알고리즘
- 함수형 프로그래밍 특징
- next js
- 리액트 렌더링 최적화
- 타입스크립트
- toggle-btn
- 리액트 메모
- 리액트
- this
- FP 특징
- 웹팩 기본개념
- Js module
- 리덕스
- JS module system
- 렌더링 최적화
- js배열 알고리즘
- gql restapi 차이
- jwt
- 리액트 메모이제이션
- 항해99
- chromatic error
- 실행컨텍스트
- v8 원리
- 항해99 부트캠프
- 코어자바스크립트
- 테스트 코드 툴 비교
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 |