공대생 정리노트
최악의 경우에도 선형 시간을 보장하는 선택 알고리즘 본문
분할의 균형이 맞지 않게 분할이 된 상태에서 찾고자 하는 원소가 큰 그룹에 들어가는 일이 반복되면 성능이 선형을 넘어서게 된다.
반면 일정한 상수비를 지켜서 계속 분할이 된다면 복잡도는 항상 O(n)이 된다.
즉, 99:1로 분할이 계속 되어도 최악의 경우에도 O(n)을 만족한다는 것이다.
T(n) = T(99n/100) + O(n)
최악의 경우 선형 시간 선택 알고리즘
알고리즘의 대략적인 방법은 다음과 같다.
0. 전체 원소가 5개 이하이면 원하는 원소를 찾고 알고리즘을 끝낸다.
1. 전체 원소를 5개씩의 원소를 가진 그룹들로 나눈다.(이때 꼭 5개일 필요는 없다)
2. 각 그룹에서 중앙값을 찾는다. -> 상수시간 * O(n/5) = O(n)
3. 중앙값들의 중앙값을 구한다. 이때 구하는 방법은 이 알고리즘을 자가 호출하여 구한다. 짝수이면 두 중앙값 중 임의로 선택한다. -> T(ceil(n/5))
4. 이렇게 구한 M을 기준원소로 삼아 전체 원소를 분할한다.(M보다 작은 원소는 왼쪽에, 큰 원소는 오른쪽에)
5. 분할된 그룹 중 적절한 그룹을 선택하여 재귀적으로 반복한다. -> 최악의 경우에도 T(7n/10 + 2)
5번에 대해서 좀 더 설명을 하자면 아주 최악의 경우에도 M이상인 원소들의 개수는 3n/10 - 2개이다.(그림에서 M과 초록색으로 칠한 부분들)
이때의 분할 비율은 7n/10+2 : 3n/10 -2이므로 대강 7:3과 비슷하다.
따라서 알고리즘의 점화식은 다음과 같다.
T(n) ≤ T(ceil(n/5)) + T(7n/10+2) + O(n)
≤T(n/5+1) + T(7n/10+2) + O(n)
이때 T(k) ≤ ck라 가정하고 귀납법을 하면
T(n)≤ cn을 유도할 수 있다.
출처 : 서울대학교 컴퓨터공학부 문병로 교수님 알고리즘 수업
'CS 공부 > 알고리즘' 카테고리의 다른 글
최소 신장 트리 - 프림 알고리즘 (0) | 2020.05.10 |
---|---|
평균 선형 시간 선택 알고리즘 (0) | 2020.05.07 |