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
- 에라토스테네스
- 검색엔진최적화
- React
- 분산 네트워크
- MSW
- 부동소수점
- 자료구조
- mock service worker
- greedy
- 탐욕법
- Eratosthenes
- MVC패턴
- deque
- content delivery network
- 알고리즘
- 모킹
- 그리디 알고리즘
- CSSOM
- https
- binary search
- 연결리스트
- 고정소수점
- async
- 구글서치콘솔
- sieve
- await
- 깊이 우선 탐색
- 탐욕 알고리즘
- 유클리드 호제법
- 큐
Archives
- Today
- Total
갱주
이분탐색 알고리즘 (Binary Search) 본문
이분탐색?
이분 탐색(Binary Search)은 정렬된 배열에서 원하는 값을 빠르게 찾는 효율적인 알고리즘입니다.
배열을 절반씩 나누어 탐색하기 때문에 시간 복잡도는 O(log n)입니다.
알고리즘 설명
- 정렬된 배열에서 중간 인덱스를 선택합니다.
- 찾고자 하는 값(target)과 중간 값(mid) 값을 비교합니다.
- 만약 target이 중간 값보다 작다면, 왼쪽 절반만 탐색합니다.
- 만약 target이 중간 값보다 크다면, 오른쪽 절반만 탐색합니다.
- 이 과정을 반복하여 찾고자 하는 값이 중간 값과 같아질 때까지 배열을 절반으로 나누어 탐색합니다.
구현 코드
1. 재귀 방식
def binary_search(arr, target, low, high):
if low > high:
return -1 # 값을 찾지 못한 경우
mid = (low + high) // 2
# target을 찾은 경우
if arr[mid] == target:
return mid
# target이 중간 값보다 작은 경우 왼쪽 절반 탐색
elif arr[mid] > target:
return binary_search(arr, target, low, mid - 1)
# target이 중간 값보다 큰 경우 오른쪽 절반 탐색
else:
return binary_search(arr, target, mid + 1, high)
2. 반복문 방식
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
# target을 찾은 경우
if arr[mid] == target:
return mid
# target이 중간 값보다 작은 경우 왼쪽 절반 탐색
elif arr[mid] > target:
high = mid - 1
# target이 중간 값보다 큰 경우 오른쪽 절반 탐색
else:
low = mid + 1
return -1 # 값을 찾지 못한 경우
3. 내장 함수 사용
파이썬의 bisect 모듈을 사용하면 이분 탐색을 간단하게 구현할 수 있습니다.
- bisect_left(arr, target) = 정렬된 순서를 유지하면서 리스트 arr에 target을 삽입할 가장 왼쪽 인덱스를 찾는 메소드
- bisect_right(arr, target) = 정렬된 순서를 유지하도록 리스트 arr에 target을 삽입할 가장 오른쪽 인덱스를 찾는 메소드
import bisect
def binary_search(arr, target):
index = bisect.bisect_left(arr, target)
# 배열 범위 내에 있고 해당 위치의 값이 target과 같으면 인덱스 반환
if index < len(arr) and arr[index] == target:
return index
else:
return -1 # target이 배열에 없는 경우
'알고리즘' 카테고리의 다른 글
그리디 알고리즘? (Greedy, 탐욕 알고리즘) (0) | 2024.10.16 |
---|---|
유클리드호제법 (0) | 2024.10.15 |
에라토스테네스의 체 (0) | 2024.10.15 |
BFS 알고리즘 (너비 우선 탐색, Breadth-First Search) (3) | 2024.10.14 |
DFS 알고리즘 (깊이 우선 탐색, Depth-First Search) (0) | 2024.10.14 |