Find k th smallest in n array
이번 Posting에서는 n의 크기를 갖는 배열에서 k 번째로 작은 값을 찾는 방법에 대하여 이야기를 진행할 것입니다. 물론 가장 간단한 방법은 sorting을 진행하고 k번째 인덱스에 접근하면 끝입니다. 그렇다면 가장 성능이 좋은 녀석은 무엇일까요? 일단 2가지 경우만 생각하도록 하겠습니다. 시간 복잡도가 nlogn이고, 공간 복잡도가 n인 in-place sorting만 생각을 하면 quick sort, heap sort로 한정이 되겠지요. 다시 이문제를 "selection" 문제라고 하자!! Selection 이 문제를 풀어내는 방법에는 여러가지가 있다, 물론 Sorting 보다 빠른 방법으로 해야 이 문제를 푸는 의미가 있을 것이다. Quick sort 토너먼트 Selection sort Approximate Median Quick Sort Quick sort를 K 근처에서 수행한다면 어떻게 될까? 최선의 경우 O(n)에 끝나지만, 최악의 경우O(n^2)이 걸리고 평균적으로는 O(n)이 된다. 토너먼트 토너먼트 방식을 사용하면 1등은 n, 2등은 n + logn, 3등은 n + 2logn, ..., k등은 n + klogn 이 걸리게 된다. Selection Sort selection sort를 k번째까지 수행한다면 kn 시간이 걸리고 만약에 k가 n/2이면 O(n^2)이 걸리게 된다. Approximate Median 정의는 rn등부터 (1-r)n등 사이의 원소. (단 0 < r < 1). - r = 0.3이라고 가정. 알고리즘은 다음과 같다. 배열을 5개로 분할하고, 각 분할의 중간 값을 찾아냅니다. 이 후 중간 값들 중 실제 중간 값을 찾습니다. 결론적으로 이 실제 중간 값은 반드시 rn등과 (...