1. 파라매트릭 서치 알고리즘
•
파라매트릭 서치 알고리즘은 이분 탐색을 이용하여 답을 구하는 알고리즘이다.
◦
최대값, 최소값을 구하는 문제를 결정 문제로 바꾸어 푸는 알고리즘이다.
•
문제에서 파라매트릭 서치 알고리즘을 사용할 수 있는 경우
◦
결정 문제로 바꾸었을 때, O/X의 형태가 연속적으로 나타나야 한다.
2. 파라매트릭 서치 구현
•
방법1
def parametric_search(arr):
ret = -1
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == True:
left = mid + 1
ret = mid
else:
right = mid - 1
return ret
arr = [True, True, True, True, True, True, True, True, False, False, False, False]
print(parametric_search(arr))
Python
복사
•
방법2
def parametric_search(arr):
cur = -1
step = len(arr)
while step != 0:
while (cur + step < len(arr) and arr[cur + step] == True):
cur += step
step //= 2
return cur
arr = [True, True, True, True, True, True, True, True, False, False, False, False]
print(parametric_search(arr))
Python
복사
3. 파라매트릭 서치 문제 예제
4. 실제 문제에서 파라매트릭 서치 알고리즘
•
파라매트릭 서치의 특징
◦
파라매트릭 서치는 문제에서 배열이 주어지는 것이 아닌, 상황 자체를 일종의 정렬된 배열처럼 보는 것이다.
◦
따라서, 파라매트릭 서치는 보통 최대값 또는 최소값을 구하는 문제에서 많이 쓰인다.
•
자주 쓰이는 파라매트릭 서치 유형
◦
k인 경우에 답이 가능한가? - 최소값, 최대값을 구하는 문제
▪
[False, False, False, False, True, True, True]
▪
[True, True, True, True, False, False, False]
◦
k 이하인 경우에 답이 가능한가? - 최소값을 구하는 문제
▪
[False, False, False, False, True, True, True]
◦
k 이상인 경우에 답이 가능한가? - 최대값을 구하는 문제
▪
[True, True, True, True, False, False, False]
•
k 일 때의 개수 - 인덱스(몇 번째 인지)를 구하는 문제
◦
[3, 5, 5, 7, 7, 8, 9, 10, 10, 11, 13, 14, 15, 19, 19]