๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ
๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
Selection Problem
Problem Definition
(์ ๋ ฌ๋์ง ์์) ๋ฐฐ์ด arr์์ i ๋ฒ์งธ๋ก ์์ ๊ฐ ์ฐพ๊ธฐ
Input : arr, i (0 <= i < n)
(์ฌ๊ธฐ์ i๋ 0๋ถํฐ ์์ํ๋ค๋ ์ ์ ์ผ๋ํ์)
Output : arr์์ i ๋ฒ์งธ๋ก ์์ ๊ฐ
์๊ฐํด๋ณผ ์ ์๋ Methods ๋ก๋
1. ์ต์๊ฐ ์ฐพ๊ธฐ๋ฅผ ๋ฐ๋ณต
=> ์ต์
์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋ Θ(i×n) = Θ(n^2)
(์ต์
์ ๊ฒฝ์ฐ i๊ฐ n-1 ์ด๋ฏ๋ก)
2. ์ ๋ ฌ ํ i ๋ฒ์งธ ๊ฐ ์ฐพ๊ธฐ
=> ์ ๋ ฌํ๋๋ฐ ํ์ํ ์๊ฐ Θ(n logn)
Heapsort ์ฌ์ฉ์ Θ(n + i logn)
(build-heap์ ํ๊ณ ๋ฝ๋๋ฐ logn ๊ฑธ๋ฆฌ๋๊ฒ i ๋ฒ ๋ฐ๋ณต๋๋ฏ๋ก)
๊ทธ๋ ๋ค๋ฉด Lower bound ๋?
๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ ์ต์ ํ ๋ฒ์ ์ดํด๋ด์ผ ํ๋ฏ๋ก Ω(n)๋ก ๋ณผ ์ ์์
=> i ๋ฒ์งธ๋ก ์์ ๊ฐ์ Θ(n)์ ์ฐพ์ ์ ์์๊น๋ฅผ ์๊ฐํด๋ด์ผํจ!
Linear Time Algorithm in Expectation
Quickselect
Quicksort์ Partition ํจ์๋ pivot์ ์ ์๋ฆฌ์ ๋์!
(์ด ๋ Partition ํจ์๋ ๋ฐฐ์ด arr์ ์์์ ๊ฐ์ n๋งํผ ๋๋ฉด์ ๋น๊ต๋ฅผ ํ๋ฏ๋ก Θ(n)๋ก ๋ณผ ์ ์์)
ํคํฌ์ธํธ๋ pivot์ ์์น i๊ฐ ์๋ฏธํ๋๊ฒ ๊ณง i ๋ฒ์งธ๋ก ์์ ๊ฐ์ด๋ผ๋ ๊ฒ์!
์ด๋ฅผ ํ ๋๋ก case๋ฅผ ๋๋ ๋ณด๋ฉด
Case 1 : i๊ฐ Pivot์ ์์น์ ๋์ผํ๋ค๋ฉด pivot์ ๊ทธ๋๋ก return
Case 2 : (i < Pivot์ ์์น) ๋ผ๋ฉด pivot์ ์ผ์ชฝ์์ ์ฌ๊ท ๋ฐ๋ณต
Case 3 : (i > Pivot์ ์์น) ๋ผ๋ฉด pivot์ ์ค๋ฅธ์ชฝ์์ ์ฌ๊ท ๋ฐ๋ณต
์ฒ์์ ์ค๋ฅธ์ชฝ ๋งจ ๋์ ์๋ 10์ pivot์ผ๋ก ์์น๋ฅผ ์ฐพ๊ณ
10์ ์์น๊ฐ i = 7 ์ด๋ฏ๋ก i = 3 ๋ฒ์งธ๋ก ์์ ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ์ผ์ชฝ์์ ์ฌ๊ท์ ์ผ๋ก ์คํ
(Case 2)
๊ทธ ๋ค์ pivot์ธ 3์ ์์น๋ฅผ ์ฐพ๊ณ
3์ ์์น๊ฐ i = 2 ์ด๋ฏ๋ก i = 3 ๋ฒ์งธ๋ก ์์ ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ์ค๋ฅธ์ชฝ์์ ์ฌ๊ท์ ์ผ๋ก ์คํ
(Case 3)
๊ทธ ๋ค์ pivot์ธ 9์ ์์น๋ฅผ ์ฐพ๊ณ
9์ ์์น๊ฐ i = 6 ์ด๋ฏ๋ก i = 3 ๋ฒ์งธ๋ก ์์ ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ์ผ์ชฝ์์ ์ฌ๊ท์ ์ผ๋ก ์คํ
(Case 2)
๊ทธ ๋ค์ pivot์ธ 6์ ์์น๋ฅผ ์ฐพ๊ณ
6์ ์์น๊ฐ i = 3 ์ด๋ฏ๋ก i = 3 ๋ฒ์งธ๋ก ์์ ๊ฐ์ด 6์ธ๊ฑธ ์๊ฒ๋ฌ๊ณ ์ด๋ฅผ return
(Case 1)
Complexity Analysis of Quickselect
์ต์ ์ ๊ฒฝ์ฐ Θ(n)
=> pivot์ด ๋ฑ i ๋ฒ์งธ๋ก ์์ ๊ฐ์ธ ๊ฒฝ์ฐ
(partition ํจ์๊ฐ Θ(n) ์ด๋ฏ๋ก ํ ๋ฒ๋ง์ ์ฑ๊ณต)
์ต์ ์ ๊ฒฝ์ฐ Θ(n^2)
=> pivot์ด i์ ์ ๋ฐ๋์ ์๋ ๊ฒฝ์ฐ
i = 0 ์ธ๋ฐ pivot์ด ํญ์ ๊ฐ์ฅ ํฐ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ n + (n - 1) + (n - 2) + ... = Θ(n^2)
ํ๊ท ์๊ฐ ๋ณต์ก๋ Θ(n)
pivot์ด k๋ฒ์งธ๋ก ์์ ๊ฐ์ด๋ผ๋ฉด
T(n) <= max(T(k), T(n - k - 1)) + c0n
=> ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ํ๊ฐํ๊ธฐ ์ํด max๋ฅผ ์ด์ฉํด ๋ ๊ฐ์ง ๋ถ๋ถ ์ค ๋ ํฐ ๋ณต์ก๋๋ฅผ ์ฌ์ฉ
(๊ทธ๋์ T(n)์ด ์ต์
์ ๊ฒฝ์ฐ๋ณด๋ค๋ ์๊ฑฐ๋ ๊ฐ๋ค๊ณ ๋ด)
์ด ๋ c0n ์ partition ํ๋ ๊ณผ์ ์ ์ค๋ฒํค๋๋ก ๋ณด๋ฉด ๋จ
(๋จ์ํ ๋ฐฐ์ด์ ์ํํ๋ ์๊ฐ ์ธ์, ํผ๋ฒ์ ์ ํํ๊ณ , ์์๋ฅผ ๋น๊ตํ๊ณ , ์ ์ ํ ์์น๋ก ์ด๋์ํค๋ ๋ฐ ๋๋ ์๊ฐ๊น์ง ํฌํจ)
pivot์ ์์น k๊ฐ 0 ~ n-1 ์ฌ์ด์ ๊ณ ๋ฅด๊ฒ ๋ถํฌํ๋ค ๊ฐ์
ํ๊ท ์ ๊ตฌํ๊ธฐ ์ํด k = 0 ๋ถํฐ n - 1๊น์ง (๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒ์)๋ฅผ n์ผ๋ก ๋๋ด์
T(k)์ T(n-k-1) ์ k = 0 ~ (n - 1) ๊น์ง์ ๊ฒฝ์ฐ๋ก ์๊ฐํด๋ณด๋ฉด
๋์นญ์ฑ์ ๊ฐ์ง๊ณ ์๋ค๋๊ฑธ ์ ์ ์์
T(0) ๊ณผ T(n - 1) , T(1) ๊ณผ T(n - 2) , T(2) ๊ณผ T(n - 3) , ... , T(n - 3) ๊ณผ T(2) , T(n - 2) ๊ณผ T(1) , T(n - 1) ๊ณผ T(0)
์ด๋ฅผ ์ ๋ฐ์ผ๋ก ๋๋๋ฉด k = 0 ~ (n / 2) - 1 ๊ณผ k = n / 2 ~ n - 1
์ด ์๋ฏธ๋ k = 0 ~ (n - 1) ๊น์ง์ ํฉ์ k = n / 2 ~ n - 1 ๊น์ง์ ํฉ์ 2๋ฅผ ๊ณฑํ๋ฉด ๋จ (๋์นญ์ฑ)
ํ์ง๋ง n / 2๋ n์ด ์ง์์ผ ๊ฒฝ์ฐ๋ ์ ํํ ์ ๋ฐ์ด์ง๋ง ํ์์ธ ๊ฒฝ์ฐ๋ k = n/2 ~ n - 1 ์ชฝ์ด ์์ชฝ์ ๋นํด ๋ ํฐ ๊ฒ์ ๋ณผ ์ ์์
์ฆ, k = ⌊n / 2⌋ ~ n - 1 ๊น์ง์ ํฉ์ 2๋ฅผ ๊ณฑํ๊ฑด k = 0 ~ n - 1 ๊น์ง์ ํฉ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์
๊ทธ๋์ ๊ฒฐ๊ตญ
์ด๋ฐ ์์ด ๋์ค๊ฒ ๋๋ ๊ฑฐ์
์ต์ ์ ๊ฒฝ์ฐ์์ Ω(n) ์์ ์์๊ธฐ ๋๋ฌธ์, ํ๊ท ์ ์ธ ๊ฒฝ์ฐ์ ๋ํด์๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(n) ์์ ๋ณด์ด๋ฉด Θ(n)๋ฅผ ๋ง์กฑํ๊ฒ ๋จ
=> ⌊n/2⌋ ≤ k < n ์ธ k์ ๋ํด T(k) ≤ c2k๋ฅผ ๋ง์กฑํ๋ค ๊ฐ์ ํ๊ณ ๊ท๋ฉ ์ฆ๋ช
์ ํ๋ฉด ๋จ!
Linear Time Algorithm in the Worst Case
Observation on Partitioning
Partition ํจ์๊ฐ ์ ๋ ฅ์ ํญ์ 1 : 9์ ๋น์จ๋ก ๋๋๋ฉฐ, i๊ฐ ํญ์ 9 ๋ถ๋ถ์ ์ํ๋ค๋ฉด ๋ณต์ก๋๋?
T(n) = T ( 9/10 n ) + c0n
์ผ๋ก ๋ณผ ์ ์์
์ด๋ Master Theorem์ case 3์ ์ํด Θ(n)
(1 : 99์ ๋น์จ๋ก ๋๋๋ ๊ฒฝ์ฐ๋ ๋์ผ)
https://hanjungyo.tistory.com/80#Master%20Method%20(Master%20theorem%20%EC%9D%B4%EC%9A%A9)-1
L02 - Recurrences
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค Complexity of Recursive Functions Algorithm1 ์ ํฉํ ๋ฆฌ์ผ์ ์ฌ๊ท์ ์ผ
hanjungyo.tistory.com
=> Master Theorem ๊ด๋ จ ๋ด์ฉ
์ฌ๊ธฐ์ ์ ์ ์๋ ์ ์
๋น์จ์ด ์ข ๊ธฐ์ธ์ด์ ธ ์์ด๋ ์ ๋ ฅ์ ํน์ ๋น์จ๋ก ๋๋๋ฉด Θ(n) ์ ์ ์งํ๋ค
(๋จ, ๋๋๋ overhead๊ฐ O(n)์ด์ฌ์ผ ํจ!)
Median of Medians
Partitionํ ๋ ์ ๋ ฅ์ ์์ (5๊ฐ์ฉ) ๊ทธ๋ฃน์ผ๋ก ๋๋์ด ๊ฐ ๊ทธ๋ฃน๋ง๋ค ์ค์๊ฐ์ ๊ตฌํ๊ณ , ๋ชจ๋ ์ค์๊ฐ๋ค์ ์ค์๊ฐ์ Pivot์ผ๋ก ์ฌ์ฉ!
Partitionํ ๋ 5๊ฐ์ฉ ๋ฌถ์ด์ ๊ทธ๋ฃน์ผ๋ก ๋๋์๊ณ (๊ฐ์๊ฐ ๋ถ์กฑํ ๋ถ๋ถ์ 2๊ฐ๋ง)
๊ทธ (ํด๋น ๊ทธ๋ฃน์ ์ํ 5๊ฐ์ ์) ์ค์์ ์ค์๊ฐ๋ค์ ์ฐพ์
๊ทธ ํ ๋, ๊ทธ (๊ฐ ๊ทธ๋ฃน๋ค์ ์ค์๊ฐ) ์ค์๊ฐ์ Pivot์ผ๋ก ์ฌ์ฉํจ
(์ค์๊ฐ๋ค์ ์ค์๊ฐ)
์ด๋ ๊ฒ ํ๋ฉด Pivot์ด ๋ฐ๋์ 30% ~ 70% ์์น์ ์์์ ๋ณด์ฅ
1. Pivot์ ์ฐพ๋๋ฐ Θ(n) ๋งํผ ์๊ฐ์ด ๊ฑธ๋ฆผ
2. ํน์ ๋น์จ๋ก ๋๋ ์ง (์๋ฌด๋ฆฌ ํฐ ๋ถ๋ถ์ด๋๋ผ๋ ๊ฒฐ๊ตญ 70% 30%๋ก ์ชผ๊ฐ์ง)
=> Worst Case์์๋ ํน์ ๋น์จ๋ก ๋๋ ์ง๋ฏ๋ก Θ(n) ์
์ฒ์ ๋ถ๋ถ์์๋ 5๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ผ๋ฉด ํฐ ๊ฐ๋ค์ ๋ค๋ก ๋ณด๋ด์ Median of Medians ๋ฅผ ์ฐพ์ ๋ ์ ์ธ์ํด
(๋ฐฐ์ด์ MOM ์ ์ฉ ๋ฒ์๋ฅผ 5์ ๋ฐฐ์๋ก ๋ง๋ค์ด์ค)
=> ์ด ๋ ๊ทธ๋ฅ ์ ์ธ์ํค๋๊ฒ ์๋๋ผ ์ฐพ์ผ๋ ค๋ i๋ฒ์งธ ๊ฐ์ด ์ผ์นํ๋ฉด ํด๋น ๊ฐ์ ๋ฐ๋ก return
๊ทธ ํ ๋จ์์๋ ๋ฐ์ดํฐ๋ค์ 5๊ฐ์ฉ ๋ฌถ์ด n/5 ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋๊ณ
๊ฐ ๊ทธ๋ฃน๋ง๋ค ์ค์๊ฐ์ ๊ตฌํ ํ ๊ทธ๊ฒ๋ค์ ์ค์๊ฐ์ ์ฌ๊ท์ ์ผ๋ก ๊ตฌํจ
์ด ๋ ๊ตฌํ ์ค์๊ฐ์ ์ค์๊ฐ์ pivot์ผ๋ก ์ ์ (๋ฐฐ์ด์ ๊ฐ์ฅ ๋ค์ ๋๊ณ quickselect ์คํ)
Worst Case Secnario
์ ์ด ๋ฐฉ์์ 30% ~ 70% ์์น์ Pivot์ด ์์์ ๋ณด์ฅํ ๊น?
MoM์ ์ฐพ์ผ๋ฉด ์ฃผํฉ์ ๋ฐ์ค๊ฐ ์๋ ์ค (๊ฐ ๊ทธ๋ฃน๋ค์ ์ค์๊ฐ) ์์ 15๋ณด๋ค ์ผ์ชฝ์ ์๋ 3๊ฐ์ ๊ฐ (์ค์๊ฐ๋ค) ์ 15๋ณด๋ค ์์๊ฒ์ด๊ณ ์ค๋ฅธ์ชฝ์ ์๋ 3๊ฐ์ ๊ฐ (์ค์๊ฐ๋ค) ์ 15๋ณด๋ค ํด ๊ฒ์
=> ์ด๋ M์ด ์ค์๊ฐ๋ค ์ค์์ ์ค์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํจ
๊ทธ๋ฆฌ๊ณ ํ๋์ ์ ์ ์ผ๋ก ํ์๋ ๋ถ๋ถ์ 15๋ณด๋ค ํฌ๊ณ ๋นจ๊ฐ์ ์ ์ ์ผ๋ก ํ์๋ ๋ถ๋ถ์ 15๋ณด๋ค ์์ ์ ๋ฐ์ ์์
=> ๊ฐ ๊ทธ๋ฃน์ ์ค์๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ์์ ๊ฐ๋ค์ผํ ๋๊น
์ผ์ชฝ์ ํ์ ์ ์ ๋ถ๋ถ์ ๊ฐ ๊ทธ๋ฃน์์ ์ค์๊ฐ๋ณด๋ค ํดํ ์ง๋ง ๊ทธ ์ค์๊ฐ์ด 15๋ณด๋ค๋ ์์ ์ค์๊ฐ์ผํ ๋ ํฌ๋ค ์๋ค๋ฅผ ํ๋ณํ ์ ์์
์ค๋ฅธ์ชฝ์ ํ์ ์ ์ ๋ถ๋ถ์ ๊ฐ ๊ทธ๋ฃน์์ ์ค์๊ฐ๋ณด๋ค ์์ํ ์ง๋ง ๊ทธ ์ค์๊ฐ์ด 15๋ณด๋ค๋ ํฐ ์ค์๊ฐ์ผํ ๋ ํฌ๋ค ์๋ค๋ฅผ ํ๋ณํ ์ ์์
๊ทธ๋ ๋ค๋ฉด ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๋ฉด
Median(์ ๊ทธ๋ฆผ์์๋ M) ๋ณด๋ค ํฐ์ง ์์์ง ๋ชฐ๋๋ ํ์ ์ ์ ๋ถ๋ถ์ด ์ ๋ถ M๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณผ ์ ์์
์ ์ฒด ๋ฐ์ดํฐ ์๋ฅผ n์ด๋ผ๊ณ ํ๊ณ ๊ทธ๋ฃน์ ์ n / 5 ๋ g๋ผ๊ณ ํ๋ฉด
๋นจ๊ฐ์ ์ ์ ๋ถ๋ถ๊ณผ ํ๋์ ์ ์ ๋ถ๋ถ์ ํฌ๊ธฐ๋ฅผ ์ ์ํด๋ณผ ์ ์๋๋ฐ
๋นจ๊ฐ์ ๋ถ๋ถ์ (3/2) * g ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฏ๋ก
ํ๋์ ๋ถ๋ถ์ ์ ์ฒด 5 * g ์์ (3/2) * g ๋ฅผ ๋บ (7/2) * g ๋ณด๋ค๋ ์๊ฑฐ๋ ๊ฐ์
g๋ฅผ n์ผ๋ก ๋ฐ๊พธ๋ฉด ํ๋์ ๋ถ๋ถ (Worst case์์ M๋ณด๋ค ํฐ ๋ถ๋ถ) ์ (7 / 10) * n ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์
=> 70% : 30% ๊ฐ ๋ณด์ฅ๋จ
Complexity Analysis
์ ์ฝ๋์์ ์ดํด๋ณด๋ฉด momselect๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ ๋ถ๋ถ์ด 2๊ตฐ๋ฐ ์๋๋ฐ
์ด๋ก์ ๊ธ์จ์ 3๋ฒ์์ momselect๋ฅผ ํธ์ถํ๋๊ฑด
์ ์ฒด ๋ฐ์ดํฐ n์ค์์ 5๋ก ๋๋ ์ ๋ค ๋งํผ๋ง ์ฐพ๊ณ ์์ผ๋ฏ๋ก T(n/5) ์ด ๋๊ณ
(์ค์๊ฐ์ ์ค์๊ฐ์ ์ฐพ๋๊ฑฐ๋๊น)
๋ฐ์ quickselect ํ๋ ๋ถ๋ถ์์ momselect๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋๊ฑด
์ต์ ์ ๊ฒฝ์ฐ์๋ pivot์ด ํญ์ (7 / 10) * n ๋ณด๋ค๋ ์๊ฑฐ๋ ๊ฐ์ ์์น์ ์๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก T((7 / 10) * n) ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์
์ฆ, ์ต์ ์ ๊ฒฝ์ฐ์ ์๊ฐ ๋ณต์ก๋๋ O(n)์
'๐ฅ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
L10 - Disjoint Sets (0) | 2024.11.22 |
---|---|
L09 - Greedy Algorithms (1) | 2024.11.03 |
L06 - Non-comparison Sorting (2) | 2024.10.08 |
L05 - Heapsort (2) | 2024.10.06 |
L04 - Merge Sort & Quicksort (2) | 2024.09.27 |