๋ฐ์ํ
ํด์ ํ ์ด๋ธ(Hash Table)
- ํด์ ํ ์ด๋ธ์ (Key, Value)์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
- ํด์ํจ์(Hash Function)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํ ๊ฐ์ index๋ก ์ผ์
- ํด์ ํจ์(Hash Function)๋ฅผ ์ฌ์ฉํด Key ๊ฐ์ ์์ธ(index)์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ํด์ฑ(Hashing)์ด๋ผ๊ณ ํจ
- ๋ํ์ ์ธ ์๋ก ํ์ด์ฌ์ dictionary, ๋ฃจ๋น์ Hash, ์๋ฐ์ Map ๋ฑ์ด ์์
ํด์ ํ ์ด๋ธ์ ํน์ง
- ๊ธฐ๋ณธ ์ฐ์ฐ์ผ๋ก๋ search, insert, delete๊ฐ ์์
- ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์์
- key๋ฅผ ํตํด์ value๋ฅผ ์ป์ ์ ์์ => ์ด์งํ์ํธ๋ฆฌ๋ ๋ฐฐ์ด์ ๋นํด ์๋๊ฐ ๋น ๋ฆ
- ์ปค๋ค๋ ๋ฐ์ดํฐ๋ฅผ ํด์ํด์ ์งง์ ๊ธธ์ด๋ก ์ถ์ฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๋ ํจ์จ์
- value๋ ์ค๋ณต ๊ฐ๋ฅํ์ง๋ง key๋ ์ ๋ํฌํด์ผ ํจ
- ์์ ๊ฐ๋ฅ (mutable)
- ์ฝ์ , ์ญ์ ํ์ ์ ํ๊ท ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง
ํด์ ํจ์(Hash Function)
- ๊ณ ์ ํ ์ธ๋ฑ์ค ๊ฐ์ ์ค์
- ์์์ ๊ธธ์ด๋ฅผ ๊ฐ๋ ๋ฉ์์ง๋ฅผ ์ ๋ ฅ๋ฐ์์ ๊ณ ์ ๋ ๊ธธ์ด์ ํด์๊ฐ์ ์ถ๋ ฅํ๋ ํจ์
- ํด์ ํจ์๋ ์
๋ ฅ๊ฐ์ ๊ธธ์ด๊ฐ ์ด๋ป๋ ๊ณ ์ ๋ ๊ธธ์ด์ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ์
๋ ฅ๊ฐ์ด ๋ค๋ฅด๋๋ผ๋ ๊ฐ์ ๊ฒฐ๊ด๊ฐ์ด ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
- ํด์ ์ถฉ๋(hash collision)์ด๋ผ๊ณ ํํ
- ์ถฉ๋์ด ์ ์ ํด์ํจ์๊ฐ ์ข์ ํด์ ํจ์
- ๋ํ์ ์ธ ํด์ ํจ์
- Division Method
- Key๋ฅผ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋์ด ๋์จ ๋๋จธ์ง๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ (index = Key % ํ ์ด๋ธ ํฌ๊ธฐ)
- ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ์์(Prime Number)๋ก ์ ํ๊ณ 2์ ์ ๊ณฑ์์ ๋จผ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ๊ฐ ์ข์
- ex- Key ๊ฐ์ด 23์ผ ๋ ํ ์ด๋ธ ์ฌ์ด์ฆ๊ฐ 7์ด๋ผ๋ฉด index๋ 2
- Digit Folding
- ๊ฐ Key์ ๋ฌธ์์ด์ ASCII ์ฝ๋๋ก ๋ฐ๊พธ๊ณ ๊ทธ ๊ฐ์ ํฉํ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ ๋ด์ ์ฃผ์๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Multiplication Method
- ์ซ์๋ก ๋ Key๊ฐ K์ 0๊ณผ 1 ์ฌ์ด์ ์ค์ A, ๋ณดํต 2์ ์ ๊ณฑ์์ธ m์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ฐ์ ํจ
- index=(k*Amod1)*m
- Univeral Hashing
- ๋ค์์ ํด์ํจ์๋ฅผ ๋ง๋ค์ด ์งํฉ H์ ๋ฃ์ด๋๊ณ , ๋ฌด์์๋ก ํด์ํจ์๋ฅผ ์ ํํด ํด์๊ฐ์ ๋ง๋๋ ๊ธฐ๋ฒ
- Division Method
ํด์ ์ถฉ๋(Hash Collision)
- ํด์ ํจ์๋ฅผ ํตํด index๊ฐ์ ๊ตฌํ์ ๋ ์ค๋ณต์ด ์๊ธฐ๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์
- ์ถฉ๋์ด ๋ฐ์ํ์ ๋์ ํด๊ฒฐ๋ฒ์ผ๋ก ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ(Separate Chaining)๊ณผ ๊ฐ๋ฐฉ ์ฃผ์๋ฒ(Open Addressing) ๋ฑ์ด ์์
- ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ(Separate Chaining)
- ๋์ผํ ๋ฒํท(bucket)์ ๋ฐ์ดํฐ์ ๋ํด ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํธ๋ฆฌ ๋ฑ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๊ฒ
- ํ ๋ฒํท(์ฌ๋กฏ) ๋น ๋ค์ด๊ฐ ์ ์๋ ์ํธ๋ฆฌ์ ์์ ์ ํ์ ๋์ง ์์
- ํด์ ์ถฉ๋์ด ์ผ์ด๋๋๋ผ๋ linked list๋ก ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋๊ธฐ ๋๋ฌธ์ index๊ฐ ๋ณํ์ง ์๊ณ ๋ฐ์ดํฐ ๊ฐ์์ ์ ์ฝ์ด ์๋ค๋ ์ฅ์
- ํด์ ํ ์ด๋ธ์ ํ์ฅ์ด ํ์ ์๊ณ ๊ตฌํ์ด ๊ฐ๋จํ๋ฉฐ ์์๋ฅผ ์ฝ๊ฒ ์ญ์ ํ ์ ์๋ค๋ ์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ผ๋ฉฐ, ํ ์ด๋ธ์ ๋ถํ์จ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์ฑ๋ฅ์ด ์ ํ
- ๋ถํ์จ์ด ์์ ๊ฒฝ์ฐ์๋ open addressing ๋ฐฉ์์ด ๋น ๋ฆ
- ๊ฐ๋ฐฉ ์ฃผ์๋ฒ(Open Addressing)
- ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ chaining ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋น์ด์๋ ํด์ ํ ์ด๋ธ์ ๊ณต๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
- ํ ๋ฒํท ๋น ๋ค์ด๊ฐ ์ ์๋ ์ํธ๋ฆฌ๋ ํ๋์ด์ง๋ง ํด์ ํจ์๋ก ์ป์ ์ฃผ์๊ฐ ์๋, ๋ค๋ฅธ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ
- ๋ถํ์จ(load factor)์ด ๋์์๋ก(= ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ฐ๋๊ฐ ๋์์๋ก) ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ
- ๊ฐ๋ฐฉ ์ฃผ์๋ฒ ๋ฐฉ์
- ์ ํ ํ์ฌ๋ฒ(Linear Probing)
- ์ ํ์ผ๋ก ์์ฐจ์ ๊ฒ์์ ํ๋ ๋ฐฉ๋ฒ
- ํ์ฌ์ ๋ฒํท index๋ก๋ถํฐ ๊ณ ์ ํญ๋งํผ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ํน์ ํด์ ๊ฐ์ ์ฃผ๋ณ์ด ๋ชจ๋ ์ฑ์์ ธ ์๋ ์ผ์ฐจ ๊ตฐ์งํ(primary clustering) ๋ฌธ์ ์ ์ทจ์ฝ
- ํด์ ์ถฉ๋์ด ํด์ ๊ฐ ์ ์ฒด์ ๊ท ๋ฑํ๊ฒ ๋ฐ์ํ ๋ ์ ์ฉํ ๋ฐฉ๋ฒ
- ์ ๊ณฑ ํ์ฌ๋ฒ(Quadratic Probing)
- ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์
- ์๋ฅผ ๋ค์ด ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ 1๋งํผ ์ด๋ํ๊ณ , ๊ทธ๋ค์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด 2^2, 3^2 ์นธ ์ฉ ์ฎ๊ธฐ๋ ๋ฐฉ์
- ๋ฐ์ดํฐ์ ๋ฐ์ง๋๊ฐ ์ ํ ํ์ฌ๋ฒ๋ณด๋ค ๋ฎ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด์๊ฐ๊น์ง ์ํฅ์ ๋ฐ์์ ์ฐ์์ ์ผ๋ก ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ ์
- ์ ํ ํ์ฌ๋ฒ๋ณด๋ค๋ ์บ์์ ์ฑ๋ฅ์ด ๋จ์ด์ ธ์ ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์
- ์ด์ค ํด์ฑ(Double Hasing Probing)
- ํด์๋ ๊ฐ์ ํ ๋ฒ ๋ ํด์ฑํ์ฌ ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์(ํด๋ฌ์คํฐ๋ง ๋ฐฉ์ง)
- ํด์ ํจ์๋ฅผ ์ด์ค์ผ๋ก ์ฌ์ฉ, ํ๋๋ ์ต์ด์ ํด์๊ฐ์ ์ป์ ๋, ๋ค๋ฅธ ํ๋๋ ํด์ ์ถฉ๋์ด ์ผ์ด๋ฌ์ ๋ ํ์ฌ ์ด๋ํญ์ ์ป๊ธฐ ์ํด ์ฌ์ฉ
- ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ์๋ก์ด ์ฃผ์๋ฅผ ํ ๋นํ๋ฏ๋ก ๊ธฐ์กด ๋ฐฉ์๋ณด๋ค ๋ ๋ง์ ์ฐ์ฐ์ ํ๊ฒ ๋จ
- ์ต์ด ํด์๊ฐ์ด ๊ฐ๋๋ผ๋ ํ์ฌ ์ด๋ํญ์ด ๋ฌ๋ผ์ง๊ณ , ํ์ฌ ์ด๋ํญ์ด ๊ฐ๋๋ผ๋ ์ต์ด ํด์๊ฐ์ด ๋ฌ๋ผ์ ธ ์์ ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ํ ๊ฐ๋ฅ
- ์ ํ ํ์ฌ๋ฒ(Linear Probing)
๋ฐ์ํ
'๐ Computer Science > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ์ฐ์ ์์ ํ(Priority Queue) (0) | 2023.03.13 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ํ(Heap) (0) | 2023.03.13 |
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) (0) | 2023.03.09 |
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ(Graph) (0) | 2023.03.08 |
[์๋ฃ๊ตฌ์กฐ] Time Complexity (์๊ฐ ๋ณต์ก๋) (0) | 2023.03.07 |