๐ ํ ์ ๋ ฌ
ํ ์ ๋ ฌ์ 1๋ฑ์ ๋ฝ์๋ด๊ณ ๋๋จธ์ง ์์์์ ๊ณ์ 1๋ฑ์ ๋ฝ์๋ด๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฒ๋ธ์ ๋ ฌ๊ณผ ๋น์ทํ๋ค. ๋ฒ๋ธ์ ๋ ฌ์ 1๋ฑ(์ค๋ฆ์ฐจ์ ์ ๋ ฌ์์ ๊ฐ์ฅ ํฐ ์)์ ๋ฝ๊ณ ๋์ ์ด์ ์ 1๋ฑ๋ค๊ณผ ๋น๊ตํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ํ์ ๋ ฌ์์๋ 1๋ฑ์ด ๋ฝํ ์์๋๋ก ๋ค์์ ์๋์ผ๋ก 2๋ฑ, 3๋ฑ, ... ์ด๋ ๊ฒ ๋๋ฏ๋ก 1๋ฑ์ ๋ฝ๊ณ ๋์ ์ถ๊ฐ์ ์ธ ๋น๊ต๊ฐ ํ์ ์๋ค. ๋งค ๋ผ์ด๋์์ ํ๋ฒ 1๋ฑ์ผ๋ก ๋ฝํ๋ฉด ๊ทธ ์์๋ ์ด๋ฏธ ์์๊ฐ ์ ํด์ง ๊ฒ์ด๋ค. ๋จ์ ์์๊ฐ ์์ ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก 1๋ฑ์ ๋ฝ์๋ด๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
๐ถ ๋ฒ๋ธ์ ๋ ฌ์ ๋ ์์๋ณด๊ณ ์ถ๋ค๋ฉด
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ์ ๋ ฌ Bubble Sort (C++ ๊ตฌํ)
์ฝํ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๊ผญ ํ์ํ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ ์ค ํ๋๊ฐ ์ ๋ ฌ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ์ ๋ฐ๋ผ (์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ) ์ ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต์์ฒ๋ผ ์ฌ์ฉํ๋ค. ๊ทธ ์ ์ ์์ฃผ ์ฐ๋
blackon29.tistory.com
1๋ฑ์ ๋ฝ์๋ด๊ณ ๋๋จธ์ง์์ ๊ณ์ 1๋ฑ์ ๋ฝ์๋ด๋ ๊ณผ์ ์ 'ํ' ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ ํ์ ๋ ฌ์ด๋ผ ๋ถ๋ฅธ๋ค. ํ์ด๋ ๋ฆฌํ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋์ ์์์ด ๋ฐ๋์ 2๊ฐ์ธ ์ผ์ข ์ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค. ์์ ์ด์งํธ๋ฆฌ์์ ๋ฆฌํ ๋ ธ๋๊ฐ ์ด๋ค ๋ ธ๋ ์ดํ๋ถํฐ ๋ชจ๋ ์๋ต๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
- max heap : ๋ถ๋ชจ๋ ธ๋ > ์์๋ ธ๋ (๋ถ๋ชจ๋ ์์๋ณด๋ค ๋ฐ๋์ ํฌ๋ค) → ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ์ ํฉ
- min heap : ๋ถ๋ชจ๋ ธ๋ < ์์๋ ธ๋ (๋ถ๋ชจ๋ ์์๋ณด๋ค ๋ฐ๋์ ์๋ค)
์ด๋ฌํ ํ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐฐ์ด๋ก ํํํ ์ ์๋ค. ์์ ์ด์งํธ๋ฆฌ์ด๋ฏ๋ก ๋จ๊ณ๋ณ๋ก 1, 2, 4, 8, 16, 32 ... ๊ฐ์ฉ ์์ผ๋ฏ๋ก ๋ฐฐ์ด๋ก ๋ํ๋ธ๋ค๋ฉด ๋ ธ๋์ ์ผ์ชฝ ์์์ 2i, ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์์ 2i + 1 ์์น์ ์ฐ์๋๊ฒ ๋ฐฐ์ด์ ์ ์ฅ๋๋ค.
ํ์ผ๋ก ์ด๋ป๊ฒ ์ ๋ ฌ์ ํ ๊น?
ํฌ๊ธฐ n์ ์ฃผ์ด์ง ๋ฐฐ์ด์ด ํ์ผ๋ก ๋ณํ๋์๋ค๊ณ ๊ฐ์ ํ์. max-heap ์์ ์ ์ผ ํฐ ์์๋ ๋ฃจํธ๋ ธ๋์ด๋ค. ํ์์ ๊ฐ์ฅ ํฐ ์์๋ฅผ ํ๋์ฉ ๊บผ๋์ผ๋ก์จ ์์๋๋ก ์ ๋ ฌํ ์ ์๋ค. ๋ฃจํธ๋ ธ๋๊ฐ ์ ๊ฑฐ๋๋ฉด ์ด ์๋ฆฌ์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ฆฌํ ๋ ธ๋๋ฅผ ๊ฐ์ ธ์จ๋ค. ๊ฐ์ ธ์จ ๋ ธ๋ ๊ฐ๊ณผ ์๋ ๋ ธ๋์ ๋ ์์์ ๋น๊ตํ์ฌ ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋ฃจํธ๋ ธ๋๋ก ์ฌ๋ผ๊ฐ๋๋ก ๋ฐ๋ณตํ๋ค. ๊ทธ๋ผ ๋๋จธ์ง n-1๊ฐ ์ค 1๋ฑ์ธ ๋ฃจํธ๋ ธ๋๋ฅผ ๋ ๊บผ๋ธ๋ค. (์ ์ฒด 2๋ฑ) ์ด๋ ๊ฒ ๋ฐ๋ณตํ์ฌ ํ์์ ๋ชจ๋ ์์๋ฅผ ๋นผ๋ธ๋ค.
์ด๋ ํฌ๊ธฐ n์ ์ฃผ์ด์ง ๋ฐฐ์ด์ด ํ์ผ๋ก ๋ณํ๋๋ ๊ณผ์ ์ด ํ์ํ์ง๋ง ๊ฐ๋จํ๊ฒ c++์ algorithm ํจํค์ง์ ์๋ make_heap() ๋ด์ฅํจ์๋ฅผ ์ด์ฉํ๋ค. algorithm ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํด๋ ๋๋์ง.. ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ ๊ทธ๋ฅ ์ฐ๊ฒ ์ด ์ฝ๋๊ฐ ๋๋ฌด ๊ฐ๋จํ์ง๋ง..
- make_heap(begin, end) : ์ฃผ์ด์ง ๋ฐฐ์ด์ ํ(max-heap)์ผ๋ก ๋ณํ
- pop_heap(begin, end) : ์ฃผ์ด์ง ํ์์ ์ฒซ๋ฒ์งธ ์์(๋ฃจํธ ๋ ธ๋)๋ฅผ ๊บผ๋
// use make_heap function in algorithm library
// max heap ๋ง๋ค์ด์ ๋ฃจํธ ๋
ธ๋ ํ๋์ฉ ๋ฝ์๋ด๊ธฐ
vector<int> heapsort(vector<int> L) {
make_heap(L.begin(), L.end());
for (auto last = L.end(); last != L.begin(); last--) {
pop_heap(L.begin(), last);
}
return L;
}
๐์๊ฐ๋ณต์ก๋ (feat. ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ ๊ธฐ๋ฒ)
ํ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ ์ญ์๋ nlogn์ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๊ต์ ๊ธฐ๋ฐํ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ ๋ชจ๋ nlogn ๋ณด๋ค ๋น ๋ฅผ ์ ์๋ค.
์ฆ๋ช ๊ณผ์ ์ ๋ณต์กํ๊ณ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ ๊ฑฐ ๊ฐ์ ํจ์คํ๋ค.. (์ธ์ ๊ฐ ํ๊ฒ ์ง.. ๋ฏธ๋์ ๋)
๊ทธ๋์ ๋น๊ต ๊ธฐ๋ฐ์ ์ ๋ ฌ ๊ธฐ๋ฒ ์ธ์ ๋ ํจ์จ์ ์ธ ์ ๋ ฌ๊ธฐ๋ฒ์ด ์๋์ง ์ดํด๋ณผ ํ์๊ฐ ์๋ค. ์๊ฐ๋ณต์ก๋๊ฐ ์ค์ด๋ค๋ฉด ๋ณดํต ์๊ณ ๋ฆฌ์ฆ์ด ์ดํดํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๊ณต๊ฐ๋ณต์ก๋๊ฐ ๊ธ์ฆํ๋ ๊ฒฝํฅ์ด ์๋ค. ๋ค์์ ๋ฒํท, ๊ณ์, ๊ธฐ์ ์ ๋ ฌ์ ๋ํด ์์๋ณธ๋ค.
'Problem Solving > Algorithm, DS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Greedy Algorithm (ํ์์๊ณ ๋ฆฌ์ฆ, ๋ฐฑ์ค ๋ฌธ์ ๋ชจ์) (0) | 2021.01.10 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๊ธฐ์์ ๋ ฌ, ๊ณ์์ ๋ ฌ Radix, Counting Sort (C++ ๊ตฌํ) (0) | 2021.01.04 |
[์๊ณ ๋ฆฌ์ฆ] ํต์ ๋ ฌ Quick Sort (C++ ๊ตฌํ) (0) | 2021.01.03 |
[์๊ณ ๋ฆฌ์ฆ] ๋ณํฉ์ ๋ ฌ Merge Sort (C++ ๊ตฌํ) (0) | 2021.01.02 |
[์๊ณ ๋ฆฌ์ฆ] ์ฝ์ ์ ๋ ฌ Insertion Sort (C++ ๊ตฌํ) (0) | 2020.12.31 |