๐ค๋ถํ ์ ๋ณต
๋ถํ ์ ๋ณต์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ๋ถํ ํ ๋ค ๋ถํ ๋ ๋ฌธ์ ๋ค์ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐํ์ฌ ํด๋น ๋ต์ ์ ์ ํ๊ฒ ์กฐํฉํ์ฌ ํฐ ๋ฌธ์ ์ ๋ต์ ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋งํฉ๋๋ค.
์ด๋ ๋ถํ ๋ ๋ฌธ์ ๋ค์ ์กฐํฉํ์ฌ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ Conquer์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฒ ์๊ฐ์๋ Good Pivot์ ์ฐพ๊ธฐ ์ํ Selection ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๋ฐฐ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Good Pivot์ ์ฐพ๋ ๊ฒ์ MOM(Median Of Medians)๋ฅผ ์ฐพ๋ ๊ฒ์ ํ์์ ์ธ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๊ผญ ์ ๋๋ก ์์งํด์ผํฉ๋๋ค.
๐ Selection - Quick Select
๐ค Problem
ํฌ๊ธฐ๊ฐ $n$์ธ ๋ฐฐ์ด A๊ฐ ์ฃผ์ด์ก์ ๋, A์์ $k$๋ฒ์งธ๋ก ์์ ์์๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.
ํน๋ณํ $k$๊ฐ $n/2$ ($n$์ด even ์ธ ๊ฒฝ์ฐ) ํน์ $(n+1)/2$ ($n$์ด odd์ธ ๊ฒฝ์ฐ) ์ผ ๋, $k$๋ฒ์งธ ์์ ์์๋ฅผ A์ median (์ค์๊ฐ) ์ด๋ผ๊ณ ํฉ๋๋ค.
์๋์ ๋ฐฐ์ด์์ $k = 1$์ด๋ผ๋ฉด ๊ฐ์ฅ ์์ ์์๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก 1์ ๋ฐํํฉ๋๋ค.
ํ๋ ๋ ์์๋ณด์๋ฉด $k = 9$๋ผ๋ฉด 9๋ฒ์งธ๋ก ์์ ์์๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก 10์ ๋ฐํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก Median ๊ฐ์ $k = 10/2 = 5$ ์ฆ, 5๋ฒ์งธ๋ก ์์ ์์์ธ 6์ ๋ฐํํด์ผ ํฉ๋๋ค.
๐ค Solution 1
$A$๋ฅผ ์ ๋ ฌํ์ฌ $k$๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์๋ฃ๊ตฌ์กฐ์์ ๋ฐฐ์ด worst case์ธ merge sort ๋๋ heap sort๋ฅผ ์ด์ฉํ์ฌ $k$๋ฅผ ์ฐพ์ผ๋ฉด $O(nlogn)$์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
๐ค Solution 2
Divide and Conquer ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด๋ฒ์ ํ์ตํ Quick Select๊ฐ Divide and Conquer ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
Worst Case
1), 2), 3)์ ์ฐจ๋ก๋ก ์คํํ๋ฉฐ $n'$์ด $n - 1$์ผ๋ worst case๋ก ์๋ํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก $O(n^2)$์๊ฐ์ ๋น๋กํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ ์์ผ๋ก ์๋ฌด ์ซ์๋ฅผ pivot์ผ๋ก ์ค์ ํฉ๋๋ค.
Average case(Expectation)
๋ ์ข์ pivot์ ํ๋ฅ ์ ์ผ๋ก ๊ณ์ฐํ์ฌ ๋ฝ์ ์ ์์ต๋๋ค.
ํด๋น ๋ฐฉ๋ฒ์ ํตํด ๋ฝ์์ง pivot์ "Good Pivot"์ด๋ผ๊ณ ํฉ๋๋ค.
๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
์ต์ข ์ ์ผ๋ก $O(n)$์ ์๊ฐ์ ๋น๋กํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๐ Selection - Quick Sort
๋ ๋์๊ฐ Quick Sort์ ์์ ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์์๋ ๋ค์ฃฝ๋ฐ์ฃฝ์ด์์ง๋ง ์ง๊ธ๊น์ง ๋ถํ ์ ๋ณต์ ๋ํด ์์๋ณด์์ต๋๋ค.
MOM(Median Of Medians)๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ Good Pivot์ ์ค์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋งค์ฐ ์ค์ํ๋ฏ๋ก ๊ผญ ์ ๋๋ก ์ดํดํ๊ณ ๋ค์ ํฌ์คํธ๋ก ๋์ด๊ฐ๊ธฐ๋ฅผ ์ถ์ฒํฉ๋๋ค.
'Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] Dynamic Programming(2) - LIS(Longest Increasing Subsequence) (0) | 2022.11.17 |
---|---|
[Algorithm] Dynamic Programming(1) - Warm Up (0) | 2022.11.15 |
[Algorithm] ๋ถํ ์ ๋ณต(3) - Matrix Multiplication (0) | 2022.10.20 |
[Algorithm] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ(3) - DFS(2), Biconnected Graph (0) | 2022.10.13 |
[Algorithm] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ(2) - DFS(๊น์ด์ฐ์ ํ์)(1) (0) | 2022.10.08 |