일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- jetpack
- 백준
- Java
- 파이썬문법
- programmers
- 티스토리챌린지
- 문자열
- ContentProvider
- disposableeffect
- Dependency
- android
- Python
- 배열
- 파이썬
- Hilt
- list
- filternotnull()
- 백준파이썬
- 자바
- compose
- Kotlin
- 자료형
- 프로그래머스
- nullpointerexception방지
- 자바set
- Provider
- composelifecycle
- 자바리스트정렬
- 오블완
- 리스트
Archives
- Today
- Total
study gomi
Algorithm, Python 이분 탐색(Binary Search) 본문
728x90
반응형
이분 탐색(Binary Search)
- 정렬된 배열에서 특정한 값을 효율적으로 찾는 알고리즘
- 탐색 범위를 반으로 줄여가면서 원하는 값을 찾는 것
- 정렬된 배열에서 매우 빠르게 원하는 값을 찾을 수 있음.
- 큰 데이터에서 특정 값을 찾을 때 유용
- 기본 절차
- 배열의 가장 낮은 인덱스(low)와 가장 높은 인덱스(high)를 설정.
- low가 high보다 작거나 같은 동안 반복.
- 중간 인덱스(mid)를 찾는다. 일반적으로 mid = (low + high) // 2로 계산.
- 중간 인덱스의 값(array[mid])이 찾고자 하는 값(target)과 같으면 위치를 반환.
- 만약 array[mid]가 target보다 작으면, low를 mid + 1로 설정.
- 만약 array[mid]가 target보다 크면, high를 mid - 1로 설정.
- 2번으로 돌아가 반복.
- 이분 탐색 구현 기본 예제 코드 / 시간 복잡도 O(log n)
def binary_search(array, target):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2
if array[mid] == target:
return mid
elif array[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1 # 타겟을 찾지 못한 경우
# 예제 사용
array = [1, 3, 5, 7, 9, 11, 13, 15]
target = 7
result = binary_search(array, target)
if result != -1:
print(f"타겟은 인덱스 {result}에 위치.")
else:
print("타겟을 찾을 수 없음.")
bisect 모듈
- 이진 탐색과 정렬된 배열에 관련된 함수들을 제공
- 특정 값이 배열에서 어느 위치에 삽입되어야 하는지를 효과적으로 찾을 수 있음.
- 자주 사용하는 함수로는 bisect_left, bisect_right, insort_left, insort_right 등
- 주로 정렬된 순서를 유지하면서 배열에 값을 삽입하거나 해당 값의 위치를 찾는 데 사용.
from bisect import bisect_left, bisect_right, insort_left, insort_right
# 정렬된 배열
arr = [1, 2, 4, 4, 4, 6, 8]
# bisect_left: 특정 값이 삽입되어야 하는 왼쪽 인덱스 반환
index_left = bisect_left(arr, 4)
print(f"bisect_left: {index_left}")
# bisect_right: 특정 값이 삽입되어야 하는 오른쪽 인덱스 반환
index_right = bisect_right(arr, 4)
print(f"bisect_right: {index_right}")
# insort_left: 정렬된 순서를 유지하면서 특정 값 삽입
insort_left(arr, 5)
print(f"insort_left: {arr}")
# insort_right: 정렬된 순서를 유지하면서 특정 값 삽입
insort_right(arr, 4)
print(f"insort_right: {arr}")
728x90
반응형
'Practice > Algorithm' 카테고리의 다른 글
Algorithm, Python, C++ 피보나치 수열 (동적 계획법) (0) | 2024.02.01 |
---|---|
Algorithm, Python 탐색 알고리즘 세 가지 (완전 탐색/DFS/BFS) (2) | 2024.01.30 |
Algorithm, Python n 이하의 모든 소수를 찾는 코드 (에라토스테네스의 체 알고리즘) (3) | 2024.01.10 |