์ด์งํ์ํธ๋ฆฌ๋ ์ ๋ ฌ๋ ํธ๋ฆฌ์ด๋ค.
์ด๋ ๋ ธ๋๋ฅผ ์ ํํ๋ ํด๋น ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๊ณ , ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ ์ด์ง ํธ๋ฆฌ , ์ ์ฅ๊ณผ ๋์์ ์ ๋ ฌํ๋ค.
๊ฒ์, ์ ์ฅ, ์ญ์ ์ ์๊ฐ๋ณต์ก๋๋ ๋ชจ๋ O(logn)์ด๊ณ , worst case๋ ํ์ชฝ์ผ๋ก ์น์ฐ์น ํธ๋ฆฌ๊ฐ ๋์ ๋ O(n)์ด๋ค.
worst case๋ ํ์ชฝ์ผ๋ก ์น์ฐ์น ํธ๋ฆฌ์ธ๋ฐ, Linked List์ ๋ค๋ฅผ๊ฒ ์๋ค.
์๊ฐ ๊ท ํ BST๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด์ง ํธ๋ฆฌ์ ๊ท ํ์ด ์ ๋ง๋๋ก ์ ์งํ์ฌ ๋์ด๋ฅผ ๊ฐ๋ฅํ ๋ฎ๊ฒ ์ ์งํ๋ค. ๋ํ์ ์ผ๋ก AVLํธ๋ฆฌ์ Red-black tree๊ฐ ์๋ค.
ํจ์จ์ ์ธ ํ์(๋น ๋ฅธ ํ์)์ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก์จ key - value์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
hash function h ์ key๊ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฃ์ด ์ป์ ํด์๊ฐ h(k)๋ฅผ ์์น๋ก ์ง์ ํ์ฌ ์ ์ฅ
์ ์ฅ, ์ญ์ , ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๋ ๋ชจ๋ O(1)์ด๋ค.
๐ฅCollision ๋ฐ์
์๋ก ๋ค๋ฅธ key์ ํด์๊ฐ์ด ๋๊ฐ์ ๋ ๋ฐ์
์ฆ, ์ค๋ณต๋๋ key๋ ์์ง๋ง ํด์๊ฐ์ ์ค๋ณต ๋ ์ ์๋๋ฐ ์ด๋ Collision์ด ๋ฐ์ํ๋ค.
์ต๋ํ hash function์ ์ ์ค๊ณํด์ผํ๊ณ , ์ด์ฉ ์ ์์ด collision์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ separate chaining ์ด๋ open addressing๋ฑ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ค.
[ํด๊ฒฐ ๋ฐฉ๋ฒ]
Open addressing
๋ฏธ๋ฆฌ ์ ํ ๊ท์น์ ๋ฐ๋ผ hash table์ ๋น์ด์๋ slot์ ์ฐพ๋๋ค. ๋น ์ฌ๋กฏ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ Linear Probing, Quadratic Probing, Double Hashing์ผ๋ก ๋๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋ค.
Linear Probing & Quadratic Probing
์ถฉ๋์ด ๋ฐ์ํ ํด์๊ฐ์ผ๋ก ๋ถํฐ ์ผ์ ํ ๊ฐ๋งํผ ๊ฑด๋๋ฐ์ด ๋น์ด์๋ slot์ ์ ์ฅ
-> ํ์ฌ์ด๋ํญ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํน์ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์ง์ค์ ์ผ๋ก ๋ชฐ๋ฆฌ๋ ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Double Hashing
ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก 2๊ฐ์ ํด์ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
ํ๋๋ ์ต์ด์ ํด์๊ฐ์ ์ป์ ๋ ์ฌ์ฉ, ๋ค๋ฅธ ํ๋๋ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ๋ ํ์ฌ ์ด๋ํญ์ ์ป๊ธฐ ์ํด ์ฌ์ฉ
์ด๋ํญ์ด ๋ค๋ฅด๊ฒ ๋ฐ์
Separete chaining
Linked list๋ฅผ ํ์ฉํ์ฌ ๋ ธํธ(slot)์ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
โ [Worst Case]
โ n๊ฐ์ ๋ชจ๋ key๊ฐ ๋์ผํ ํด์๊ฐ์ ๊ฐ๊ฒ ๋๋ฉด ๊ธธ์ด n์ linked list๊ฐ ์์ฑ๋๊ฒ ๋๋ค.
โ ์ด๋, ํน์ key๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ๊ธธ์ด n์ linked list๋ฅผ ๊ฒ์ํ๋ O(n)์ ์ฌ๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๊ฒ ๋๋ค.