์ ์ ์ผ๋ก ํ์ํ๋งํผ๋ง ์์๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ด ํ ๋น
์ด๋ ๊ฐ ์์์ ์ฃผ์๋ ์ฐ์์ ์ผ๋ก ํ ๋น๋จ
index๋ฅผ ํตํด O(1)์ ์ ๊ทผ์ด ๊ฐ๋ฅํจ
์ฝ์ ๋ฐ ์ญ์ ๋ O(N)
์ง์ ๋ ๊ฐ์๊ฐ ์ด๊ณผ๋๋ฉด? โ ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ์ฌํ ๋นํ ํ ๋ณต์ฌํด์ผํจ
๋ ธ๋(Node)๋ค์ ์ฐ๊ฒฐ๋ก ์ด๋ฃจ์ด์ง
ํฌ๊ธฐ ์ ํ์ด ์์ ( heap ์ฉ๋๋ง ์ถฉ๋ถํ๋ฉด! )
๋ค์ ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ฅผ ํตํด ์ ๊ทผ ( O(N) )
์ฝ์ ๊ณผ ์ญ์ ๊ฐ ํธํจ O(1)
๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ๋ฐฐ์ด
๋ฐฐ์ด์ด ๊ฐ๋ ์ฐจ๋ฉด? โ ์์์ ๊ทธ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋ก ํ ๋นํ๊ณ ๋ณต์ฌ ์ํ
์ฌํ ๋น์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(N)์ด์ง๋ง, ์์ฃผ ์ผ์ด๋๋ ์ผ์ด ์๋๋ฏ๋ก ์ ๊ทผ์๊ฐ์ O(1)
LIFO ๋ฐฉ์ (๋์ค์ ๋ค์ด์จ๊ฒ ๋จผ์ ๋๊ฐ)
์์์ ์ฝ์ ๋ฐ ์ญ์ ๊ฐ ํ์ชฝ ๋์์๋ง ์ด๋ฃจ์ด์ง (์ด ๋ถ๋ถ์ top์ด๋ผ๊ณ ์นญํจ)
ํจ์ ํธ์ถ ์ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ณต๊ฐ์ ์คํ์ผ๋ก ์ฌ์ฉํจ
FIFO ๋ฐฉ์ (๋จผ์ ๋ค์ด์จ๊ฒ ๋จผ์ ๋๊ฐ)
์์์ ์ฝ์ ๋ฐ ์ญ์ ๊ฐ ์์ชฝ ๋์์ ์ผ์ด๋จ (front, rear)
FIFO ์ด์์ฒด์ , ์ํ ๋๊ธฐ์ด ๋ฑ์ ํด๋น
FIFO ๋ฐฉ์์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฑฐ๋ก ํ ์ฐ์ ์์๋ฅผ ํ๋จํ๊ณ , ์ฐ์ ์์๊ฐ ๋์ ๊ฒ๋ถํฐ ๋๊ฐ
๊ตฌํ ๋ฐฉ๋ฒ 3๊ฐ์ง (๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ํ)
๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅ
๋ฐ์ดํฐ ์ฝ์ ๋ฐ ์ญ์ ๊ณผ์ ์ ์งํ ์, O(N)์ผ๋ก ๋นํจ์จ ๋ฐ์ (ํ ์นธ์ฉ ๋น๊ธฐ๊ฑฐ๋ ๋ฐ์ด์ผํ๊ธฐ ๋๋ฌธ)
์ฝ์ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ฐฐ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํด์ผ ํจ (์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ๊ฒฝ์ฐ)
์ฝ์ ๋ฐ ์ญ์ O(1)
ํ์ง๋ง ์ฝ์ ์์น๋ฅผ ์ฐพ์ ๋๋ ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋นํจ์จ ๋ฐ์
ํ์ ์ 2๊ฐ์ง๋ฅผ ๋ชจ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ (๋ฐ๋ผ์ ์ฐ์ ์์ ํ๋ ๋๋ถ๋ถ ํ์ผ๋ก ๊ตฌํ)
ํ์ ์์ ์ด์งํธ๋ฆฌ์ ์ฑ์ง์ ๋ง์กฑํ๋ฏ๋ก, 1์ฐจ์ ๋ฐฐ์ด๋ก ํํ์ด ๊ฐ๋ฅํจ ( O(1)์ ์ ๊ทผ์ด ๊ฐ๋ฅ )
root index์ ๋ฐ๋ผ child index๋ฅผ ๊ณ์ฐํ ์ ์์
root index = 0
left index = index * 2 + 1
right index = index * 2 + 2
๋ฐ์ดํฐ์ ์ฝ์ ์ ํธ๋ฆฌ์ leaf node(์์์ด ์๋ ๋ ธ๋)๋ถํฐ ์์
์ฝ์ ํ, heapify ๊ณผ์ ์ ํตํด ํ์ ๋ชจ๋ ๋ถ๋ชจ-์์ ๋ ธ๋์ ์ฐ์ ์์์ ๋ง๊ฒ ์ค์ ๋จ (์ด๋, ๋ถ๋ชจ์ ์ฐ์ ์์๋ ์์์ ์ฐ์ ์์๋ณด๋ค ์ปค์ผ ํจ)
๋ฐ์ดํฐ์ ์ญ์ ๋ root node๋ฅผ ์ญ์ ํจ (์ฐ์ ์์๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ)
์ญ์ ํ, ๋ง์ง๋ง leaf node๋ฅผ root node๋ก ์ฎ๊ธด ๋ค heapify ๊ณผ์ ์ํ
์ฌ์ดํด์ด ์๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
์์ ์ด์งํธ๋ฆฌ ๊ธฐ์ค ๋์ด๋ logN
ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์
1.์ค์ ์ํ : left-root-right
2.์ ์ ์ํ : root-left-right
3.ํ์ ์ํ : left-right-root
4.๋ ๋ฒจ ์์ ์ํ : ๋ ธ๋๋ฅผ ๋ ๋ฒจ ์์๋ก ๋ฐฉ๋ฌธ (BFS์ ๋์ผํด ํ๋ก ๊ตฌํ ๊ฐ๋ฅ)
๋ ธ๋์ ์ผ์ชฝ์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค, ์ค๋ฅธ์ชฝ์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ๊ตฌ์ฑ
์ฝ์ ๋ฐ ์ญ์ , ํ์๊น์ง ์ด์์ ์ผ ๋๋ ๋ชจ๋ O(logN) ๊ฐ๋ฅ
๋ง์ฝ ํธํฅ๋ ํธ๋ฆฌ๋ฉด O(N)์ผ๋ก ์ต์ ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
ํจ์จ์ ํ์์ ์ํ ์๋ฃ๊ตฌ์กฐ
key - value ์์ผ๋ก ์ด๋ฃจ์ด์ง
ํด์ ํจ์๋ฅผ ํตํด ์ ๋ ฅ๋ฐ์ key๋ฅผ ์ ์๊ฐ(index)๋ก ๋์์ํด
์ถฉ๋(collision)์ ๋ํ ๊ณ ๋ ค ํ์
ํด์ ํ ์ด๋ธ์์ ์ค๋ณต๋ ๊ฐ์ ๋ํ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ํด๊ฒฐ๋ฐฉ์์ ์ธ์์ผ ํจ
์ถฉ๋์ด ์ผ์ด๋ ํญ๋ชฉ์ ํด์ ํ ์ด๋ธ์ ๋ค๋ฅธ ์์น์ ์ ์ฅ
์์)
ht[k], ht[k+1], ht[k+2] ...
โป ์ฝ์
์ํฉ
์ถฉ๋์ด ht[k]์์ ์ผ์ด๋ฌ๋ค๋ฉด, ht[k+1]์ด ๋น์ด์๋์ง ์กฐ์ฌํจ. ์ฐจ์์ผ๋ฉด ht[k+2] ์กฐ์ฌ ...
ํ
์ด๋ธ ๋๊น์ง ๋๋ฌํ๋ฉด ๋ค์ ์ฒ์์ผ๋ก ๋์์ด. ์์ ์์น๋ก ๋์์จ ๊ฒฝ์ฐ๋ ํ
์ด๋ธ์ด ๋ชจ๋ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ์
โป ๊ฒ์ ์ํฉ
ht[k]์ ์๋ ํค๊ฐ ๋ค๋ฅธ ๊ฐ์ด๋ฉด, ht[k+1]์ ๊ฐ์ ํค๊ฐ ์๋์ง ์กฐ์ฌํจ.
๋น์ด์๋ ๊ณต๊ฐ์ด ๋์ค๊ฑฐ๋, ๊ฒ์์ ์์ํ ์์น๋ก ๋์์ค๋ฉด ์ฐพ๋ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
์ ํ ์กฐ์ฌ๋ฒ์์ ๋ฐ์ํ๋ ์ง์ ํ ๋ฌธ์ ๋ฅผ ์ํ์์ผ ์ค
h(k), h(k)+1, h(k)+4, h(k)+9 ...
์ฌํด์ฑ(rehasing)์ด๋ผ๊ณ ๋ ํจ
์ถฉ๋๋ก ์ธํด ๋น์ด์๋ ๋ฒํท์ ์ฐพ์ ๋ ์ถ๊ฐ์ ์ธ ํด์ ํจ์ h'()๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
h'(k) = C - (k mod C)
์กฐ์ฌ ์์น
h(k), h(k)+h'(k), h(k) + 2h'(k) ...
๊ฐ ๋ฒํท์ ๊ณ ์ ๋ ๊ฐ์์ ์ฌ๋กฏ ๋์ , ์ ๋์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ์
์ถฉ๋ ๋ฟ๋ง ์๋๋ผ ์ค๋ฒํ๋ก์ฐ ๋ฌธ์ ๋ ํด๊ฒฐ ๊ฐ๋ฅ
๋ฒํท ๋ด์์ ํญ๋ชฉ์ ์ฐพ์ ๋๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ ์์ฐจ ํ์ ํ์ฉ
a = n / M
a = ์ ์ฌ ๋น์จ
n = ์ ์ฅ๋๋ ํญ๋ชฉ ๊ฐ์
M = ํด์ํ
์ด๋ธ ํฌ๊ธฐ
map ์ปจํ ์ด๋๋ ์ด์งํ์ํธ๋ฆฌ(BST)๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์ต๊ทผ์ ๋ ๋๋ธ๋ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ค
key ๊ฐ์ ์ด์ฉํด ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐฉ์์ โ ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๊ทผ, ์ฝ์ , ์ญ์ ๋ O( logN )
๋ฐ๋ฉด ํด์๋งต์ ํด์ํจ์๋ฅผ ํ์ฉํด O(1)์ ์ ๊ทผ ๊ฐ๋ฅ
ํ์ง๋ง C++์์๋ ํด์๋งต์ STL๋ก ์ง์ํด์ฃผ์ง ์๋๋ฐ, ์ถฉ๋ ํด๊ฒฐ์ ์์ด์ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๊ธฐ ๋๋ฌธ (ํด์ ํจ์๋ collision ์ ์ฑ ์ ๋ฐ๋ผ ์ฑ๋ฅ์ฐจ์ด๊ฐ ํผ)