๐ ๊ด๋ จ ์ฉ์ด ์ ๋ฆฌ
Hash : ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ฒ ์ค ํ๋
Hash Table : ํค ๊ฐ์ ์ฐ์ฐ์ ์ํด ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ
Hash Functionย : ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์ ์์์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ํจ์
Hashing : ํค(key)์ ๊ฐ(value)์ผ๋ก ๋งคํ๋๋ ๊ณผ์ ์์ฒด
{: .notice}
Hashing
ํด์ฑ
์์์ ๋ฐ์ดํฐ๋ฅผ ํด์ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๊ฐ์ผ๋ก ๋ณํํ๋ ์์ ์ ๋งํ๋ค.
๐ก ํด์ฑ์ด ๋์ค๊ฒ ๋ ๋ฐฐ๊ฒฝ
๋๋ถ๋ถ์ ํ์ ๋ฐฉ๋ฒ๋ค์ ํ์ ํค๋ฅผ ์ ์ฅ๋ ํค๊ฐ๊ณผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํ๋ฉด์ ํ์์ ์ํ๋ ํญ๋ชฉ์ ์ ๊ทผํ๋ค. ๋ฐ๋ฉดย ํด์ฑ์ ํค ๊ฐ์ ์ง์ ์ฐ์ ์ ์ธ ์ฐ์ฐ์ ์ ์ฉํ์ฌ ํญ๋ชฉ์ด ์ ์ฅ๋์ด ์๋ย ํ
์ด๋ธ์ ์ฃผ์๋ฅผ ๊ณ์ฐํ์ฌ ํญ๋ชฉ์ ์ ๊ทผํ๋ค.
๋ค๋ฅธ ํ์ : ํค๋ค์ ๋น๊ต์ ์ํ ํ์์ ์ ๋ ฌ์ด ์ ๋์ด ์๋ค๋ฉด O(n)
์ด๊ณ ์ ๋ ฌ์ด ๋์ด ์๋ค๋ฉด O(logn)
์ด๋ค.
ํด์ฑ : ๋์ฑ ๋น ๋ฅธ ํ์์ ํ์๋ก ํ ๋์ ์ฌ์ฉ๋๋ค. ํด์ฑ์ ์ด๋ก ์ ์ผ๋ก O(1)
์ ์๊ฐ ์์ ํ์์ ๋๋ง์น ์๋ ์๋ค. ํด์ฑ์ ๋ณดํต ์ฌ์ (dictionary)๊ณผ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ๋์ ์ต์์ ์ ํ์ด ๋๋ค.
Hash Function
ํด์ ํจ์
์์์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผย ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ํจ์์ด๋ค. ํด์ ํจ์์ ์ํด ์ป์ด์ง๋ ๊ฐ์ ํด์ ๊ฐ, ํด์ ์ฝ๋, ํด์ ์ฒดํฌ์ฌ ๋๋ ๊ฐ๋จํ๊ฒ ํด์๋ผ๊ณ ํ๋ค.
Hashย Table
ํด์ ํ ์ด๋ธ
ํด์ฑ์ ์ฌ์ฉํ์ฌ (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ค๋ ํน์ง์ด ์๋ค.ย ํด์ ํ ์ด๋ธ์ด ๋น ๋ฅธ ๊ฒ์์๋๋ฅผ ์ ๊ณตํ๋ ์ด์ ๋, ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด(bucket)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค. ํด์ ํ ์ด๋ธ์ ๊ฐ๊ฐ์ key๊ฐ์ ํด์ ํจ์๋ฅผ ์ ์ฉํ์ฌย ๋ฐฐ์ด์ ๊ณ ์ ํ index๋ฅผ ์์ฑํ๊ณ , ์ด index๋ฅผ ํ์ฉํด ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฒ์ํ๊ฒ ๋๋ค. ์ค์ ๊ฐ์ด ์ ์ฅ๋๋ ์ฅ์๋ฅผ bucket(๋๋ Slot) ์ด๋ผ๊ณ ํ๋ค.
๐๐ฝ ์๋ ๋ฐ์ดํฐ์ย ๊ฐ(Key) โก Hash Function โก Hash Function์ ๊ฒฐ๊ณผ (=Hash Code) โกย Hash Code๋ฅผ ๋ฐฐ์ด์ย Index ๋ก ์ฌ์ฉ โก ํด๋นํ๋ Index์ data ๋ฃ๊ธฐ
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ (Key, Value)๊ฐ (โJohn Smithโ, โ521-1234โ)์ธ ๋ฐ์ดํฐ๋ฅผ ํฌ๊ธฐ๊ฐ 16์ธ ํด์ ํ ์ด๋ธ์ ์ ์ฅํ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ๋จผ์ index = hash_function(โJohn Smithโ) % 16 ์ฐ์ฐ์ ํตํด index ๊ฐ์ ๊ณ์ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ array[index] = โ521-1234โ ๋ก ์ ํ๋ฒํธ๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค.
์ด๋ฐ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค ๋ณด๋ฉด ๊ณ์ฐ๋ ์ธ๋ฑ์ค ๊ฐ์ด ์ค๋ณต๋ ์๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์ ์ฅํ๊ณ ์ ํ๋ ํค๊ฐ ์ ์์ด๊ณ hash_function์ด key%10์ด๋ค. ์ ์ฒด ์ฌ์ด์ฆ๊ฐ 10์ผ๋, key 1,11,21์ ๊ฐ์ ์ธ๋ฑ์ค ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.ย ์ถฉ๋ (collision)์ด๋ผ๊ณ ํ๋ค.
๐ ์ฅ์
-
์ ์ ๋ฆฌ์์ค๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
๐๐ฝ HDD, Cloud์ ์กด์ฌํ๋ ๋ง์ ๋ฐ์ดํฐ๋ค์ ์ ํํ ๊ฐ์ ํด์(Hash)๊ฐ์ผ๋ก ๋งคํํ์ฌ ์์ ํฌ๊ธฐ์ ์บ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ก ํ๋ก์ธ์ค ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.{: .notice}
- key-value ๊ฐ 1:1 ๋ก ๋งคํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฝ์
, ์ญ์ , ๊ฒ์์ ๊ณผ์ ์ด ๋ชจ๋ ํ๊ท ์ ์ผ๋ก
O(1)
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. - ์ค๋ณต์ ์ ๊ฑฐํ๋๋ฐ ์ ์ฉํ๋ค.
- ํค(key)์ ํด์๊ฐ(Hash)์ด ์ฐ๊ด์ฑ์ด ์์ด ๋ณด์์๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
-
๋ฐ์ดํฐ ์บ์ฑ(Data Caching)์ ๋ง์ด ์ฌ์ฉ๋๋ค.
๐๐ฝ get(key), put(key)์ ์บ์ ๋ก์ง์ ์ถ๊ฐํ๋ฉด ์์ฃผ hitํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฐพ์ ์ ์๋ค.
๐ ๋จ์
- ํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
- ์์/๊ด๊ณ๊ฐ ์๋ ๋ฐฐ์ด์๋ ์ด์ธ๋ฆฌ์ง ์๋๋ค.
- ๊ณต๊ฐ ํจ์จ์ฑ์ด ๋จ์ด์ง๋ค. -> ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ ์ฅ๊ณต๊ฐ์ ํ๋ณดํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- hash function์ ์์กด๋๊ฐ ๋๋ค => ํด์ํจ์๊ฐ ๋ณต์กํ ๊ฒฝ์ฐ ์ฐ์ฐ์๋ ์ฆ๊ฐ
Hash Function
ํด์ ํจ์
ํด์ ํจ์์์ ์ค์ํ ๊ฒ์ ๊ณ ์ ํ ์ธ๋ฑ์ค ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด๋ค. ํด์ ํ ์ด๋ธ์ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ํด์ ํจ์๋ก๋ ์๋์ 3๊ฐ์ง๊ฐ ์๋ค.
- Division Method : ๋๋์ ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฅ๊ฐ์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋์ด ๊ณ์ฐํ๋ค. (์ฃผ์ = ์ ๋ ฅ๊ฐ % ํ ์ด๋ธ์ ํฌ๊ธฐ)ย ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ์์๋ก ์ ํ๊ณ 2์ ์ ๊ณฑ์์ ๋จผ ๊ฐ์ ์ฌ์ฉํด์ผ ํจ๊ณผ๊ฐ ์ข๋ค๊ณ ์๋ ค์ ธ ์๋ค.
- Digit Folding : ๊ฐ Key์ ๋ฌธ์์ด์ ASCII ์ฝ๋๋ก ๋ฐ๊พธ๊ณ ๊ฐ์ ํฉํ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ ๋ด์ ์ฃผ์๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
-
Multiplication Method : ๊ณฑํ๊ธฐ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ซ์๋ก ๋ Key๊ฐ x์ 0๊ณผ 1์ฌ์ด์ ์ค์ A, ๋ณดํต 2์ ์ ๊ณฑ์์ธ m์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ฐ์ ํด์ค๋ค.
- Universal Hashing : ๋ค์์ ํด์ํจ์๋ฅผ ๋ง๋ค์ด ์งํฉ H์ ๋ฃ์ด๋๊ณ , ๋ฌด์์๋ก ํด์ํจ์๋ฅผ ์ ํํด ํด์๊ฐ์ ๋ง๋๋ ๊ธฐ๋ฒ์ด๋ค.
Collision
์ถฉ๋
์๋ก ๋ค๋ฅธ ๋ฌธ์์ด์ด Hash function์ ํตํด Hash ํ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ (์ค๋ณต๋๋ ๊ฒฝ์ฐ)์ด๋ค.์ถฉ๋์ ์ค์ฌ์ฃผ๋ ์ข์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์๋ํ๋ฉด ์ถฉ๋์ด ๋ง์์ง ์๋ก ํ์์ ์๊ฐ ๋ณต์ก๋๊ฐ O(1)์์ O(n)์ ๊ฐ๊น์์ง๊ธฐ ๋๋ฌธ์ด๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Separating Chaining - Linked List, Tree(Red-Black Tree)
- Open addressing - Linear Probing, Quadratic Probing, Double hashing
1. Separating Chaining
๋์ผํ ๋ฒํท์ ๋ฐ์ดํฐ์ ๋ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.ย ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋์ผํ ๋ฒํท์ผ๋ก ์ ๊ทผ์ ํ๋ค๋ฉด ๋ฐ์ดํฐ๋ค์ ์ฐ๊ฒฐ์ ํด์ ๊ด๋ฆฌํด์ฃผ๊ณ ์๋ค. ์ค์ ๋ก Java8์ Hashํ ์ด๋ธ์ Self-Balancing Binary Search Tree ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด Chaining ๋ฐฉ์์ ๊ตฌํํ์๋ค.
Separating Chaining์ JDK(Java Development Kit) ๋ด๋ถ์์๋ ์ฌ์ฉํ๊ณ ์๋ ์ถฉ๋ ์ฒ๋ฆฌ ๋ฐฉ์์ธ๋ฐ, ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํด๋ณด๊ฒ ๋ค. ์ด๋ ํ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ๋ Linked List์ Tree(Red-Black Tree)์ด๋ค.
๋ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์, data๊ฐ 6๊ฐ ์ดํ์ด๋ฉด linked list๋ฅผ ์ฌ์ฉํ๊ณ 8๊ฐ ์ด์์ด๋ฉด tree๋ฅผ ์ฌ์ฉํ๋ค. (์ 7๊ฐ๊ฐ ์๋๋ ์๋ฌธ์ด ๋ค ์ ์๋ค. ๋ง์ฝ 7๊ฐ์ผ ๋, ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฒ ๋๋ฉด linked list๋ก ๋ฐ๊ฟ์ผ ํ๊ณ ๋ง์ฝ ์ถ๊ฐ๋๋ฉด tree๋ก ๋ฐ๊ฟ์ผํ๋ค. ์ด๋ ๋ฐ๊พธ๋๋ฐ ์ค๋ฒํค๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์ค์ด 6, 8์ด๋ค.)
Separating Chaining - Linked list
์ ๊ทธ๋ฆผ์ Linked list๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ์ธ๋ฑ์ค๊ฐ ์ถฉ๋์ด ๋ ๋, ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ linked list์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์ ์ฝ์ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋๋ ํค์ ๋ํ ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ Linked list๋ฅผ ์ ํ ๊ฒ์ํ์ฌ, ํด๋น ํค์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ์ญ์ ํ๋ ๊ฒ๋ ๋น์ทํ๊ฒ, ํค์ ๋ํ ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ Linked list์์, ๊ทธ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ค. Separate changing ๋ฐฉ์์ Linked List ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ถ๊ฐํ ์ ์๋ ๋ฐ์ดํฐ ์์ ์ ์ฝ์ด ์๋ค.
์ด๋ฌํ Chaining ๋ฐฉ์์ ํด์ ํ ์ด๋ธ์ ํ์ฅ์ด ํ์์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฉฐ, ์์ฝ๊ฒ ์ญ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์๊ฐ ๋ง์์ง๋ฉด ๋์ผํ ๋ฒํท์ chaining๋๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ์บ์์ ํจ์จ์ฑ์ด ๊ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
2. Open addressing
์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Chaining ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋น์ด์๋ ํด์ ํ ์ด๋ธ์ ๊ณต๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ Separate chaining๋ฐฉ์์ ๋นํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํ๋ค. Open Addressing์ ๊ตฌํํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ 3๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
- Linear Probing
- Quadratic Probing
- Double Hashing Probing
1) Linear Probing
ํ์ฌ์ ๋ฒํท index๋ก๋ถํฐ ๊ณ ์ ํญ๋งํผ์ฉ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
Open addressing -ย Linear Probing
Linear Probing๋ฐฉ์์ ์ธ๋ฑ์ค๊ฐ ์ค๋ณต๋๋ ์ถฉ๋์ด ๋ฐ์ํ ๋ ์ธ๋ฑ์ค ๋ค์ ์๋ ๋ฒํท์ค์ ๋น ๋ฒํท์ ์ฐพ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค. ๊ทธ๋ฆผ์์ Sandra(key)์ ์ธ๋ฑ์ค๋ 152์ด๋ค. ํ์ง๋ง ํค John๊ณผ ์ถฉ๋์ด ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ค์ ์ธ๋ฑ์ค์ธ 153์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค.
Linear Probing ๋ฐฉ์์์์ ํ์์ Sandra(key)์ ๋ํด์ ๊ฒ์์ ํ๋ฉด, index๊ฐ 152์ด๊ธฐ ๋๋ฌธ์, key๊ฐ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค์ index๋ฅผ ๊ฒ์ํด์ ๊ฐ์ ํค๊ฐ ๋์ค๊ฑฐ๋ ๋๋ Key๊ฐ ์์๋ ๊น์ง ๊ฒ์์ ์งํํ๋ค. ์ญ์ ๋ ๋๋ฏธ ๋ ธ๋๋ฅผ ๋ฃ์ด์ ๊ฒ์ํ ๋ ๋ค์ ์ธ๋ฑ์ค๊น์ง ๊ฒ์์ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํด์ค์ผํ๋ค. (์ฆ, ์ญ์ ๊ฐ ์ด๋ ต๋ค.)
๐ก Dummy Node
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํ ํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋๋ฐ, ํ๋๋ ๋๋ฏธ ๋
ธ๋(Dummy Node)๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๊ณ ํ๋๋ ํค๋ ํฌ์ธํฐ(Head Pointer)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋๋ฏธ ๋
ธ๋๋, ๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ๋
ธ๋๊ฐ ์๋๋ผ ๋
ธ๋์ ์ถ๊ฐ/์ญ์ ๊ตฌํ์ ๊ฐํธ์ฑ์ ์ํด ์ฌ์ฉํ๋ ๋
ธ๋์ด๋ค. ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ์ญํ ๋ง์ ์ํํ๋ค. ๋ฐ๋ฉด ํค๋ ํฌ์ธํฐ๋, ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ค. ๋๋ฏธ ๋
ธ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์ข ๋ ๊ตฌํ์ด ํธํ๊ณ ๊ณ ๋ คํด์ผ ํ ์๊ฐ ์ ๋ค.
2) Quadratic Probing
ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ์๋ 1๋งํผ ์ด๋ํ๊ณ ๊ทธ ๋ค์ ๊ณ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด $2^2$, $3^2$ ์นธ์ฉ ์ฎ๊ธฐ๋ ๋ฐฉ์์ด๋ค.
3) Double Hashing Probing
ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ์๋ก์ด ์ฃผ์๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ณด๋ค ๋ง์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
๐ก Resizing
Separate chaning์ ๊ฒฝ์ฐ, ๋ฒํท์ด ์ผ์ ์์ค์ผ๋ก ์ฐจ ๋ฒ๋ฆฌ๋ฉด ๊ฐ ๋ฒํท์ ์ฐ๊ฒฐ๋์ด ์๋ List์ ๊ธธ์ด๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์, ๊ฒ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฒํท์ ๊ฐ์๋ฅผ ๋๋ ค์ค์ผ ํ๋ค. ๋ํ Open addressing์ ๊ฒฝ์ฐ, ๊ณ ์ ํฌ๊ธฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฃ๊ธฐ ์ํด์๋ ๋ฐฐ์ด์ ํ์ฅํด์ผ ํ๋ค. ์ด๋ฅผย ๋ฆฌ์ฌ์ด์ง(Resizing)์ด๋ผ๊ณ ย ํ๋ค.
๋ณดํต ๋ ๋ฐฐ๋ก ํ์ฅํ๋๋ฐ, ํ์ฅํ๋ ์๊ณ์ ์ ํ์ฌ ๋ฐ์ดํฐ ๊ฐ์๊ฐ ํด์ ๋ฒํท์ ๊ฐ์์ 75%๊ฐ ๋ ๋์ด๋ค. 0.75๋ผ๋ ์ซ์๋ load factor๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ๋ฆฌ์ฌ์ด์ง์ ๋ ํฐ ๋ฒํท์ ๊ฐ์ง๋ array๋ฅผ ์๋ก ๋ง๋ ๋ค์์, ๋ค์ ์๋ก์ด array์ hash๋ฅผ ๋ค์ ๊ณ์ฐํด์ ๋ณต์ฌํด์ค์ผ ํ๋ค.