728x90
1. 순차탐색
- 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서 부터 하나씩 확인한다.
- 탐색을 위한 시간 복잡도 : O(N)
2. 이진탐색
- 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다.
- 시작점(left)와 끝점(end)을 기준으로 탐색
- 탐색을 위한 시간 복잡도 : O(logN)
- 매우 넓은(억 단위 이상) 탐색 범위에서 최적의 해를 찾아야 하는 경우
- 데이터를 정렬한 뒤에 다수의 쿼리를 날려야 하는 경우
3. 이진 탐색 코드 예시(재귀 함수)
function binarySearch(arr,target,start,end){
if(start>end) return -1;
let mid = parseIng((start+end)/2);
//찾은 경우 중간점 인덱스 반환
if(arr[mid]===target) return mid;
//중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽을 확인
else if(arr[mid]>target) return binarySearch(arr,target,start,mid-1);
//중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽을 확인
else return binarySearch(arr,target,mid+1, end);
}
let n=10;
let target=7;
arr=[1,3,5,7,9,11,13,15,17,19];
let result = binarySearch(arr,target,0,n-1);
if(result===-1) console.log("원소가 존재하지 않습니다")
else console.log(`${result+1}번째 원소입니다`)
4.이진 탐색 코드 예시(반복문)
function binarySearch(arr,target,start,end){
while(start<=end){
let mid = parseInt((start+end)/2);
//찾은 경우 중간점 인덱스 반환
if(arr[mid]===target) return mid;
//중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
else if(arr[mid>target]) end = mid-1;
//중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
else start=mid+1
}
return -1
}
let n =10;
let target=7;
arr =[1,3,5,7,9,11,13,15,17,19]
let result = binarySearch(arr,target,0,n-1);
if(result===-1) console.log("원소가 존재하지 않습니다");
else console.log(`${result+1}번째 원소입니다`)
728x90
'알고리즘' 카테고리의 다른 글
3. 파라메트릭 서치 이해하기 (0) | 2023.05.01 |
---|---|
2. 정렬된 배열에서 특정 원소의 개수 구하기 (0) | 2023.04.30 |
프로그래머스 > 코딩 테스트 연습 > 연속 부분 수열의 합 (0) | 2023.04.26 |
그리디 문제풀이(3) (0) | 2023.04.23 |
그리디 문제풀이(2) (0) | 2023.04.23 |