์ ๋ ฌ์ ๋ํด ๊น๊ฒ ๊ณต๋ถํด๋ณด์.
- ์ ์๋ฆฌ ์ ๋ ฌ
- ์ ๋ ฌ์ ํ๋๋ฐ ํ์ํ ์ถ๊ฐ ์ ์ฅ๊ณต๊ฐ์ด ์์์ธ ๊ฒฝ์ฐ
- ์์ ์ฑ
- ๊ฐ์ ํค ๊ฐ([3, 3])์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๊ฐ์ ์ ๋ ฌ์ ์์๊ฐ ์ ๋ ฌ ํ์๋ ์ ์ง๋๋ ๊ฒฝ์ฐ
- ์ฆ 3_1, 3_2๊ฐ ์์๋๋ฐ ์ ๋ ฌ ๋๋๋๊น 3_2, 3_1์ด๋ ๊ฒ ๋์ด์์๋ค๋ฉด ๋ถ์์ ํ ๊ฒ
์ฝ์ ์ ๋ ฌ
์ฝ์ ์ ๋ ฌ
- ํญ๋ชฉ์ ๋ผ์ ๋ฃ๋๋ค๊ณ ์๊ฐํด!!!
- ์ด๋์? : ์์
- ์์๋ ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด ์๋๊ฑฐ์ผ. ๋ด ์์๋ฅผ ์ฝ์ ํด์ ์ ๋ ฌ๋ ์ํ๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฑฐ์ง
- ๊ทธ๋ผ ์์ ์ ๋ ฌ๋์ด ์์ผ๋ฉด ๋ค๊ฐ ์๋์ด ์๊ฒ ๋ค
- ๊ทธ๋ฌ๋๊น 2๋ฒ๋ถํฐ ์์ํด์ n๊น์ง ๊ฐ ๋, (i)
- i-1๋ฒ์งธ ์์๋ถํฐ ๋๋ ๋น๊ตํ๋ฉด์ ๋ด๊ฐ ๋ ์์ผ๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋๊ฑฐ์ผ
ํ๊ท ๊ณ์ฐ์, ์์ ์์น๊ฐ 2๋ถํฐ ์ด๋ฏ๋ก, ๊ทธ ์์์์น์ ๋ฐ๋ฅธ ๊ณ์ฐ์ ํ์๋ฅผ ๊ตฌํ๊ณ ๊ทธ ๋น๊ต ํ์๋ฅผ ํ๋ฅ ๋ณ์ X๋ก ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋น๊ต ํ์๊ฐ ๋ฑ์ฅํ๊ธฐ ์ํ ํ๋ฅ ์ i์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์ฆ, i๊ฐ 2๋ถํฐ n๊น์ง ๊ฐ๋๋ฐ, ๊ฐ๊ฐ์ i๊ฐ ๋ฑ์ฅํ ํ๋ฅ ์ 1/(i-1)์ด๋ค. ๊ทธ๋ฐ๋ฐ 1๊น์ง ์ธ๋ฑ์ค๊ฐ ๊ฐ์๋ ์์ผ๋ฏ๋ก ๊ฒฐ๊ตญ ํด๋น index๊ฐ ๋ฑ์ฅํ ํ๋ฅ ์ ๊ณ ๋ฅด๊ฒ 1/i์ด๋ค.
๋๋จธ์ง๋ ๊ธฐ๋๊ฐ์ ๊ณ์ฐํด์ฃผ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ธฐํํ์ ์ผ๋ก ๋ณด์๋ ๋น์ฐํ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
์๋ ๋ค์ ์๋ ๊ฐ์ ์์ผ๋ก ๋ฃ์ผ๋ฉด์ ๊ณ์ํด์ ์์ ๊ฐ์ ๋ค๋ก ๊ตํํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ [5, 4, 3, 2, 1]์ ๊ฒฝ์ฐ 1+2+3+4๋ฒ, ์๋ P(n^2)์ด๋ค. ํ๊ท ์ ๊ทธ๊ฒ์ ๋ฐ
์ ํ ์ ๋ ฌ
์ ํ ์ ๋ ฌ
- ๋ค์์ ๋ถํฐ ์ ์ผ ์์ ๋์ ์ ํํด์ ๋ฃ์ด๋ฒ๋ฆฐ๋ค.
- ๋ถ์์ ์ ๋ ฌ
- ์ค์ ๋ก ํด๋ณด๋ฉด ์๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋๋ค.
- ์ ์๋ฆฌ ์ ๋ ฌ
์ ํ ์ ๋ ฌ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ์๋ ์์๋ฅผ ์ดํด๋ณด๊ณ , ์์ํ๋ ์์น๋ ๋น๊ตํด์ ์์ ๊ฒฝ์ฐ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ๋ฐฉ์์ด๋ค. ์ดํ ๋์ฌ ๊ตํ์ ๋ ฌ๋ณด๋ค ๊ตํ ํ์๊ฐ ์ ๋ค๋ ์ฅ์ ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต๊ฐ๋ณต์ก๋๋ ๋ณํ์ง ์๊ณ , ๊ทธ๋ฅ n์ด๊ณ , ์ ์๋ฆฌ ์ ๋ ฌ์ด๊ณ , ์ต์๊ฐ์ ์์ ์ ํํ ์์์ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ๋ถ์์ ์ ๋ ฌ์ด๋ค. [4, 4, 1, 5] ํด๋ณด๋ฉด ๋ฐ๋ก ์๋ค.
์ ํ์ ๋ ฌ์ ์ง์ ํ๋ ๊ฒ์ด ๋ค ์ฐพ๊ณ ํ๋ฒ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ O(n), ์ ํํ๋ 3(n-1)์ด๋ค.
๊ตํ ์ ๋ ฌ
- i๋ฒ์งธ์ j๋ฒ์งธ๋ฅผ ์์ฃผ๊ทธ๋ฅ ๊ณ์ ๊ตํํด๋ฒ๋ฆฌ๋ ๊ฑฐ์ผ
- [4a, 4b, 1, 5] โ ์์ฃผ ๊ทธ๋ฅ ๊ณ์ ๋ฐ๋์ด - ๋ถ์์ ์ ๋ ฌ
- ์ ์๋ฆฌ ์ ๋ ฌ
๊ตํ ์ ๋ ฌ์ ์ค์ ๋ก ๊ตํ์ ๋ง์ด ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋จ์ ์ด ๋ง๋ค. ์ด์ ์ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๊ตํ์ ํ์๊ฐ ์ฆ๊ฐํ๋ ๊ฒฝํฅ์ด ์๋ค. [4, 4, 1, 5]๋ฅผ ํด๋ณด๋ฉด ๊ณ์ ๊ตํ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ถ์์ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์๋ฆฌ ์ ๋ ฌ์ด๋ค.
์ง์ ํ๋๋ฐ ์์ด์ n^2๋ฒ ๋๋ฉด์ ๋ค ์ง์ ํ๊ธฐ ๋๋ฌธ์ ์ง์ ๋ n^2, ์๊ฐ ๋ณต์ก๋๋ n^2์ด๋ค.
๊ฑฐํ ์ ๋ ฌ
๊ฑฐํ ์ ๋ ฌ
- ์๋ ๋ค์์๋ถํฐ ์์ํด์ ์์ ๊ฐ์ด ๊ฑฐํ์ฒ๋ผ ์ฌ๋ผ์จ๋ค๊ณ ๊ฑฐํ ์ ๋ ฌ์ด๋ค.
- ๊ตํ์ ๋ ฌ๊ณผ ๋ฐฉ๋ฒ๋ง ๋ค๋ฅด์ง ์๊ฐ ๋ณต์ก๋, ๊ณต๊ฐ๋ณต์ก๋, ์ง์ ๋ณต์ก๋๋ ๋ค ๊ฐ๋ค.
์ ๋ฆฌ
๊ธฐ๋ณธ ์ ๋ ฌ ์ ๋ฆฌ
- ์ฝ์ ์ ๋ ฌ์ ์ ์ด์ ์ ๋ ฌ๋์ด ์๋ ๊ฑธ ๊ฐ์ ํ๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ์ด ์ด๋์ ๋ ๋์ด ์์ผ๋ฉด ๋ ๋น ๋ฅด๋ค.
- ์ฝ์ ์ ๋ ฌ์ ๊ตํ์ ๋ ฌ๋ณด๋ค๋ ๋น ๋ฅธ ๊ฒฝํฅ์ด ์๋ค๊ณ ๋งํด๋ ๋๋ค. ์ ์ด์ ๊ตํ ์ ๋ ฌ์ด ๋ณ๋ก๋ค.
- ์ ํ ์ ๋ ฌ๊ณผ ๊ตํ ์ ๋ ฌ? ์ ํ ์ ๋ ฌ์ด ๋ซ๋ค. ์ง์ ์ ๋ํ๋๊น
- ๊ทธ๋ผ ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด ์๋ค๋ฉด?
- ๊ตํ ์ ๋ ฌ์ ์ง์ ํ์ง ์๋๋ค.
- ์ ํ ์ ๋ ฌ์ ๊ตํ์ด ์ด๋ฃจ์ด์ง๋ค (? ์๋๊ฑฐ๊ฐ์ง? ๊ทผ๋ฐ ์ฒ์ ์์์ง์ ์ด ๋๋ถํฐ ์์ํ๋๊น ๋ง์ง๋ง์ ๊ตํ์ ๋ฌด์กฐ๊ฑด ํ๋ฒํ์์.)
- ์ ํ ์ ๋ ฌ์ด ์ฝ์
์ ๋ ฌ๋ณด๋ค ๋น ๋ฅธ๊ฐ?
- ์ผ๋จ ์ฝ์ ์ ๋ ฌ์ด ๋์ํ๋ ๋ฐฉ์์ ๋ณด๋ฉด ์์ ์๋ ๊ฒ์ ๊ณ์ ๋ฏผ๋ค.
- ๋ฏผ๋ค๋ ๊ฒ์ ์ง์ ์ด ๋ง์ด ๋๋ค๋ ๊ฒ
- n์ด ์ปค์ง ๊ฒฝ์ฐ ์ง์ ์ญ์ ๋ฌด์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ํ์ด ๋ณด๋ค ๋ซ๋ค๊ณ ํ ์ ์๋ค.
ํ๋ฒ ๋น๊ตํ๋๋ฐ ์ต๋ํ ํ๋์ ์ญ์ ์ ๊ฑฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํํ์
?? ์ด๊ฒ ๋๋์ฒด ๋ฌด์จ๋ง์ด์ผ. ์ผ๋จ ์๋๋ฅผ ๋ณด๋ฉฐ ์ดํดํ์.
- n๊ฐ์ ํค, ์์ ์ ์ 1~n์ ๊ฐ์ ํ์.
- n๊ฐ์ ์์๋ n!๊ฐ์ ์์ด์ด ์กด์ฌํ๋ค. (n๊ฐ๋ฅผ ๋์ดํ๋ค๊ณ ํ์ ๋)
- ๋ฅผ i๋ฒ์งธ ์๋ฆฌ์ ์์นํ ์ ์๋ผ๊ณ ํ๋ฉด
[k1, k2, ..., kn
์ผ๋ก ๋ํ๋ผ ์ ์๋ค. - i < j์ ki > kj๋ฅผ ๋ง์กฑํ๋ ์ (ki, kj)๋ฅผ ์์ด์ ์กด์ฌํ๋ ์ญ(inversion)์ด๋ผ ํ๋ค.
[3, 2, 4, 1, 6, 5]
์๋ 5๊ฐ์ ์ญ์ด ์กด์ฌ{(3, 2), (3, 1), (2, 1), (4, 1), (6, 5)}
์ฆ, ๋ฐฐ์ด์ด ์๊ณ , ๊ฑฐ๊ธฐ์ ์ญ์ด๋ผ๋ ์์ ๋ง๋ค ๊ฑด๋ฐ, ๊ฑฐ๊ธฐ์ ํ๋์ ์ญ์ ์ ๊ฑฐํ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ณต์ก๋์ ํํ์ ๊ตฌํด๋ณด์๋ ์๋ฏธ. ์ฆ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ํ์ ๋ ์๊ฐ๋ณต์ก๋๊ฐ ์ผ๋ง์ผ๊น?
- ์ต์
์ ๊ฒฝ์ฐ
- ์ต์ ์ ๊ฒฝ์ฐ๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋์ด๋ค.
- ๊ทธ๋ฌ๋ฉด ๊ทธ ์์์์ 2๊ฐ๋ฅผ ๋ฝ๊ธฐ๋ง ํ๋ฉด(์กฐํฉ) ๋ชจ๋ ์ญ์ด๋ค. (์ญ์ธ์ง๋ ์๊ฒ ์ง๋ง ์ผ๋จ ๋ชจ๋ฅธ๋ค๊ณ ํด๋ณด์.)
- ๋ชจ๋ฅด๋ฉด, ๋ฐ์ํ๋ ๋ชจ๋ ์์ ๋ํด ์ญ์ธ์ง ์ฒดํฌํ๊ณ ์ง์์ผ ํ๋ค. ๊ทธ๋ผ ์ผ๋จ ๋ฝ๋๊ฒ ๊ฐ ๋ ํ ๋ฐ(nC2), ํ๋ฒ ๋ ์์๋ฅผ ๋น๊ตํ๋ฉด ๋๋๊น ์ด ๋น๊ตํ์๋
- ํ๊ท ์ ์ผ๋ก
- ์ ์๋ ๋ฐฐ์ด์ ๋ค์ง์ด ๋ณด์. ๊ทธ๊ฑธ Aโ์ด๋ผ ํ์.
- ๊ทธ๋ฌ๋ฉด A์์ ์์ ๋ฝ์ ์ ์๊ณ Aโ์์ ์์ ๋ฝ์ ์ ์๋ค.
- ๊ทธ๋ฌ๋ฉด ๊ทธ ๋๊ฐ์์ ๋ฐ์ํ๋ ์์ ์ด n(n-1)๊ฐ์ด๋ค.
- ๊ทผ๋ฐ ๊ทธ์ค์์ ์ญ์ ๋ง์กฑํ๋ ๊ฒ์ ์ ํํ๊ฒ ๋ฐ์ด๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก Aํ๋์ ๋ฐฐ์ด์์ ๋์ฌ ์ ์๋ ์ญ์ ๊ฐ์๋ ํ๊ท ์ ์ผ๋ก ์ด๋ค.
์ ์ด์๊ธฐ๋ฅผ ์ ํ๋๋.
- ๊ตํ
- ์ฝ์
- ์ ํ
- ๋ฒ๋ธ
์ ๋ ฌ์ ๊ฒฝ์ฐ ๊ฒฐ๊ตญ ์ด๋ฌํ ์ญ์ ๊ด๋ จ๋ ๊ฒ์ ์ฐพ๊ณ , ์ด๋ฅผ ๋น๊ตํ์ฌ ๋ฐ๊พธ๋ ์ฐ์ฐ์ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ 4๊ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฌํ ๊ฒฝํฅ์ ๊ทธ๋๋ก ๋ฐ๋ฅด๊ฒ ๋๋๋ฐ, ํด๋น ๋ฌธ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ํํ์ด ์ต์ ์ ๊ฒฝ์ฐ ์ด๊ณ , ํ๊ท ์ ์ผ๋ก ์ธ ๊ฒ์ ๋ฐํ์ผ๋ฏ๋ก, ์์ 4 ์๊ณ ๋ฆฌ์ฆ์ ํ๊ณ๋ฅผ ์์๋ธ ๊ฒ.
Merge Sort
ํฉ๋ณ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ฌ๊ฒํ
๊ทธ๋ฌ๋ฉด ํฉ๋ณ ์ ๋ ฌ์?
- ํฉ๋ณ ์ ๋ ฌ ๊ฐ์ ๊ฒฝ์ฐ ๋๋ ๋๊ฐ์ ๊ณต๊ฐ์์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฅผ ํฉ์น๋ ์์ ์ ํ๊ฒ ๋๋ค.
- ๊ทธ๋ฐ๋ฐ, ๊ทธ ๊ฐ๊ฐ์ ๊ณต๊ฐ์ ์ ๋ ฌ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์, ์๋ก์ด ๊ณต๊ฐ์ ํ๋์ ์์๊ฐ ๋ค์ด๊ฐ์ง๋ง ์ค์ง์ ์ผ๋ก๋ 2๊ฐ์ ์ญ์ด ์ฌ๋ผ์ง ํจ๊ณผ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
Quicksort
pivot ๋๊ณ ์์ชฝ์ผ๋ก ๋๋์ด์ ์ฌ๊ท์ ์ผ๋ก ์งํํ๋ ์๊ณ ๋ฆฌ์ฆ. ๋ค ์์ฌ?
Heap Sort
Binary Tree์ ์ข ๋ฅ
์ด์ง ํธ๋ฆฌ์ ์ข ๋ฅ
- ์์ ์ด์ง ํธ๋ฆฌ
- ํธ๋ฆฌ ๋ด๋ถ์ ์๋ ๋ชจ๋ ๋ง๋์ ๋ ๊ฐ์ฉ ์์ ๋ง๋๊ฐ ์๋ ์ด์ง ํธ๋ฆฌ
- ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํ์ depth๊ฐ ๋ชจ๋ ๋์ผ
- ์ค์ง์ ์ธ ์์ ์ด์ง ํธ๋ฆฌ
- ์ฌ์ค ์ด๋ฌํ ๊ฒ์ด ๋๊ธฐ ์ด๋ ค์
- ๊ทธ๋์ ์ญ ๋ฃ๋๋ฐ, ๋ง์ง๋ง depth๋ฅผ ๋ค ๋ชป์ฑ์์ ์ผ์ชฝ ๋ถํฐ ์ฑ์ด ๊ฒ
- ์ฆ, d-1๊น์ง๋ ์์ ์ด์ง ํธ๋ฆฌ, d์์๋ ์ผ์กฑ๋ถํฐ ์ฑ์์ง ์ด์ง ํธ๋ฆฌ
- Full ์ด์ง ํธ๋ฆฌ
- ๋ชจ๋ ๋ ธ๋๊ฐ 0๋๋ 2๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ๋๋ค.
Heap
Heap
- ์ด๋ค ๋ง๋์ ์ ์ฅ๋ ๊ฐ์ ๊ทธ ๋ง๋์ ์์ ๋ง๋์ ์ ์ฅ๋ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค. (max heap)
- ์๋ ์ค์ง์ ์ธ ์์ ์ด์งํธ๋ฆฌ์ด๋ค.
- ํน์ง
- ์ต๋๊ฐ์ ํ์ธ : O(1)
- ์ต๋๊ฐ ์ ๊ฑฐ ๋ฐ ์ฌ๊ตฌ์ฑ : O(logn)
- depth๊ฐ logn์ด๊ธฐ ๋๋ฌธ์ ์์ ๊ณ ์ฌ๊ตฌ์ฑ
- ๊ฒฐ๊ตญ ์ฌ๊ตฌ์ฑํ ๋ logn๋งํผ์ depth๋ง ํ๊ณ ๋ด๋ ค๊ฐ๋ฉด ๋๋ค.
- ๋ฐ์ดํฐ์ ์ถ๊ฐ, ์ญ์ ๋ณ๊ฒฝ : O(logn)
- ์ถ๊ฐ๋ ์ฌ๊ตฌ์ฑ
- ์ญ์ ๋ ์ฌ๊ตฌ์ฑ
- ๋ณ๊ฒฝ๋ ์ฌ๊ตฌ์ฑ์ด๊ธฐ ๋๋ฌธ
- ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๋๋ฐ ์ ํฉ
Heap ๊ตฌ์กฐ
- ๊ตฌ์กฐ ํด์
- index i ๋
ธ๋
- Left = 2*i
- Right = 2*i + 1
- ๋ถ๋ชจ ์ ๊ทผ ๋ฐฉ๋ฒ : int(left or right / 2)
- index i ๋
ธ๋
Sift down
Sift down
๋ฃจํธ์ ์๋ ํค๊ฐ Heap ์ฑ์ง์ ๋ง์กฑํ์ง ์์ ๋, ์ด๋ฅผ ๋ง์กฑ์ํค๋๋ก ํ๋ ๋ฐฉ๋ฒ
Heap sort ์ค๋ช
- n๊ฐ์ ํค๋ฅผ ์ฌ์ฉํ์ฌ heap์ ๊ตฌ์ฑํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๋ ฅํ๋ฉด์ Heap์ ๊ตฌ์ฑ (siftUp) - O(nlogn)
- ์ด๋ฏธ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋๊ณ Heap์ ๊ตฌ์ฑ(Siftdown) - O(n)
- ๋ฃจํธ๋ฅผ ์ ๊ฑฐํ๋ค. - O(1)
- heap์ ์ฌ๊ตฌ์ฑํ๋ค. - O(logn)
- 2๋ฅผ ๋ฐ๋ณตํ๋ค.
Sift up
data = [2, 4, 5, 3, 1, 9, 6, 7, 10, 8]
- ํต์ฌ์ ์ถ๊ฐ๊ฐ๋๋ฉด ๊ฐ์ฅ ๋งจ ๋์ index์ ์ถ๊ฐํ๊ณ , ๊ฑฐ๊ธฐ์๋ถํฐ ๋ถ๋ชจ๋ ธ๋๋ฅผ ์ฐพ์ผ๋ฉด์ ์๊ธฐ ์๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
- ์๊ฐ ๋ณต์ก๋
- ๋จ์ ์ฐ์ฐ : ํค์ ๋น๊ต
- ์ ๋ ฅ ํฌ๊ธฐ : n(์ด ํค์ ๊ฐ์), = 2^k๋ผ ๊ฐ์
- depth = log(n)
- ์๋กญ๊ฒ ํค๊ฐ ์ถ๊ฐ๋๋ฉด d+1์ depth์ ์์นํจ (n=2^k ๊ฐ์ )
- ๊ทธ๋ฌ๋ฉด d๊ฐ์ ์กฐ์์ ๊ฐ์ง
- ์ ๊ทธ๋ฌ๋ฉด ์ฒ์ ์์๋ถํฐ ๋ช๊ฐ์ ๋น๊ต๋ฅผ ํ๋์ง ํ๋ก ์ดํด๋ณด์.
์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ
ํด๋น depth์์ ์ฌ๋ผ๊ฐ ์ ์๋ ์ง์ ๋ํด์ ํ์๋ก ๊ณ์ฐํด์ ํ๋ก ๋ํ๋ธ ๊ฒ์ด๋ค.
- beta๊ฐ ์๋ค ์๊ฐํ์ ๋ nlogn-2n+2
- ๋ง์ฝ ์๋ค๋ฉด d๋งํผ์ ๋น๊ต๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ฏ๋ก logn์ ๋ํด์ค
- sift up์ ์ฌ๋ผ๊ฐ ๋๋ง๋ค 1๋ฒ์ ๋น๊ต
Sift down
์ฝ๊ฒ ์๊ธฐํ๋ฉด ๋ญ๋ค? ๊น์ depth๋ถํฐ ์ฌ๋ผ์ค๋ฉด์ siftdown์ ํ๋ ๊ฒ
Sift down ๋ฐฉ๋ฒ ์๊ฐ ๋ณต์ก๋
ํด๋น depth์์ ์๋๋ก ๋ด๋ ค๊ฐ ๋, ํ์ํ ๋น๊ต ์ฐ์ฐ์ ํ์๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค. ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์์ d๊ฐ 3์ธ ๊ฒ์ ๊ธฐ์ตํ์.
์ ์ด๋ ๊ฒ ๊ตฌํ ์ํ์์ beta ์ถ๊ฐ๋ ์ฐ์ฐ์ ๋ํด์ค๋ค. beta๊ฐ ์ถ๊ฐ๋จ์ ๋ฐ๋ผ, ์์ depth์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋ํด ๋ค์ sift down์ ์ํํด์ผ ํ๋ค. (d๋ฒ)
์ต์ข ์ ์ผ๋ก n-logn-1+logn = n-1๋ฒ์ siftdown์ด ๋ฐ์ํ๋ค.
๊ทธ๋ฐ๋ฐ, siftdown์์๋ 2๋ฒ์ ๋น๊ต์ฐ์ฐ์ด ๋ฐ์ํ๋ฏ๋ก ์ด ๋น๊ต ํ์๋ 2(n-1)์ด๋ค.
์ฆ O(n), ์์ ์๊ฐ์ ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค.
Heap ์ ๋ ฌ์ ๊ณต๊ฐ ๋ณต์ก๋
- ์ ์๋ฆฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ธ๊ฐ?
- ์ฆ, ์ ๋ ฅ๊ฐ ์ด์ธ์ ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ด ํ์ํ๊ฐ?
- ใดใด ํ์์์
- ๋ฐฐ์ด๋ก ๊ตฌํํ ๊ฒฝ์ฐ ์ ์๋ฆฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์
Heap ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋
makeheap์ ๋ฐฐ์ ์ผ๋ Remove keys์ ๋ํด ์์๋ณด์.
Remove keys
removekeys
- ํต์ฌ์, ๋งจ์์ key๊ฐ ๋ ์๊ฐ ์ดํ์ ๋งจ ์๋์ ์๋ ์์๊ฐ ๊ทธ ์๋ฆฌ๋ฅผ ๋์ฒดํ๊ฒ ๋๋๋ฐ, ๊ทธ๋ด ๋๋ง๋ค sift down์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค๋ ์ฌ์ค์ด๋ค.
- ๊ทธ๋ผ ๊ทธ siftdown์ด ๋ช๋ฒ์ด ์ผ์ด๋๋์ง ์๋ค๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ตฌํ ์ ์๋ค.
depth 2์ ์๋ ์์์ siftdown ํ์ ๊ฒฐ๊ณผ..!
์ข ํ ๋์ค๋๊น ์ด์ ๊ฒฐ๊ณผ๋ง ์๊ณ ๋์ด๊ฐ์.
Heap, Quick, Merge
|์๊ณ ๋ฆฌ์ฆ|๋น๊ตํ์|์ถ๊ฐ์ ์ฅ์ฅ์|
:โ:-------- | :โ:-------- | :----:------------ |
---|---|---|
ํฉ๋ณ์ ๋ ฌ | W/A = O(nlogn) | O(n) ์ฌ๋ถ ๊ณต๊ฐ ํ์ |
ํต ์ ๋ ฌ | W = O(n^2) A = O(nlogn) | O(logn) ์ฌ๊ทํธ์ถ์ ํ๋ ๊ณต๊ฐ (์ฌ์ค ๋ฌด์ํด๋ ๋จ) |
ํ ์ ๋ ฌ | W/A = O(nlogn) | ์ ์๋ฆฌ ์ ๋ ฌ |
Radix Sort
Key๊ฐ ๋น๊ต๊ฐ ์๋๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ด๋ด๋ ์ฌ์ฉํ ์ ์๋ ๋น๊ต๊ฐ ์๋ ์ ๋ ฌ ๋ฐฉ๋ฒ์ด ์๋ค.
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ์๋ฆฌ์์ผ๋ก ์ ๋ ฌ
์ฝ๊ฐ ๋ชจ์ผ๋ ๋๋์ด ๊ฐํ๋ค. ์ด๊ฒ ๋ญ๋๋ฉด, ๋ฐฑ์ ์๋ฆฌ, ์ญ์ ์๋ฆฌ, ์ผ์ ์๋ฆฌ ์์ผ๋ก ์ ๋ ฌ์ ์งํํ๋ ๊ฒ์ด๋ค.
๊ทผ๋ฐ ์์ ๋ฌธ์ ๊ฐ ๋ญ๋๋ฉด, ๋ฐฑ์ ์๋ฆฌ๋ฅผ ๋ฌถ์ ๋ค์์ ๊ทธ๋ค์ ๋จ๊ณ๋ก ๊ฐ๋๋ฐ ์์ด์ ๊ฐ๊ฐ์ pile์์ ์ญ์ ์๋ฆฌ๋ฅผ ๋๋๊ณ ์๋ค๋ ๊ฒ์ด๋ค.
์ฆ, 123, 137์์๋ ์ญ์์๋ฆฌ๋ฅผ ๋ฐ์ํ์ฌ 123 | 137๋ก ๋๋๊ณ , 239, 234, 225์์๋ 225 | 234, 239๋ก ๋๋๊ฒ ๋์ด์ pile์ ์๊ฐ ๊ธ๊ฒฉํ๊ฒ ๋์ด๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ฐ๋ฉด๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์๋ฆฌ์๊ฐ ๋์ฌ ์ ์๋ bucket์ ๋ง๋ค์ด ๊ด๋ฆฌํ๋ฉด ํด๊ฒฐ๋๋ค.
์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ผ์ ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก bucket์ ๋ด๋๋ค.
- ์์๋๋ก ๋ฐฐ์ดํ ํ๋ค.
- ์ญ์ ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก bucket์ ๋ด๋๋ค.
- ๋ฐฐ์ดํ ํ๋ค.
- ๋ฐฑ์ ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก bucket์ ๋ด๋๋ค.
- ๋ฐฐ์ดํ ํ๋ค.
๊ต์ฅํ ๊ฐ๋จํ๋ค..
-
์ฐ์ฐ
- ๋ถ๋ฐฐ
- ํ์ฌ ๋ฐฐ์ด์ ์๋ ์๋ฅผ Bucket์ ๋ด๋ ์ฐ์ฐ O(n)
- ๋ณํฉ(coalesce)
- bucket์ ์๋ ๊ฒ์ ๋ณํํจ O(10)
- ๋งํฌ๋ ๋ฆฌ์คํธ๋ก ๋ถ์ฌ๋ฒ๋ฆผ
- ๋ถ๋ฐฐ
-
์๊ฐ ๋ณต์ก๋
- ์๋ฆฌ์ * (๋ถ๋ฐฐ(n) + ๋ณํฉ(10)) = O(์๋ฆฌ์(d)*๊ฐ์n)
-
๊ณต๊ฐ ๋ณต์ก๋
- ์ถ๊ฐ์ ์ผ๋ก bucket์ ์ ์ฅํ ์ ์์ด์ผ ํ๋ฏ๋ก O(n)
์, ๊ทธ๋ฌ๋ฉด ๋ง์ฝ 16๊ฐ(n)์ ์๊ฐ ์๋ค๋ฉด ๋ช๊ฐ์ ์๋ฆฌ์(d)๊ฐ ํ์ํ ๊น? ๋ณดํต logn๊ฐ๋ฉด ์ถฉ๋ถํ๋ค. ๊ทธ๋ฌ๋ 16๊ฐ์ ์๋ฅผ ์ ๋ ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ 16*log16 = 64์ด๋ค.
์ฌ์ค ์ ํํ๊ฒ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ด๋ฉด ๋ค์๊ณผ๊ฐ๋ค.
T(n) = d * (n+k)
- d : ์๋ฆฌ์
- n : ๊ฐ์
- k : ์ง๋ฒ์ ๋ฐ๋ฅธ ๋ฒ์
์์ ์ ๋ ฌ (Topological Sort)
์์ ์ ํ๊ธฐ..!
DFS์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.