추가 설명 — quickselect는 왜 평균 O(n)인가

선택 문제 본문은 quickselect를 소개하면서 “대부분 O(n)O(n)“이라는 말로 평균을 넘어갔다. 최선·최악은 간단히 보였지만, 평균이 정말 O(n)O(n)인지는 기댓값 점화식을 세우고 직접 풀어야 확인할 수 있다. 이 글이 그 빈칸을 채운다.


한쪽만 재귀한다는 차이

quick sort 평균 분석부터 떠올려 보자. pivot의 등수를 kk라 하면, quick sort는 왼쪽 k1k-1개와 오른쪽 nkn-k양쪽 모두를 재귀해야 한다. 그래서 점화식에 E(k1)+E(nk)E(k-1) + E(n-k)가 더해진다. 두 비용을 합산하기 때문에 결국 Θ(nlogn)\Theta(n \log n)이 나온다.

quickselect는 다르다. 분할 후 kk번째 원소가 어느 쪽에 있는지 pivot 등수와 비교해 알 수 있으므로, 관계없는 쪽은 버리고 한쪽만 재귀한다. 그 비용은 E(k1)E(k-1) 또는 E(nk)E(n-k) 둘 중 하나다.

최악의 경우를 상계로 잡으면, 어느 쪽으로 재귀하더라도 비용은 max ⁣(E(k1),E(nk))\max\!\bigl(E(k-1),\,E(n-k)\bigr) 이하다. 이것이 quick sort 점화식과 quickselect 점화식의 결정적 차이다.


기댓값 점화식

pivot의 등수 kk11부터 nn까지 각각 확률 1n\frac{1}{n}로 나온다고 가정한다. 분할 자체는 배열을 한 번 훑으므로 nn이다. 재귀 비용의 상계를 max\max 항으로 잡으면 점화식이 선다.

E(n)n+1ni=1nmax ⁣(E(i1),E(ni))E(n) \le n + \frac{1}{n}\sum_{i=1}^{n}\max\!\bigl(E(i-1),\,E(n-i)\bigr)

이것이 풀어야 할 점화식이다.

여기서 max\max를 먼저 정리하지 않는 이유

max ⁣(E(i1),E(ni))\max\!\bigl(E(i-1),\,E(n-i)\bigr)E ⁣(max(i1,ni))E\!\bigl(\max(i-1,\,n-i)\bigr)로 바꾸고 싶어진다. 크기가 큰 쪽이 비용도 크다는 것이 당연해 보이기 때문이다. 하지만 그 치환은 EE가 증가함수라는 사실을 쓰는 것이고, 우리는 아직 그것을 증명하지 않았다. 지금 증명하려는 대상이 EE 자신이므로 순환에 빠지기도 쉽다.

대신 max\max귀납 단계로 미룬다. 거기서는 E(i1)E(i-1)E(ni)E(n-i)를 먼저 각각 4(i1)4(i-1), 4(ni)4(n-i)로 바꾼 뒤 max\max를 취하게 되고, max(4a,4b)=4max(a,b)\max(4a,\,4b) = 4\max(a,\,b)는 아무 성질도 필요로 하지 않는다. 미루기만 해도 단조성 가정이 사라진다.


상계 풀이 — E(n)4nE(n) \le 4n

수학적 귀납법으로 E(n)4nE(n) \le 4n을 보인다.

기저 사례. E(0)=0E(0) = 0이고, n=1n = 1이면 비교 없이 바로 반환하므로 E(1)=04E(1) = 0 \le 4. 둘 다 성립한다.

귀납 가정. j<nj < n인 모든 jj에 대해 E(j)4jE(j) \le 4j라고 가정한다.

귀납 단계. 합 안의 각 항에 가정을 먼저 적용한다. i1i-1nin-i는 둘 다 nn보다 작으므로 가정을 쓸 수 있다.

max ⁣(E(i1),E(ni))    max ⁣(4(i1),4(ni))  =  4max(i1,ni)\max\!\bigl(E(i-1),\,E(n-i)\bigr) \;\le\; \max\!\bigl(4(i-1),\,4(n-i)\bigr) \;=\; 4\max(i-1,\,n-i)

이제 max\maxEE 밖으로 나왔다. 점화식에 넣으면

