본문 바로가기
알고리즘

[탐색] Parametric Search

by 까망 하르방 2021. 3. 4.
반응형

Parametric Search

최적화 문제를 결정 문제로 바꿔 푸는 것 O(logN)

 

예시

[BOJ] 2110 공유기 설치 

 

[BOJ] 백준 2110 공유기 설치

출처:  https://www.acmicpc.net/problem/2110  Input 5 3 1 2 8 4 9  Output 3 공유기 3개를 설치 시, {1, 4, 8} or {1, 4, 9}에 설치하면 가장 인접한 두 공유기 사이의 거리 = 3 1 → N까지, 공유기를 설..

zoosso.tistory.com

에 총 N개의 집이 있으며, 한 집에 한 개의 공유기를 설치가능.
공유기 C개를 설치할 때, 가장 인접한 두 공유기(집) 사이의 거리를 최대로 하기.
두 집사이의 거리(간격)을 기준(mid)으로 공유기 개수 C를 만족하는지 확인
▶ 원하는 조건을 만족하는 가장 알맞는 값을 특정한 오차범위 이내에서 알고 싶은 경우
   (범위는 문제조건 마다 다릅니다.)
 

구현

- Lower Bound: (최소값을 구하는 경우) 최소값이 x라면, x이상의 값에 대해서는 모두 조건을 만족
int solve() {
    int start = MIN, end = MAX, mid, sol = 0;
    while (start <= end) {
        mid = (start + end) / 2;
        if (isPossible(mid)) {
            sol = mid; end = mid - 1;
        }
        else {
            start = mid + 1;
        }
    }
    return sol;
}

 

- Upper Bound: (최대값을 구하는 경우) 최대값이 x라면, x이하의 값에 대해서는 모두 조건을 만족
int solve() {
    int start = MIN, end = MAX, mid, sol = 0;

    while (start <= end) {
        mid = (start + end) / 2;
        if (isPossible(mid)) {
            sol = mid; start = mid + 1;
        }
        else end = mid - 1;
    }
    return sol;
}
※ Lower/Upper Bound를 결정하였다면 isPossible() 함수를 구현하는 것 중요합니다.
   ▷ Binary Search + YES / NO Problem
 

Binary Search vs Parametric Search

Binary Search: 배열에서 중앙값(middle)이 가리키는 값이 내가 찾는 값인지 중요
Parametric Search: 원하는 조건을 만족하는 가장 알맞는 값을 찾는 것
 

Reference

 

반응형

댓글