Hash Table
๐ค Hash Table(ํด์ ํ ์ด๋ธ)์ด๋?โ
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ด๋ก ์ค Key์ Value๋ฅผ ์์ ์ด๋ค ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- Key ๊ฐ์ Hash Function์ ์ ๋ ฅํ์ฌ ๋์ถ๋ ๊ฐ(Hash Value)์ index๋ก ์ผ์ Table์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.

Key ๊ฐ์ Hash function์ ์ ๋ ฅํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ค.
๐ค Hash Table(ํด์ ํ ์ด๋ธ)์ ์ ์ธ๊น์?โ
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ Array์ ๋จ์ Index๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅํ๊ณค ํ๋๋ฐ Hash function์ ์ฌ์ฉํ์ฌ ํค๋ฅผ Mappingํ๋ฉด ์๊ฐ๋ณต์ก๋๋ฅผ ์ข ๋ ๋จ์ถ์ํฌ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
๋ณดํต ๋ณต์กํ Bruth-force ๋ฌธ์ ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค
- ํ์, ์ฝ์ , ์ญ์ ์ ๊ณผ์ ๋ชจ๋ O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. (ํ๊ท ์๊ฐ ๋ณต์ก๋ : O(1))
๐ค Hash Table(ํด์ ํ ์ด๋ธ)์ ๊ณผ์ ์?โ
- ํด๋น Key ๊ฐ์ Hash Function์ ํตํด Hash Table๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์ด ๋, ์ ๋ฌ๋๋ ๊ฐ์ Hash Table์ Index๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ฐฐ์ด๋ก ์ฌ์ฉํ๋, ์ธ๋ฑ์ค๋ฅผ Hash Function์ ํตํด ์ฌ์ฉํฉ๋๋ค.
Hash Function์ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆโ
- Division Method
- ๋๋์
์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์
๋ ฅ๊ฐ์ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋์ด ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค
(Index = Input % Table Size)
- ๋๋์
์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์
๋ ฅ๊ฐ์ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋์ด ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค
- Multiplication Method
- ์ซ์๋ก ๋ Key๊ฐ K์ 0๊ณผ 1 ์ฌ์ด์ ์ค์ A, ํน์ ์ ๊ณฑ์์ธ M์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์์ ํตํด ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
(h(K) = (K A mod 1) M)
- ์ซ์๋ก ๋ Key๊ฐ K์ 0๊ณผ 1 ์ฌ์ด์ ์ค์ A, ํน์ ์ ๊ณฑ์์ธ M์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์์ ํตํด ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- Universal Hashing
- ๋ค์์ ํด์ํจ์๋ฅผ ๋ง๋ค์ด ์งํฉ H์ ๋ฃ์ด๋๊ณ , ๋ฌด์์๋ก ํด์ํจ์๋ฅผ ์ ํํ์ฌ ํด์๊ฐ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ฅ Hash Table(ํด์ ํ ์ด๋ธ)์ ๋ฌธ์ ์ โ
Hash Function์ ๋ค๋ฅธ Key๊ฐ์ ๋ฃ์์ ๋, ๋์ผํ ๊ฒฐ๊ณผ๊ฐ์ ๋์ถํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋๋ค๋ฉด, ๋ค๋ฅธ Input์ ๋์ผํ Output์ ๋ด๋์ ์ ์์ต๋๋ค. ๐จ.
์ด๋ฅผ Hash Collision(ํด์ ์ถฉ๋)์ด๋ผ๊ณ ์ผ์ปซ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒโ
Separate Chaining
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฒํท์ ๊ฐ์ด ์์ผ๋ฉด, Linked List ํน์ Tree ๋ฐฉ์์ ์ฌ์ฉํด ํด๋น Value ๋ค์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋งจ ๋์ ์ฐ๊ฒฐํ์ฌ ์ ์ฅํ๋ ๋ฒ์ด ํต์ฌ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฒํท์ ๊ฐ์ด ์์ผ๋ฉด, Linked List ํน์ Tree ๋ฐฉ์์ ์ฌ์ฉํด ํด๋น Value ๋ค์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
Open Addressing
- Hash Table์์ ๋น์ด์๋ ๊ณต๊ฐ์ด ์๋ค๋ฉด ์ด๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ํ์ ์ธ ๋ฐฉ๋ฒ
Linear Probing

- ํ์ฌ์ Index๋ก๋ถํฐ ๊ณ ์ ํญ ๋งํผ์ฉ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๊ณต๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ฌธ์ ์
- Load Factor๊ฐ ์ปค์ง ์ ์์ต๋๋ค.
๋ค์ด๊ฐ์ผ ํ๋ Hash Value์ ํญ์ ๊ฐ์ด ์ฐจ์๋ค๋ฉด, ๊ณ์ ๋ฐ๋ฆฌ๊ณ ๋ฐ๋ ค์ ์๊ฐ์ด ๊ธ๊ฒฉํ๊ฒ ๊ฑธ๋ฆด ์๊ฐ ์์ต๋๋ค.
- Load Factor๊ฐ ์ปค์ง ์ ์์ต๋๋ค.
- Quadratic Probing

- ํ์ฌ์ Index๋ก๋ถํฐ ๊ณ ์ ํญ์ด ์๋, ๋ค์ ์นธ์ ์ ๊ณฑ์ ์ด์ฉํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํ์ฌ ๋น์ด ์๋ ๊ณต๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ฌธ์ ์
- ์ญ์ ๋ง์ฐฌ๊ฐ์ง๋ก Load Factor๊ฐ ์ปค์ง ์ ์์ต๋๋ค.
Cuckoo Hashing

- ๋ค์์ Table๊ณผ ๋ค์์ Hash Function์ ์ฌ์ฉํด ๋ณด๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๊ฐ ํ ์ด๋ธ๋ง๋ค Hash Function์ด ๋ค๋ฅด๊ฒ ์ ์ฉ๋ฉ๋๋ค.
- ์ญ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น์นธ์ ์ฐพ์ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- ์ด๋ ๊ฒ Hash Coliision๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ๋ค์ ๊ณต๊ฐ์ ๋ง์ด ์ฌ์ฉํ๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
- ๋ํ, Hash Table์ C++์ Vector๋ LinkedList์ฒ๋ผ ํ์ฅํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ง๋ค๊ฒ ๋๋ค๋ฉด ํจ์จ์ด ์ข์ง ์์ต๋๋ค.
- ํญ์ ํ ์ด๋ธ์ ์ค๊ณํ ๋ ๊ฐ๊ธ์ ํ์ฅ์ ํ์ง ์๋๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค.
- ํ ์ด๋ธ์ ๊ณต๊ฐ์ฌ์ฉ๋ฅ ์ด 80% ์ด์์ด๋ผ๋ฉด, ํด์ ์ถฉ๋์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋๋ค๊ณ ํฉ๋๋ค.