์ต๋ ์ต์ ์ฐพ๊ธฐ
์ ํ ๋ฌธ์
์ฃผ์ด์ง ๋ฆฌ์คํธ์ ์ต๋, ์ต์ ๊ฐ์ ์ฐพ๊ฑฐ๋ n๋ฒ์งธ ํฐ ๊ฐ, n๋ฒ์งธ ์์ ๊ฐ์ ์ฐพ๋ ๊ณผ์ ๋ ํ๋ก๊ทธ๋จ์์ ๋ง์ด ๋ฑ์ฅํ๋ค. ์ด๋ ๊ฒ n๊ฐ์ ์ซ์๋ค ์ค k๋ฒ์งธ๋ก ์์(๋๋ ํฐ) ๊ฐ์ ์ฐพ๋ ๋ฌธ์ ๋ฅผ 'Selection problem' ์ฆ, ์ ํ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
์ต๋ ์ต์ ์ฐพ๊ธฐ
์ ํ ๋ฌธ์ ์์ ๊ฐ์ฅ ์ฌ์ด ๋ฌธ์ ๊ฐ ์ต๋ / ์ต์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์ฃผ์ด์ง ๋ฆฌ์คํธ์ ์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด์๋ ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ ๊น?
์ ๋ ฌ
๋จผ์ , ์ด์ ์ ๋ฐฐ์ ๋ ์ ๋ ฌ์ ์ด์ฉํ ์ ์๋ค. ์ ๋ ฌ ํ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์ต๋๊ฐ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ค๊ฐ ์์๋ค์ ์ ๋ ฌ์ ์ต๋๊ฐ์ ์ฐพ๋๋ฐ์ ๋ถํ์ํ ๊ณผ์ ์ด๋ค. ๋ฐ๋ผ์ ์ ๋ ฌ์ ์ด์ฉํ๋ฉด ์ ๋ ฌ์ ์ต์ ์๊ฐ๋ณต์ก๋์ธ O(nlgn)๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
min/max
๋๋ฒ์งธ๋ ์ ํ ์ ๋ ฌ์์ ๋ฐ๋ณต๋ฌธ ํ ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ฒ๋ผ, ์์๋ค์ 2๊ฐ์ฉ ๋ฌถ์ด ๋น๊ตํจ์ผ๋ก์จ ์ต๋๊ฐ์ ์ฐพ์ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด์ง๋ง ์ต๋ / ์ต์ ๊ฐ์ ๋์์ ์ฐพ์ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
int max = 0;
for(int i=0; i<length; i++){
if(arr[i]>max)
max = arr[i];
}
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต๋ / ์ต์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
์ ํ ์๊ณ ๋ฆฌ์ฆ
์ ํ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ ์ต์ ํ๋ ์ ํ ์๊ณ ๋ฆฌ์ฆ(Selection algorithm)์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด O(n)์ ์๊ฐ๋ณต์ก๋๋ก ์ต๋ / ์ต์ ๊ฐ์ ํ๋ฒ์ ํ์ธํ ์ ์๋ค. ์์ธํ ์ดํด๋ณด์.
๋จผ์ ์ฃผ์ด์ง ๋ฆฌ์คํธ์ ์์๋ฅผ 2๊ฐ์ฉ ๋ฌถ์ด์ ๋ฌถ์ ๋ณ ์ต๋ / ์ต์๋ฅผ ๊ตฌํ๋ค. ์ด ๊ณผ์ ์ n/2์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ฌถ์ ๋ณ ์ต๋ ๊ฐ๋ค ์ค ์ต๋๋ฅผ ๊ตฌํ๋ฉด ๋ฆฌ์คํธ์ ์ต๋๊ฐ์ ๊ตฌํ ์ ์๊ณ , ๋ฌถ์ ๋ณ ์ต์ ๊ฐ๋ค ์ค ์ต์๋ฅผ ๊ตฌํ๋ฉด ๋ฆฌ์คํธ์ ์ต์๊ฐ์ ๊ตฌํ ์ ์๋ค. ์ด ๊ณผ์ ์ n/2-1 ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ๋ฐ๋ผ์ ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ O(n)์ด๋ฉฐ ์ต๋/์ต์๊ฐ์ ๋์์ ๊ตฌํ ์ ์๋ค.
n๋ฒ์งธ ํฐ ๊ฐ ์ฐพ๊ธฐ
์ด์ ๊ฐ์ฅ ์ฌ์ด ์ ํ ๋ฌธ์ ์ธ '์ต๋ ์ต์ ๋ฌธ์ '๋ฅผ ๋ฒ์ด๋ n๋ฒ์งธ ํฐ ๊ฐ์ ์ฐพ์๋ณด์. n์ด ๋ช์ด๋์ ๋ฐ๋ผ์ ์ต์ ์ ๋ฐฉ๋ฒ์ ๋ฌ๋ผ์ง ์ ์๋ค. ์ฌ๊ธฐ์๋ 2๋ฒ์งธ ํฐ ๊ฐ์ ์ฐพ๋ ๊ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ฒ ๋ค.
์ต๋/์ต์ ๋ฌธ์ ์์์ ๊ฐ์ด ์ ๋ ฌ์ ์ด์ฉํ์ฌ index๋ก ์ ๊ทผํ์ฌ๋ ๋์ง๋ง ์ญ์๋ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฌธ์ ์ด๋ค.
์ต๋/์ต์๊ฐ์ ์ฐพ์ ํ๋์ฉ ์ ๊ฑฐํด๋๊ฐ๋ ๋ฐฉ๋ฒ๋ ์๊ฐ๋ณต์ก๋๊ฐ ํฌ๋ค. ์ฒ์ ์ต๋๊ฐ์ ์ฐพ์ ๋ n-1, ์ต๋๊ฐ์ ์ ์ธํ ํ ์ต๋๊ฐ์ ๋ค์ ์ฐพ์ ๋ n-2 ์ด๋ฏ๋ก ์ด 2n-3์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ ๋ค.
ํ ๋๋จผํธ ํธ๋ฆฌ
์ด๋ฒ์๋ ํ ๋๋จผํธ ํธ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์.
ํ ๋๋จผํธ ํธ๋ฆฌ๋ ์์ ๊ทธ๋ฆผ์ฒ๋ผ, ๋ฆฌํ๋ ธ๋๋ถํฐ ๋๊ฐ์ฉ ๋น๊ตํด์ ๋ ํฐ ์์๊ฐ ์๋ก ์ฌ๋ผ๊ฐ๋ ๊ตฌ์กฐ์ด๋ค.
์ด๋ ์์ ์ต๋/์ต์ ์ฐพ๊ธฐ์์ ์ดํด๋ณด์๋ ๋๊ฐ์ฉ ๋ฌถ๋ ๊ตฌ์กฐ์ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ค๋ฅด๋ค. ์์ ๊ทธ๋ฆผ์ ๋น๊ตํด๋ณด๋ฉด ์ฐจ์ด์ ์ ์ ์ ์๋ค.
ํ ๋๋จผํธ ํธ๋ฆฌ๋ ๊ฐ ๋ฌถ์์ ์ต๋๊ฐ๋ค์ ๋ค์๊ธ ๋ฌถ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. ํ๋ฒ์ ๋น๊ต๋ง๋ค ํ ๋ช ์ winner์ ํ ๋ช ์ loser๊ฐ ๋์ค๊ฒ ๋๋๋ฐ, ์ด๋ฅผ ์ด์ฉํ๋ฉด n๋ฒ์งธ ํฐ ๊ฐ์ ์ฐพ์ ์ ์๋ค.
2๋ฒ์งธ๋ก ํฐ ๊ฐ์ ์ฐพ๊ธฐ๋ก ํ์ผ๋, ๊ทธ ํ๋ณด๋ฅผ ์ดํด๋ณด์. ์ผ๋จ 3์ ๊ฐ์ฅ ํฐ ๊ฐ์ด๋ฏ๋ก ์๋๊ณ 3๊ณผ ๋๊ฒฐ ์ ์ก๋ ๊ฐ๋ค ์ค์ ํ๋๊ฐ 2๋ฒ์งธ๋ก ํฐ ๊ฐ์ผ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์์ ํธ๋ฆฌ์์ 1,4,7์ด ํ๋ณด๊ฐ ๋๋ค. 2๋ฒ์งธ๋ก ํฐ ๊ฐ์ ์ด ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ด๋ฏ๋ก min/max ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ์๋ด๋ฉด ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ต๋๊ฐ์ ์ฐพ๋๋ฐ์ n-1, ํ๋ณด๋ค ์ค ์ต๋ ๊ฐ์ ์ฐพ๋๋ฐ lgn-1 ์ด ๋๋ฏ๋ก ์ด n+lgn-2 ์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ ๋ค. ๋ฐ๋ผ์ ์์ 2n-3 ๋ณด๋ค ๋ฎ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ๋ณด๋ค์ด lgn๊ฐ์ธ ๊ฒ์ 3์ด lgn๋ฒ์ ๋๊ฒฐ์์ ์ด๊ฒผ์์ ์๋ฏธํ๋ค.
์ด๋ฒ์๋ 2๋ฒ์งธ๋ก ํฐ ๊ฐ์ผ๋ก ์๋ฅผ ๋ค์์ง๋ง, ๊ฐ๊ฐ์ n์ ๋ํด์ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฝ๊ฒ ๋ ํฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ๋ ค๋ค์ง ๋ง๊ณ , key์ ๊ฐฏ์๊ฐ ์ ํด์ ธ์์ ๋๋ ๋ณธ์ธ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด๋ณด๋ ๊ฒ์ด ์ข๋ค.
O(n) ์ ํ ์๊ณ ๋ฆฌ์ฆ
๋งค๋ฒ n๋ฒ์งธ ๊ฐ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ฆฌ๊ฐ ์ง๋ฉด ๋๊ฒ ์ง๋ง(^ใ ^..) ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ฏธ ๋์์๋ค. ๊ณผ์ ์ ์ดํด๋ณด์.
- ๋ฆฌ์คํธ์ ์์ ๊ฐฏ์๊ฐ 5์ดํ๋ผ๋ฉด ๊ธฐ๋ณธ ๋น๊ต๋ก ๋์ฒดํ๋ค.
- ๋ฆฌ์คํธ๋ฅผ 5๊ฐ์ฉ ๋ฌถ์์ผ๋ก ๋๋ ํ, ๊ฐ ๋ฌถ์์ ์ค๊ฐ ๊ฐ(median)์ ์ฐพ๋๋ค.
๊ธฐ๋ณธ ๋น๊ต๋ก ์ค๊ฐ ๊ฐ์ ์ฐพ์ผ๋ฉฐ, ์ด๋ฅผ median(M)์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ๊ฐ์ด๋ฐ์ ๋ฐฐ์นํ๋ค. ์์๋ M๋ณด๋ค ํฐ ๊ฐ, ์๋์๋ M๋ณด๋ค ์์ ๊ฐ์ 2๊ฐ์ฉ ๋ฐฐ์นํ๋ค. ๋ชจ๋ set์ ๋ํด ์์ ๊ณผ์ ์ ๋ง์น๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ด ๋๋ค.
- ์ค๊ฐ ๊ฐ์ ์ค๊ฐ ๊ฐ (median๋ค์ median)์ ์ฐพ๋๋ค.
์ด๋ ์ ์ฒด set์ median์ ์๋๋ฏ๋ก ๋ฐ๋ก ๋ต์ด ๋ ์๋ ์๋ค. median์ ์ฐพ์ ๋๋ ์ฌ๊ท ๋ฐฉ์์ผ๋ก ํ์ฌ ์งํ ์ค์ธ ๊ณผ์ ์ ์ฌํธ์ถํ๋ฉด ๋๋ค. median์ median(m*)์ ์ฐพ์ ํ์ ์ผ์ชฝ์๋ ์ด๋ณด๋ค ์์ median์ set๋ค์ด ์ค๋ฅธ์ชฝ์๋ ์ด๋ณด๋ค ํฐ median์ set๋ค์ด ์์นํ๊ฒ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ด ๋๋ค.
A, B, C, D 4๊ทธ๋ฃน์ผ๋ก ๊ฐ ์์๋ฅผ ๋๋ ์ ์๊ณ , ๊ฐ๊ฐ์ ๊ทธ๋ฃน์ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
- A, D : m*๊ณผ ๋น๊ตํด์ ๋์๊ด๊ณ๋ฅผ ์ ์ ์๋ค.
- B : m*๊ณผ ๋น๊ตํด์ ํฐ ๊ฐ๋ค์ ๋ชจ์์ด๋ค.
- C : m*๊ณผ ๋น๊ตํด์ ์์ ๊ฐ๋ค์ ๋ชจ์์ด๋ค.
S1, S2์ด๋ผ๋ ์๋ก์ด ๊ทธ๋ฃน์ ์ ์ํด๋ณด์.
- S1 : C์ (A+D)์์ m*๋ณด๋ค ์์ ์๋ค
- S2 : B์ (A+D)์์ m*๋ณด๋ค ํฐ ์๋ค
S1, S2๋ A, D์ ์์๋ค์ ๋ชจ๋ m*๊ณผ ๋น๊ตํจ์ผ๋ก์จ ์์ฑํ ์ ์๋ค.
- k๋ฒ์งธ ์์์ ์์น๋ฅผ ํ์ธํ๋ค.
k๊ฐ S1์ ํฌ๊ธฐ๋ณด๋ค ์์ผ๋ฉด ์ฌ๊ท์ ์ผ๋ก S1์ ๋ํ ์ ํ ์๊ณ ๋ฆฌ์ฆ ์ํํ๋ฉด ๋๊ณ , S1์ ํฌ๊ธฐ๋ณด๋ค ํฌ๋ฉด ์ฌ๊ท์ ์ผ๋ก S2์ ๋ํ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ฉด ๋๋ค. ๋ฑ k๋ผ๋ฉด m*๊ฐ k๋ฒ์งธ key์ด๋ค.
if(S1.size()+1==k)
answer = mStar;
else if(S1.size()>k)
Selection(S1);
else if(S1.size()<k)
Selection(S2);
์๊ฐ ๋ณต์ก๋
- ๋ฆฌ์คํธ๋ฅผ 5๊ฐ์ฉ ๋ฌถ์์ผ๋ก ๋๋ ํ, ๊ฐ ๋ฌถ์์ ์ค๊ฐ ๊ฐ(median)์ ์ฐพ๋๋ค.
๊ธฐ๋ณธ ๋น๊ต๋ 6๋ฒ์ ๋น๊ต๋ฅผ ํ์๋ก ํ๋ฏ๋ก, set์ ๊ฐฏ์(n/5
)์ 6์ ๊ณฑํ 6(n/5)
์ด 2๋ฒ ๊ณผ์ ์ ์๊ฐ๋ณต์ก๋์ด๋ค.
-
์ค๊ฐ ๊ฐ์ ์ค๊ฐ ๊ฐ (median๋ค์ median)์ ์ฐพ๋๋ค.
Selection ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ์ ์๊ฐ๋ณต์ก๋๋ฅผ W(n)์ด๋ผ ํ๋ฉด, ์ฌ๊ท์ ์ผ๋ก median์ ์งํฉ๋ง์ ๋ฃ๋ ๊ฒ์ด๋ฏ๋ก m*์ ์ฐพ๋ ๊ณผ์ ์ ์๊ฐ ๋ณต์ก๋๋
W(n/5)
์ด๋ค.S1, S2๋ฅผ ์์ฑํ๊ธฐ ์ํด A+D์ ์งํฉ๊ณผ m*๋ฅผ ๋น๊ตํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
A+D ์งํฉ์ ํฌ๊ธฐ๋ ์์ ๊ทธ๋ฆผ์์ 4r์ด๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ 4r
์ด๋ค. n์ 5(2r+1)์ด๋ค.
- k๋ฒ์งธ ์์์ ์์น๋ฅผ ํ์ธํ๋ค.
์ต์
์ ๊ฒฝ์ฐ๋ A+D๊ฐ S1, S2 ์ค ํ ์ชฝ์ ์ํ๋ ๊ฒฝ์ฐ์ด๋ค. ์ด ๋ ์งํฉ์ ํฌ๊ธฐ๋ 7r+2๊ฐ ๋๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ W(7r+2)
์ด๋ค.
๋ชจ๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ํฉ์น๋ฉด
$$
W(n) = \frac{6n}{5}+W(\frac{n}{5})+4r+W(7r+2)
$$
์ด๋ค. r์ n์ ๋ง์ถฐ ํํํ๋ฉด
$$
W(n) = 1.2n + W(0.2n) + 0.4n + W(0.7n) = 1.6n + W(0.2n)+W(0.7n)
$$
์ด๊ณ ์ฌ๊ท์ ์ผ๋ก ๋ํ๋ธ ํ ์์ํญ๋ง ๋ณด๋ฉด
1.6n => 1.6(.9)n => 1.6(.81)n ...
0.9์ฉ ๋์ด๊ฐ๋ฏ๋ก ๋ค ๋ํ๋ฉด 16n๋ณด๋ค ์๋ค.
๋ฐ๋ผ์ O(n) Selection Algorithm์ ์๊ฐ๋ณต์ก๋๋ O(n)์ด๋ค.
ํ์ฌ๊น์ง ๋์จ ๊ฐ์ฅ ์ข์ ์๊ณ ๋ฆฌ์ฆ์ 2.95n๊น์ง ์ค์๋ค๊ณ ํ๋ค.
๊ธฐ๋ณธ ๋น๊ต
๊ธฐ๋ณธ ๋น๊ต๋ x1, x2, x3, x4, x5๊ฐ ์์ ๋, (x1, x2) => (x3, x4) => (x1, x3) => (x2, x5) => (x2, x3) => (x3, x5) ์ ๊ฐ์ 6๋ฒ์ ๋น๊ต๋ก ์ค๊ฐ ๊ฐ์ ์ฐพ์๋ผ ์ ์๋ ๋น๊ต ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
Comment