์ ๋ ฌ ๋ฌธ์ → ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ฉฐ, ๋ฐฉ๋ฒ๋ง๋ค ํน์ง์ด ๋ค๋ฆ
- → ์๊ฐ๋ณต์ก๋, ์ต์ ์ฑ์ ๋ํด ์ฆ๋ช ์ด ์ฌ์
- → n๊ฐ์ ์๋ก ๋ค๋ฅธ ์๊ฐ ์ฃผ์ด์ง ๋, ์ด๋ค์ ์ด๋ํ์ฌ ์ ์ ์ปค์ง๊ฒ(์ค๋ฆ์ฐจ์) ๋๋ ์ ์ ์์์ง๊ฒ(๋ด๋ฆผ์ฐจ์)์ผ๋ก ๋ง๋๋ ๋ฌธ์
๊ฐ์ : ์ ๋ ฌํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ O(1)์๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. (= ๋ฐ์ดํฐ๊ฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์๋ค.)
๋ฒ๋ธ ์ ๋ ฌ
๋งจ ์ผ์ชฝ ์์๋ถํฐ ๋ฐ๋ก ์ด์ํ ์์์ ๋น๊ตํด๊ฐ๋ฉด์, ํฐ ์๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋๋ก ๊ตํํจ.
๋งจ ๋๊น์ง ๊ฐ๋ฉด ๊ฐ์ฅ ํฐ ์์๋ฅผ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก, ์ด ๊ณผ์ ์ ๋ค์ ๋๋จธ์ง n-1๊ฐ ์์ ๋ํด์ ๋ฐ๋ณต
- ์ ํ์ฑ : ์๋ช ํจ
- ์๊ฐ ๋ณต์ก๋ : ์ฒ์ ๊ฐ์ฅ ํฐ ์์๋ฅผ ๊ตฌํ ๋ n-1๋ฒ ๋น๊ต, ๋ ๋ฒ์งธ ํฐ ์์๋ฅผ ๊ตฌํ ๋ n-2๋ฒ ๋น๊ต
- (n-1) + (n-2) + … + 1 = n(n-1)/2 = Θ(n^2)
- ์ ๋ ฅ ์์์ ๋ฌด๊ดํ๊ฒ n๊ฐ์ ๊ฐ์ ์ ๋ ฌํ ๋ ํญ์ ๋๊ฐ์ ํ์์ ๋น๊ต๋ฅผ ์ํํจ
์ฝ์ ์ ๋ ฌ
์ ๋ ฌ ๋์์ด ๋ ์์๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋๋
- ์์ “์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ” (์ค๋ฆ์ฐจ์ ๋ง์กฑ)
- ๋ค๋ “์ ๋ ฌํ ๋ถ๋ถ”
- ๋งค๋ฒ ์ ๋ ฌํ ๋ถ๋ถ์ ๊ฐ์ฅ ์ฒซ๋ฒ์จฐ ์์๋ฅผ ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ฝ์ (insertion)
- ์ฝ์ ์ ์ ๋ ฌ๋ ๋ถ๋ถ์ ๊ฐ์ฅ ํฐ ์์(๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์์)๋ถํฐ ์ผ์ชฝ์ผ๋ก ๋น๊ตํด๋๊ฐ๋ฉด์ ์งํ.
- ์ ํ์ฑ :
- ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ์ ํญ์ ์ ๋ ฌ๋์ด์์.
- ๋งค๋ฒ ์ ๋ ฌํ ๋ถ๋ถ์ ์์ 1๊ฐ๋ฅผ ์ ๋ ฌ๋ ๋ถ๋ถ์ผ๋ก ์ฎ๊ธด๋ค.
- ์ ๋ ฌํ ๋ถ๋ถ์ ์์๋ ์ฒ์์ n-1๊ฐ, ๋งค๋ฒ 1๊ฐ์ฉ ๊ฐ์ํ๋ฏ๋ก ์ต์ข ์ ์ผ๋ก๋ ์ ๋ ฌ๋ ๋ถ๋ถ n๊ฐ, ์ ๋ ฌํ ๋ถ๋ถ์ 0๊ฐ
- ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ ๋ ฌ์ด ๋์ด์์ผ๋ฏ๋ก ์ ํ
ex)
- ์๊ฐ ๋ณต์ก๋ :
- Best = ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋, ์ ๋ ฌ๋ ๋ถ๋ถ์ ์์๋ฅผ ๋ฃ์ ๋ ๋ง๋ค ๋น๊ต๋ฅผ ํ๋ฒ์ฉ๋ง ํ๋ฉด ๋จ
- ์ด n-1๋ฒ = Θ(n)
- Worst = ์ญ์์ผ๋ก ์ ๋ ฌ๋ ์๋ฅผ ์ ๋ ฌํ ๋
- i๋ฒ์งธ ์์น์ ์์๋ฅผ ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ถ๊ฐํ ๋, ์๋ถ๋ถ์ i-1๊ฐ ์์๋ค๊ณผ ๋ชจ๋ ๋น๊ตํด์ผํจ
- i = 2,3, … ,n ์ด๋ฏ๋ก, 1+2+ … + n-1 = n(n-1)/2 = Θ(n^2)
- Best = ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋, ์ ๋ ฌ๋ ๋ถ๋ถ์ ์์๋ฅผ ๋ฃ์ ๋ ๋ง๋ค ๋น๊ต๋ฅผ ํ๋ฒ์ฉ๋ง ํ๋ฉด ๋จ
- ํ๊ท ์๊ฐ๋ณต์ก๋ = i๊ฐ์ ์ ๋ ฌ๋ ๋ถ๋ถ์ i+1๋ฒ์งธ ์์๋ฅผ ์ฝ์
ํ ๋
- ์ฝ์ ํ : ์ ๋ ฌ๋ ๋ถ๋ถ i+1๊ฐ, ์๋ก ๋ค์ด์จ ์์๋ 1๋ฑ ~ i+1๋ฑ ์ค ํ๋.
- i+1๋ฑํ ํ๋ฅ = 1/(i+1), ๋น๊ต 1๋ฒ
- i๋ฑํ ํ๋ฅ = 1/(i+1), ๋น๊ต 2๋ฒ
- 3๋ฑ ํ๋ฅ = 1/(i+1), ๋น๊ต i-1๋ฒ
- 2๋ฑ ํ๋ฅ = 1/(i+1), ๋น๊ต i๋ฒ
- 1๋ฑ ํ๋ฅ = 1/(i+1), ๋น๊ต i๋ฒ (๋งจ์ ์์์ ๋น๊ต ํ 1๋ฑvs2๋ฑ ๊ฒฐ์ ํ๋ฏ๋ก)
O(n^2)๋ณด๋ค ๋น ๋ฅด๊ฒ ์ ๋ ฌํ ์ ์๋๊ฐ?
- ์ธ์ ํ ๋ ์์๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ O(n^2)๋ณด๋ค ๋นจ๋ฆฌ ์ ๋ ฌํ ์ ์๋ค. (O(n^2)๊ฐ ์ต์ ์ด๋ค!)
- ์ฆ๋ช
: n๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๋ ์์๋ฅผ ๋์ดํ๋ ๋ฐฉ๋ฒ์ n! ๊ฐ์ง์ด์ง๋ง, ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ ๋จ ํ๊ฐ์ง์ด๋ค.
- n๊ฐ์ ์์ ์ค 2๊ฐ๋ฅผ ๋ฝ๋ ๋ฐฉ๋ฒ์ (n,2)๊ฐ์ง
- ์ ๋ ฌ๋์ง ์์๋ค๋ฉด, ์์๊ฐ ํ๋ฆฐ ์์ด ์กด์ฌํ๋ค. ์ ๋ ฌ๋์๋ค๋ฉด, ์์๊ฐ ํ๋ฆฐ ์์ด ์๋ค.
- ์ธ์ ํ ๋ ์์๋ฅผ ๊ตํํ๋ฉด ํ๋ฆฐ ์ ์ค ์ค๋ก์ง ํ ์์ด ์ ๊ฑฐ๋๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ, ๋ชจ๋ ์์ ์์๊ฐ ์๋ชป๋์ด ์๋ค.
- ๋ฐ๋ผ์ (n,2) = O(n^2)๋ฒ์ ๊ตํ์ด ํ์ํ๋ค.
๋ถํ ์ ๋ณต ๊ธฐ๋ฒ (Divide and Conquer)
์ฐฉ์์ : ๋ฌธ์ ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ๋ ํ๊ธฐ ์ด๋ ต๋ค.
- Divide = ์๋ ๋ฌธ์ ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์ ์๋ ์์ ๋ฌธ์ ๋ก ๋๋๋ค.
- Delegate = ๊ฐ๊ฐ์ ์์ ๋ฌธ์ ๋ฅผ ํผ๋ค.
- Combine = ๊ฐ ๋ฌธ์ ์ ๋ต์ ์ด์ฉํ์ฌ ์๋ ๋ฌธ์ ์ ๋ต์ ๋ง๋ ๋ค.
์ ๋ ฌ ๋ฌธ์ ์ ๋ํ ๋ถํ ์ ๋ณต ๊ธฐ๋ฒ : ๋ณํฉ ์ ๋ ฌ (Merge sort) & ํต ์ ๋ ฌ (Quick sort)
๋ณํฉ ์ ๋ ฌ
- Divide = ์ ๋ ฌํ ๋ฆฌ์คํธ๋ฅผ ์์ชฝ ๋ฐ/๋ค์ชฝ ๋ฐ์ผ๋ก ๋๋๋ค.
- Delegate = ์์ชฝ ๋ฐ์ ์ ๋ ฌ
- Delegate(2) = ๋ค์ชฝ ๋ฐ์ ์ ๋ ฌ
- Combine = ๋์ ํฉ์ณ์ ํ๋์ ์ ๋ ฌ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
โข ์์ชฝ ๋ฐ, ๋ค์ชฝ ๋ฐ์ ๋ณํฉ ์ ๋ ฌ๋ก ์ฌ๊ท์ ์ผ๋ก ์ ๋ ฌํ๋ค.
โข ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ 1์ด๋ฉด ๊ทธ ์์ฒด๊ฐ ์ ๋ ฌ๋์ด ์๋ค. ๋๋, ์ด๋์ ๋ ๊ธธ์ด ์ดํ์ด๋ฉด ๋ค๋ฅธ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฌํ ์๋ ์๋ค.
โข ๋์ ํฉ์ณ์ ํ๋์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋?
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ ๋ฆฌ์คํธ A, B์ ๋ณํฉ → ๋งจ ์ฒ์ ์์๋ฅผ ๋น๊ตํ์ฌ ์์ ์ชฝ์ ์๋ก์ด ๋ฆฌ์คํธ์ ์ฝ์ .
→ ์ด ์ฝ์ ๋ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ์ฌ๊ท์ ์ผ๋ก ์งํ.
- ์ ํ์ฑ : A, B ์ค ํ๋๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ → ๋๋จธ์ง ํ๋๋ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก ๋ณํฉ ๊ฒฐ๊ณผ๋ ๊ทธ ์์ ์ด๋ค. ์ ๋ ฌ&์ ํ
- ๊ท๋ฉ ๋จ๊ณ - A, B ๋๋ค ๋น์ด์์ง ์๋ค๋ฉด? → ๋ฆฌ์คํธ์ ๋ค์ด๊ฐ๋ ์์๋ ๋ชจ๋ ์์ ์ค ์ต์๊ฐ.
- ์ฌ๊ท์ ์ผ๋ก ์งํ๋๋ ๊ณผ์ ์์, A, B ์ค ํ๋๋ ์๋๋ณด๋ค ์์๊ฐ ํ๋ ์ ๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ์งํ
- ์ ์ฒด ๋ฆฌ์คํธ์ ์์ชฝ ๋ฐ, ๋ค์ชฝ ๋ฐ์ ๋ณํฉ์ ๋ ฌ๋ก ์ ๋ ฌ
- ๋ณํฉ ์ ๋ ฌ์ ์ํด ์์ชฝ ๋ฐ, ๋ค์ชฝ ๋ฐ ๋ชจ๋ ์ ๋ ฌ ์๋ฃ
- ๋ ๋ฆฌ์คํธ๋ฅผ ๋ณํฉ
- ๋ ๋ฆฌ์คํธ ๋ณํฉ์ ์๊ฐ ๋ณต์ก๋ : Best = ๊ต์ฐจ๋๋ ๋ถ๋ถ์ด ์์ ๋ n/2
- ์ค์ ์ ๋ ฌ : ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ฐ์์ผ๋ก ๋ณํฉ, ์ต์ข ๋จ๊ณ์์๋ ์ ๋ ฌ ์๋ฃ ์ํ
- ์ ํ์ : T(n) = 2T(n/2) + n, T(n) = Θ(n log n)
- n/2๊ฐ์ ๋ฆฌ์คํธ 2๊ฐ๋ฅผ ์ ๋ ฌํ๊ณ , ํฉ์น ๋ n๋ฒ ๋น๊ตํจ.
- ์ ๋ ฅ ํํ์ ์๊ด์์ด ํญ์ ๊ฐ์ ์๊ฐ๋ณต์ก๋ ๋ณด์ฅ, ํญ์ ๋ฌธ์ ์ ํฌ๊ธฐ๊ฐ 1/2๋ก ์ค์ด๋ฌ
- ์ค์ ๋ก๋ ์์๋ค์ด ๋ ์์ฃผ ์์ง์ฌ์ ์๊ฐ์ด ๋ ๋ง์ด ๊ฑธ๋ฆผ.
- ํต ์ ๋ ฌ์ ๊ฒฝ์ฐ, ์ผ๋จ ์์๊ฐ ์ ํด์ง ์์๋ ์์ง์ด์ง ์๋๋ค!
- Worst = ์๋ก ๋ชจ๋ ๊ต์ฐจํ ๋ n
- ๊ณต๊ฐ ๋ณต์ก๋ : A, B๋ฅผ ๋ณต์ฌํ๋ ๊ฒฝ์ฐ 2n
- linked list๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ n (A, B์ ์๋ ๋ด์ฉ์ ํ๊ดด๋จ)
ํต ์ ๋ ฌ
ํน์ ์์๋ฅผ ์ค์ฌ์ผ๋ก ์์ ๊ฒ์ ์ผ์ชฝ, ํฐ ๊ฒ์ ์ค๋ฅธ์ชฝ์ผ๋ก & ์ฌ๊ท์ ์คํ
์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ์์์ ๋ฌด๊ดํ๊ฒ, ๊ธฐ์ค ์์์ ์์๋ ๊ฒฐ์ ๋๋ค.
ex)
- ์๊ฐ ๋ณต์ก๋ :
- Best = ๊ธฐ์ค์ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ๊ฐ์ ์์ ์์.
- T(n) = 2T(n/2) + n T(n) = **O(n log n)**
- Worst = ๊ธฐ์ค์ ์ผ์ชฝ/์ค๋ฅธ์ชฝ ์ค ํ์ชฝ์ผ๋ก๋ง ์์๊ฐ ์ ๋ฆผ
- T(n) = T(n-1) + n T(n) = **O(n^2)**
- ํ๊ท = ๋ณต์ก. ๋ค์๊ณผ ๊ฐ์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ์๋ T(n) = O(n log n)๊ธฐ์ค์ ์ฒซ ๋ฒ์งธ ์์๊ฐ ์๋๋ผ ๋๋ค์ผ๋ก ๊ณ ๋ฆ ?? ← ๊ฐ์ ๋ณด๊ธฐ
- ex) T(n) = T(99n/100) + T(n/100) + n
๐ก < ๊ต์๋ comment >
์์ ์๊ฐ์ Quicksort๋ stableํ๊ฒ ๊ตฌํํ ์ ์๋ค๊ณ ํ์์ต๋๋ค.
python์ผ๋ก ์์ ์ฝ๋๋ฅผ ์ง quicksort๋ stableํ์ง๋ง,
๊ทธ๋ฆผ์ผ๋ก ๋ณด์ฌ์ค ์๋ ์ด ์์ฒด๋ง์ผ๋ก๋ stableํ์ง ์๊ณ ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํฉ๋๋ค.
๋ฐ๋ผ์,
<ํต ์ ๋ ฌ>
๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ stable
์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ณต์กํจ
ํ ์ ๋ ฌ
- ๋ฒ๋ธ ์ ๋ ฌ๊ณผ ๋น์ทํ๋ฉฐ, 1๋ฑ์ ๋ฝ์๋ด๊ณ ๋๋จธ์ง ์์์์ 1๋ฑ์ ๋ ๋ฝ์๋ด๋ฉด ์ ๋ ฌ๋จ
- ๋ฒ๋ธ ์ ๋ ฌ์ ๋จ์ ์์์์ 1๋ฑ์ ๋ค์ ๋น๊ต๋ก ์ฐพ๋๋ค๋ฉด,
- ํ ์ ๋ ฌ์ 1๋ฑ์ ๋ฝ์๋ธ ํ ๋๋จธ์ง ์์์์ 1๋ฑ์ ์ฐพ์ ๋ ๊ธฐ์กด์ 2๋ฑ์ด ์๋์ผ๋ก 1๋ฑ์ด๋๋ค.
ํ ์์ฑ → ๋ฃจํธ ์์ ์ ๊ฑฐ → ํ์ ์ ์ง
- ํ(Heap)์ ์ฑ์ง
- ๋ฆฌํ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ์์์ด ๋ฐ๋์ 2๊ฐ.
- ์์ ์ด์งํธ๋ฆฌ์์ ๋ฆฌํ ๋ ธ๋๊ฐ ์ด๋ค ๋ ธ๋ ์ดํ๋ถํฐ ๋ชจ๋ ์๋ต๋ ํํ์ด๋ค.
- ๋ถ๋ชจ๋ ์์๋ณด๋ค ๋ฐ๋์ ํฌ๊ฑฐ๋(max heap), ์์๋ณด๋ค ๋ฐ๋์ ์๋ค(min heap)
- ํธ๋ฆฌ๋ฅผ ๋ฐฐ์ด๋ก ํํํ ์ ์๋ค.
- ํ ๋ง๋ค๊ธฐ ์๊ฐ ๋ณต์ก๋
- ๋น ํ์ ์ฐจ๋ก๋๋ก ์์ ์ฝ์ : log 1 + log 2 + … + log n ≤ n * log n ⇒ O(n log n)
- ๋ ํ์ ๋ณํฉ : T(n) = 2T(n/2) + log n = O(n)
'๐ ์ ๊ณต ๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ ํด์ ๋ฐ ์ค๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Greedy algorithm - ์ด์งํธ ๋๋์ (cpp) (0) | 2023.02.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ์ ์ต์ ์ฑ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ๋น๊ต๊ธฐ๋ฐ ์ ๋ ฌ์ ํ๊ณ/๋น๊ต์ ๊ธฐ๋ฐํ์ง ์์ ์ ๋ ฌ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ์ ํ์์ ์ดํด(recurrence relation) (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ๋ฐ ์ ์ (0) | 2023.01.16 |