Divide and Conquer
๋ถํ (Divide)
ํด๊ฒฐํ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
์ ๋ณต (Conquer)
๋๋ ์์ ๋ฌธ์ ๋ฅผ ๊ฐ๊ฐ ํด๊ฒฐํ๋ค
ํตํฉ (Combine)
(ํ์ํ๋ค๋ฉด) ํด๊ฒฐ๋ ๋ต์ ๋ชจ์๋ค
Top-down Approach (ํํฅ์ ์ ๊ทผ๋ฒ)
: ๋ถํ ์ ๋ณต์ ํํฅ์ ์ ๊ทผ๋ฒ์ด๋ค
๊ฑฐ๋ญ์ ๊ณฑ
๋ฐ๋ณต (Iterative) ์๊ณ ๋ฆฌ์ฆ:
O(n)
C์ ๊ฑฐ๋ญ์ ๊ณฑ = 1์ ๊ฑฐ๋ญ์ ๊ณฑํ ๊ฐ๋งํผ C๋ฅผ ๊ณฑํ๋ ๋ฐฉ์์ผ๋ก ์ฐ์ฐ ์ํ
๋ถํ ์ ๋ณต ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ: `O(logn)
๊ฑฐ๋ญ์ ๊ณฑ์ ๋ฐ ์ฉ ๋๋์ด์ ๊ณฑํด ๋๊ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ด
์ง์๊ฐ 1์ด ๋๋ฉด ๋ฐ ์๋ฅผ ๊ทธ๋๋ก ๋ฐํ
์๊ฐ ๋ณต์ก๋๋ฅผ
O(log n)
์ผ๋ก ์ค์ผ ์ ์์!
๋ณํฉ ์ ๋ ฌ (Merge Sort)
์ฌ๋ฌ ๊ฐ์ ์ ๋ ฌ๋ ์๋ฃ์ ์งํฉ์ ๋ณํฉํ์ฌ ํ ๊ฐ์ ์ ๋ ฌ๋ ์งํฉ์ผ๋ก ๋ง๋๋ ๋ฐฉ์
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ํ์ฉ
์๋ฃ๋ฅผ ์ต์ ๋จ์์ ๋ฌธ์ ๊น์ง ๋๋ ํ์ ์ฐจ๋ก๋ก ์ ๋ ฌํ์ฌ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ป์ด๋
top-down ๋ฐฉ์
์๊ฐ ๋ณต์ก๋
O(nlogn)
ex)
ํต ์ ๋ ฌ (Quick Sort)
์ฃผ์ด์ง ๋ฐฐ์ด์ ๋ ๊ฐ๋ก ๋ถํ ํ๊ณ , ๊ฐ๊ฐ์ ์ ๋ ฌํ๋ค
๋ณํฉ ์ ๋ ฌ๊ณผ ๋ค๋ฅธ ์
๋ณํฉ ์ ๋ ฌ์ ๊ทธ๋ฅ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ ๋ฐ๋ฉด์, ํต ์ ๋ ฌ์ ๋ถํ ํ ๋, ๊ธฐ์ค ์์ดํ (pivot item) ์ค์ฌ์ผ๋ก, ์ด๋ณด๋ค ์์ ๊ฒ์ ์ผํธ, ํฐ ๊ฒ์ ์ค๋ฅธํธ์ ์์น์ํจ๋ค
๊ฐ ๋ถ๋ถ ์ ๋ ฌ์ด ๋๋ ํ, ๋ณํฉ์ ๋ ฌ์ "๋ณํฉ"์ด๋ ํ์ฒ๋ฆฌ ์์ ์ด ํ์ํ๋, ํต ์ ๋ ฌ์ ํ์๋ก ํ์ง ์๋๋ค.
์๊ฐ ๋ณต์ก๋
nlogn
Hoare-Partition ์๊ณ ๋ฆฌ์ฆ
์์ด๋์ด
P(pivot) ๊ฐ๋ค ๋ณด๋ค ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ, ์์ ๊ฐ๋ค์ ์ผ์ชฝ ์งํฉ์ ์์นํ๋๋ก ํ๋ค
Pivot์ ๋ ์งํฉ์ ๊ฐ์ด๋ฐ์ ์์น์ํจ๋ค
ํผ๋ด ์ ํ
์ผ์ชฝ ๋ / ์ค๋ฅธ์ชฝ ๋ / ์์์ ์ธ ๊ฐ ๊ฐ ์ค์ ์ค๊ฐ ๊ฐ
ex)
์ด์ง ๊ฒ์ (Binary Search)
์๋ฃ์ ๊ฐ์ด๋ฐ์ ์๋ ํญ๋ชฉ์ key ๊ฐ๊ณผ ๋น๊ตํ์ฌ ๋ค์ ๊ฒ์์ ์์น๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ฒ์์ ๊ณ์ ์งํํ๋ ๋ฐฉ๋ฒ
๋ชฉ์ ํค๋ฅผ ์ฐพ์ ๋๊น์ง ์ด์ง ๊ฒ์์ ์ํ์ ์ผ๋ก ๋ฐ๋ณต ์ํํจ์ผ๋ก์จ ๊ฒ์ ๋ฒ์๋ฅผ ๋ฐ์ผ๋ก ์ค์ฌ๊ฐ๋ฉด์ ๋ณด๋ค ๋น ๋ฅด๊ฒ ๊ฒ์์ ์ํํจ
์ด์ง ๊ฒ์์ ํ๊ธฐ ์ํด์๋ ์๋ฃ๊ฐ ์ ๋ ฌ๋ ์ํ์ฌ์ผ ํ๋ค.
๊ฒ์ ๊ณผ์
์๋ฃ์ ์ค์์ ์๋ ์์๋ฅผ ๊ณ ๋ฅธ๋ค
์ค์ ์์์ ๊ฐ๊ณผ ์ฐพ๊ณ ์ ํ๋ ๋ชฉํ ๊ฐ์ ๋น๊ต
๋ชฉํ ๊ฐ์ด ์ค์ ์์์ ๊ฐ๋ณด๋ค
์์ผ๋ฉด ์๋ฃ์ ์ผ์ชฝ ๋ฐ์ ๋ํด์ ์๋ก ๊ฒ์์ ์ํ
ํฌ๋ค๋ฉด ์๋ฃ์ ์ค๋ฅธ์ชฝ ๋ฐ์ ๋ํด์ ์๋ก ๊ฒ์์ ์ํ
์ฐพ๊ณ ์ ํ๋ ๊ฐ์ ์ฐพ์ ๋๊น์ง 1~3 ๋ฐ๋ณต
Last updated