ํฌ์ŠคํŠธ

Hash-Table

Hash-Table

๐Ÿ’ซ @TODO


Hash
Hash Table

ํ•ด์‰ฌ ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ

Key(๋ฐ์ดํ„ฐ ์‹๋ณ„์ž), Value(๋ฐ์ดํ„ฐ์˜ ๋‚ด์šฉ)์ด ํ•œ ์Œ์„ ์ด๋ฃจ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์— ์ €์žฅ๋ผ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋ฏ€๋กœ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธ?
์„ ํ˜• ํƒ์ƒ‰
๋ฐ์ดํ„ฐ์–‘์— ๋น„๋ก€ํ•ด์„œ ๊ณ„์‚ฐ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚จ
๋ฐฐ์—ด ํƒ์ƒ‰์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ํƒ์ƒ‰์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ตฌ์กฐ

So,

  1. ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ, Key์— ํ•ด๋‹นํ•˜๋Š” ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐ
    • i.e. Joe -> 4928
  2. ๊ตฌํ•œ ํ•ด์‹œ๊ฐ’์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ (mod ์—ฐ์‚ฐ)
    • i.e. 4928 % 5 = 3
  3. ๊ณ„์‚ฐํ•œ ๊ฐ’ ์œ„์น˜์— ๋ฐ์ดํ„ฐ ์ €์žฅ
    • i.e. 3๋ฒˆ ์œ„์น˜์— ์ €์žฅ
  4. ๋ฐ˜๋ณต, ๋งŒ์•ฝ ์ค‘๋ณต๋œ ๊ฐ’์ด ๋‚˜์˜ค๋ฉด (์ถฉ๋Œ์ด๋ผ๊ณ  ํ•จ) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ตฌ์กฐ๋กœ ๊ธฐ์กด ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ (์—ฐ์‡„๋ฒ• Chaining์ด๋ผ๊ณ  ํ•จ)
  5. ๊ฒ€์ƒ‰ ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ mod ์—ฐ์‚ฐ ๊ฐ’์œผ๋กœ ์ฐพ์Œ, ์ถฉ๋Œ๋กœ ์ธํ•ด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ์œ„์น˜์ผ ๊ฒฝ์šฐ, ์„ ํ˜• ํƒ์ƒ‰ ์‹ค์‹œ

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด ๋‚ด์˜ ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
ํ•œํŽธ, ํ•ด์‹œ๊ฐ’์ด ์ถฉ๋Œํ•  ๋•Œ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋”๋ผ๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Œ

ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ๋ฐฐ์—ด ํฌ๊ธฐ
๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ์ถฉ๋Œ์ด ๋งŽ์•„์ง€๊ณ  -> ์„ ํ˜• ํƒ์ƒ‰์˜ ๋นˆ๋„๊ฐ€ ๋†’์•„์ง
๋„ˆ๋ฌด ์ปค์ง€๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ณต๊ฐ„์ด ๋งŽ์•„์ ธ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„

์ ์ ˆํ•œ ํฌ๊ธฐ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

์ถฉ๋Œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ์—ฐ์‡„๋ฒ• ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Œ

๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ• Open addressing
์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ํ›„๋ณด๊ฐ€ ๋  ์ฃผ์†Œ (๋ฐฐ์—ด ์ƒ์˜ ์œ„์น˜)๋ฅผ ๊ตฌํ•ด์„œ ๊ฑฐ๊ธฐ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
ํ•ด๋‹น ์ฃผ์†Œ์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋‹ค์Œ ํ›„๋ณด ์ฃผ์†Œ๋ฅผ ๊ตฌํ•˜๋ฉฐ ๋น„์–ด์žˆ๋Š” ๊ณณ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ๋ฒˆ ์ฃผ์†Œ๋ฅผ ๊ตฌํ•จ

๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ•˜๋Š” ๊ฐ€๋Š”
ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•œ๋‹ค๋˜์ง€, โ€˜์„ ํ˜• ํƒ์‚ฌโ€™ ๋“ฑ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Œ

ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ,
ํ•ด์‹œ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ์›๋ž˜ ๊ฐ’์„ ์ถ”์ธกํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ,
๋ณด์•ˆ์„ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ํ•„์ˆ˜์ ์ธ ์กฐ๊ฑด์€ ์•„๋‹˜

๋ฐ์ดํ„ฐ์˜ ์œ ์—ฐํ•œ ์ €์žฅ๊ณผ ๋น ๋ฅธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์€
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์—ฐ๊ด€ ๋ฐฐ์—ด Associative array๋“ฑ์— ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Œ

๐Ÿซง

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.