unagi11
이국의 보조기억장치
unagi11
전체 방문자
오늘
어제
  • 전체 글 (35)
    • Technology (28)
      • Algorithm Theory (10)
      • Problem Solving (14)
      • Unreal (1)
      • Unity (1)
      • Cocos2d (0)
      • etc (2)
    • Develop (5)
      • Dungeon-Chess (0)
      • Past Projects (3)
      • etc (2)
    • Daily (2)

블로그 메뉴

  • 깃허브
  • 프로필

인기 글

최근 글

hELLO · Designed By 정상우.
unagi11
Technology/Algorithm Theory

[Algorithm] Parametric Searching

Technology/Algorithm Theory

[Algorithm] Parametric Searching

2022. 6. 13. 09:11

개요

매개변수 탐색은 정해진 범위 내에서 어떤 조건 P(x)를 만족하는 x의 최대 혹은 최소값을 구하는 알고리즘이다.
탐색범위내에서 임의로 x를 선택하여 해당 x가 문제의 조건을 만족시키는 값인지 검증하고 최적의 값을 찾는 방향으로 범위를 좁혀나가는 방법이다.
탐색방법으로 이분탐색을 사용하는데, 이분탐색 과정에서 선택된 x가
- 조건 P(x)를 만족한다면 : x보다 최적인 범위를 다음 탐색 범위로 설정한다.
- 조건 P(x)를 만족하지 않는다면 : x보다 좋지않은 범위를 다음 탐색 범위로 설정한다.

Parametrix Searching Code

// 조건을 만족하는 최소값을 구하는 경우
// min : 매개변수 범위의 최소값
// max : 매개변수 범위의 최대값
int Minimum_Parametric_Searching(int min, int max)
{
    // min과 max가 같아지는 시점에 종료된다.
    while (min < max)
    {
        int pivot = (min + max) / 2; // .5 내림으로 교착상태를 막는다.

        if (P(pivot) == true) // 조건을 만족한다면,
            max = pivot;      // pivot을 포함하면서 pivot보다 작은 값을 찾을수 있는 범위로 좁혀나간다.        
        else                  // 조건을 만족하지 않는다면,
            min = pivot + 1;  // pivot을 제외하면서 pivot보다 큰 값을 찾을수 있는 범위로 좁혀나간다.
    }

    return min;
}

// 조건을 만족하는 최대값을 구하는 경우
// min : 매개변수 범위의 최소값
// max : 매개변수 범위의 최대값
int Maximum_Parametric_Searching(int min, int max)
{
    // min과 max가 같아지는 시점에 종료된다.
    while (min < max)
    {
        int pivot = (min + max + 1) / 2; // .5 올림으로 교착상태를 막는다.

        if (P(pivot) == true) // 조건을 만족한다면,
            min = pivot;      // pivot을 포함하면서 pivot보다 큰 값을 찾을수 있는 범위로 좁혀나간다.        
        else                  // 조건을 만족하지 않는다면,
            max = pivot - 1;  // pivot을 제외하면서 pivot보다 작은 값을 찾을수 있는 범위로 좁혀나간다.
    }

    return max;
}

Complexity

P(x)를 결정하는 알고리즘 D(x)가 있다면
Time(D(x))∗log(max−min) 시간으로 구할 수 있다.

여담

이분탐색이라 그런지 실제 문제에서는 범위가 이상할정도로 크게 설정된다. 예를들어 범위가 몇억.. 이러면 매개변수 탐색방법을 생각해볼만 하다.

 

3079번: 입국심사

첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109)

www.acmicpc.net

 
저작자표시 변경금지
    'Technology/Algorithm Theory' 카테고리의 다른 글
    • [Algorithm] Bellman-Ford Algorithm
    • [Algorithm] Dijkstra's Algorithm
    • [Algorithm] Prim's Algorithm
    • [Algorithm] Kruskal's Algorithm
    unagi11
    unagi11
    개발하고 기록하자

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.