E(n)n+4ni=1nmax(i1,ni)E(n) \le n + \frac{4}{n}\sum_{i=1}^{n}\max(i-1,\,n-i)

이고, 남은 일은 정수 합 i=1nmax(i1,ni)\sum_{i=1}^{n}\max(i-1,\,n-i)의 상한뿐이다.

합을 정확히 세기

ii11부터 nn까지 돌 때 max(i1,ni)\max(i-1,\,n-i)가 어떤 값들을 훑는지 n=6n = 6n=7n = 7로 보자.

ii1234567
n=6n = 654334524
n=7n = 7654345633

짝수 nn에서는 모든 값이 정확히 두 번씩 나온다. 홀수 nn에서는 가운데 값 하나가 한 번만 나온다 (n=7n=733). “각 항이 두 번씩”이라고 뭉뚱그리면 홀수에서 틀리므로, 두 경우를 나눠 센다. n=2mn = 2mn=2m+1n = 2m+1로 두면

i=1nmax(i1,ni)={2j=m2m1j=3m2m,n=2m2j=m+12mj+m=3m2+2m,n=2m+1\sum_{i=1}^{n}\max(i-1,\,n-i) = \begin{cases} 2\displaystyle\sum_{j=m}^{2m-1} j = 3m^2 - m, & n = 2m \\[1.2em] 2\displaystyle\sum_{j=m+1}^{2m} j + m = 3m^2 + 2m, & n = 2m+1 \end{cases}

이다. 두 값 모두 3n24\dfrac{3n^2}{4} 이하다. 짝수에서는 3m2m3m2=3n243m^2 - m \le 3m^2 = \frac{3n^2}{4}이고, 홀수에서는 3n24=3m2+3m+34\frac{3n^2}{4} = 3m^2 + 3m + \frac{3}{4}이므로 3m2+2m3m^2 + 2m보다 m+34m + \frac{3}{4}만큼 크다.

i=1nmax(i1,ni)    3n24\sum_{i=1}^{n}\max(i-1,\,n-i) \;\le\; \frac{3n^2}{4}

마무리

이를 대입하면

E(n)n+4n3n24=n+3n=4nE(n) \le n + \frac{4}{n} \cdot \frac{3n^2}{4} = n + 3n = 4n

귀납 가정이 nn에서도 성립한다. 따라서 모든 nn에 대해 E(n)4n=O(n)E(n) \le 4n = O(n)이다.

EE의 단조성은 어디에도 쓰이지 않았고, 홀수 nn의 중앙항도 정확히 한 번으로 세었다.


핵심 정리

quickselect의 평균 시간은 E(n)4n=O(n)E(n) \le 4n = O(n)이다.

quick sort가 Θ(nlogn)\Theta(n \log n)인 이유는 양쪽 재귀의 비용 E(k1)+E(nk)E(k-1) + E(n-k)를 합산하기 때문이다. 합산된 비용들을 텔레스코핑하면 조화수 HnlnnH_n \approx \ln n이 나타나 nlognn \log n 항이 생긴다.

quickselect는 한쪽만 재귀하므로 비용이 max ⁣(E(k1),E(nk))\max\!\bigl(E(k-1),\,E(n-k)\bigr)로 묶인다. 귀납 단계에서 각 항을 4j4j로 바꾼 뒤 max\max를 밖으로 빼면 i=1nmax(i1,ni)3n24\sum_{i=1}^{n}\max(i-1,\,n-i) \le \frac{3n^2}{4}가 핵심 상한이 되고, 덕분에 전체 기댓값이 O(n)O(n)에 머문다. 이 순서 덕분에 EE의 단조성을 가정하지 않아도 된다.

단, 이것은 평균 분석이다. 최악은 여전히 O(n2)O(n^2)이다. 최악까지 없애려면 pivot을 항상 approximate median으로 고르는 median of medians가 필요하다.

이어지는 글

이 글의 바탕이 되는 quickselect와 median of medians는 선택 문제에서 다룬다. quick sort의 평균이 Θ(nlogn)\Theta(n \log n)으로 유도되는 과정은 quick sort 평균 분석에서 텔레스코핑으로 엄밀히 보인다.

© 2026 XsQuare01. Powered by GitHub Pages. · 방문자