이분 탐색 알고리즘은 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다.
시간 복잡도는 NlongN이다.
def binary_search(left, right, array, target):
while left <= right:
mid = (left + right) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
right = mid - 1
else:
left = mid + 1
이분 탐색 알고리즘이다.
보통 PS에서 이분 탐색을 적용하는 방법은 완전 탐색을 해야 하는 문제 O(N^2)를 NlogN으로 해결하는 과정에서 많이 쓰인다.
아래의 두 문제 예시를 보자
https://www.acmicpc.net/problem/1939
백준 중량 제한 문제에서도 완전 탐색의 풀이 즉 최대 중량을 1부터 최대 까지 하나씩 순회하며 가능한 중량을 찾는 완전 탐색 알고리즘에서 최대 중량을 이분 탐색으로 logN으로 시간 복잡도를 줄여 NlongN으로 문제를 해결한다.
또
https://www.acmicpc.net/problem/2110
백준의 공유기 설치문제 또한 공유기를 설치할 때 완전 탐색으로 최소 거리를 1부터 최대 거리까지 순회하며 완전 탐색으로 풀이하는 알고리즘 대신 1부터 최대 거리를 이분 탐색으로 logN으로 순회하며 NlogN으로 문제를 해결한다.
'Algorithm' 카테고리의 다른 글
[백준] 가장 긴 증가하는 부분 수열 2 12015번 (python) (0) | 2024.05.20 |
---|---|
[백준] 평범한 배낭 12865번 DP (python) (0) | 2024.04.28 |
[백준] 중량제한 1939번 (python) (0) | 2024.04.21 |
[백준] 보석 도둑 (python) (1) | 2024.04.20 |
[프로그래머스] 네트워크 (Java) (0) | 2024.04.12 |