Skip to content

이분탐색 & 파라메트릭 서치 #3

@psychehose

Description

@psychehose

바이너리 서치

이분 탐색(Binary Search)은 정렬된 배열에서 특정 값을 찾는 효율적인 알고리즘
시간 복잡도는 O(log n)으로, 선형 검색보다 훨씬 빠름

이분 탐색의 기본 원리는 다음과 같습니다:

  1. 배열의 중간 원소를 선택
  2. 중간 원소와 찾고자 하는 값을 비교
  3. 찾고자 하는 값이 중간 원소보다 작으면 왼쪽 부분 배열을 탐색하고, 크면 오른쪽 부분 배열을 탐색
  4. 찾고자 하는 값을 찾을 때까지 또는 더 이상 탐색할 수 없을 때까지 이 과정을 반복
#include <iostream>
#include <vector>

int binarySearch(const std::vector<int>& arr, int target) {
    int left = 0;
    int right = arr.size() - 1;

    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (arr[mid] == target) {
            return mid;  // 타겟을 찾았을 때 인덱스 반환
        } else if (arr[mid] < target) {
            left = mid + 1;  // 오른쪽 부분 배열 탐색
        } else {
            right = mid - 1;  // 왼쪽 부분 배열 탐색
        }
    }

    return -1;  // 타겟을 찾지 못했을 때
}

파라메트릭 서치

파라메트릭 서치(Parametric Search)는 최적화 문제를 해결하는 알고리즘 기법
주로 이분 탐색(Binary Search)을 응용하여 연속적인 값에 대한 결정 문제를 해결하는 데 사용.

파라메트릭 서치의 주요 특징

  1. 최적화 문제를 결정 문제로 변환: "최댓값을 찾아라" 같은 최적화 문제를 "이 값이 가능한가?" 같은 결정 문제로 전환
  2. 이분 탐색 활용: 가능한 해의 범위를 이분 탐색으로 좁혀가며 최적해를 찾습니다.
  3. 연속적인 값에 적용: 정수뿐만 아니라 실수 값에 대해서도 사용할 수 있습니다.
  4. 효율성: O(log N) 시간 복잡도로 최적해를 찾을 수 있습니다.

파라메트릭 서치의 일반적인 절차

  1. 문제의 답이 될 수 있는 범위를 정합니다.
  2. 그 범위의 중간값에 대해 결정 문제를 해결합니다.
  3. 결과에 따라 탐색 범위를 반으로 줄입니다.
  4. 원하는 정확도에 도달할 때까지 2-3 과정을 반복합니다.

파라메트릭 서치는 다양한 최적화 문제에 적용할 수 있습니다. 예를 들어, 특정 조건을 만족하는 최대 또는 최소값을 찾는 문제, 이진 탐색으로 해결할 수 있는 결정 문제 등에 활용됩니다.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions