[Algorithm] 이분탐색(Binary Search) vs 매개변수 탐색(Parametric Search)

728x90
반응형

# 요즘 스터디에서 이분탐색을 주제로 한 문제들을 풀다 내가 풀이 하고 있는 방식이

   '이분탐색'이 아니라는 것을 깨달았다. 아예 다른 것은 아니지만,

    엄밀히 따지자면 '매개변수 탐색'이라는 분류가 따로 존재했다.

 

# 이분탐색은 '정렬된 배열'에서 target의 존재여부와 존재한다면 위치를 알려주는 알고리즘이다.

   우리가 찾는 target이 배열 안에 존재한다면, 그 위치를 알려준다는 것이다.

   

# 하지만, 'target과 정확히 일치하는 값' 이 존재하지 않는다면??

    -> 우리는 parametric search를 통해 최적화된 값을 찾을 수 있다.

 

# Parametric Search최적화 문제를 결정 문제로 풀 수 있는 기술이다.

   '최적화 문제'니 '결정 문제'니 다 처음 들어보는 말이어서 어려울 수 있다.

   * 최적화 문제: 문제의 답이 하나가 아니라 여러 개이고, 그 중에서

                             어떤 기준에 따라 가장 '좋은' 답을 찾아내는 문제

   * 결정 문제: '예' 혹은 '아니오' 형태의 답만이 나오는 문제

                      ( ‘답 x가 존재하는가?’ 대신 ‘x 또는 그보다 좋은 답이 있는가?’ )

   * 최적화 문제의 답은 경우의 수가 무한한 데에 반해, 결정 문제는 두 가지 답만이 있을 수 있음

 

# 최적화 문제 결정 문제로 바꾸기 레시피
    1.  ‘가장 좋은 답은 무엇인가?’ 라는 최적화 문제를

                    ‘x 혹은 그보다 좋은 답이 있는가?' 라는 결정 문제 형태로 바꿈
    2.  결정 문제를 쉽게 풀 수 있는 방법이 있는지 찾아보기
    3.  결정 문제를 내부적으로 이용하는 이분탐색 알고리즘 작성

 

# 매개변수 탐색 예시

  *  https://www.acmicpc.net/problem/2110

 

2110번: 공유기 설치

첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가

www.acmicpc.net

 위 문제는 가장 인접한 두 공유기 사이의 최대 거리 출력하는 문제이다.

 단순히 이분 탐색으로 '구하고자 하는 값'을 찾는 것이 아닌 '최대 거리'를 찾음으로써 최적화된

 도출해 내는게 목표이다. 

 

# 이분탐색 예시

  * https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

 위 문제는 배열 A안에 x라는 정수가 존재하는지 판단하는 문제이다.

 단순히 이분탐색을 통해 '구하고자 하는 값'을 찾아내면 되는 문제이다.

 

 

# 결론적으로, Binary Search와 Parametric Search의 차이점

   Binary Search에서는 배열에서 X와 일치하는 값을 찾으면 바로 함수를 종료하고 위치를 반환하지만

   Parametric Search는 함수를 종료하지 않고 더 이상 살펴볼 배열이 남아있지 않을때까지 탐색을 계속한다.

    

 

   

728x90
반응형
TAGS.

Comments