๐ŸŒˆ ์ž๋ฃŒ๊ตฌ์กฐ:: ํ•ด์‹œ(Hash)

Aprilยท2021๋…„ 11์›” 11์ผ
0
post-thumbnail

๐Ÿš€ What I Will Learn

  • ํ•ด์‹œ(Hash)์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ
  • ํ•ด์‹œ๊ฐ€ ํ™œ์šฉ๋˜์—ˆ์„ ๋•Œ ํšจ๊ณผ์ ์ธ?! ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ธฐ

ํ•ด์‹œ(Hash)๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ๋Œ€ํ•œ ๋น ๋ฅธ ์†๋„๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ


ํ•ด์‹œ(Hash)


1๏ธโƒฃ ํ•ด์‹œ(Hash)๋ž€?

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

โœ”๏ธ ํ•ด์‹œ(Hash)์˜ ์›๋ฆฌ

  • ์˜ˆ์‹œ)
    • ํŠน์ •ํ•œ ๊ฐ’ n์ด ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ 10์„ ๋‚˜๋ˆˆ ๊ฐ’์„ Key๋กœ ์ ‘๊ทผ

  • ํŠน์ •ํ•œ ๊ฐ’(Value)๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ๋Š” ๊ทธ ๊ฐ’์˜ ํ‚ค(Key)๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๋ชจ๋“ˆ ๋“ฑ์˜ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ
  • O(1)๋งŒ์— ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

โœ”๏ธ ํ•ด์‹œ(Hash)์˜ ์ถฉ๋Œ

  • ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ๋Š” ์–ด๋– ํ•œ ๊ฐ’ ๋“ฑ ๋ชจ๋‘ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ
  • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ์ƒ์„ฑ๋˜๋Š” ํ‚ค(Key)์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ํ•œ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค(Key) ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค
  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ํ‚ค(Key)๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ ์ถฉ๋Œ(Collision)์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค


โœ”๏ธ ํ•ด์‹ฑ(Hashing)

  • ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‚˜๋ˆ—์…ˆ ๋ฒ•(Division Method)์ด ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋œ๋‹ค
  • ์ž…๋ ฅ ๊ฐ’์„, ๋ฐ์ด๋ธ”์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ํ‚ค(Key)๋กœ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹
  • ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ์†Œ์ˆ˜(Prime Number)๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์„ฑ์ด ๋†’๋‹ค



2๏ธโƒฃ ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค

1) ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ์œ„์น˜์— ์ €์žฅ

: ์ถฉ๋Œ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ•ญ๋ชฉ์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ์œ„์น˜์— ์ €์žฅ

  • ์„ ํ˜• ์กฐ์‚ฌ๋ฒ•, ์ด์ฐจ ์กฐ์‚ฌ๋ฒ• ๋“ฑ

(1) ์„ ํ˜• ์กฐ์‚ฌ๋ฒ•

  • ํ•ด๋‹น ์ž๋ฆฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ๋‹ค์Œ ์ž๋ฆฌ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
  • ๊ทธ ๋‹ค์Œ ์ž๋ฆฌ์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋˜ ๊ทธ ๋‹ค์Œ ์ž๋ฆฌ์— ์ถ”๊ฐ€

  • ์„ ํ˜• ์กฐ์‚ฌ๋ฒ•์˜ ๋‹จ์ 
    • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด, ์œ ์‚ฌํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ ์„œ๋กœ ๋ฐ€์ง‘๋˜๋Š” ์ง‘์ค‘ ๊ฒฐํ•ฉ ๋ฌธ์ œ๊ฐ€ ์กด์žฌ
    • [ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ]๊ฐ€ ๋น„์•ฝ์ ์œผ๋กœ ํฌ๋‹ค๋ฉด, ๋‹ค์‹œ ๋งํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์†Œ๋ชจํ•œ๋‹ค๋ฉด ์ถฉ๋Œ์ด ์ ๊ฒŒ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋งค์šฐ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ
    • ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ํ•œ์ •์ ์ด๋ฏ€๋กœ ์ถฉ๋Œ์ด ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ๋ฐœ์ƒํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค

(2) ์ด์ฐจ ์กฐ์‚ฌ๋ฒ•

  • ์„ ํ˜• ์กฐ์‚ฌ๋ฒ•์„ ์•ฝ๊ฐ„ ๋ณ€ํ˜•ํ•œ ํ˜•ํƒœ๋กœ ํ‚ค ๊ฐ’์„ ์„ ํƒํ•  ๋•Œ ์™„์ „ ์ œ๊ณฑ์ˆ˜๋ฅผ ๋”ํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹
    • ํ•ด๋‹น ์ž๋ฆฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด 1์ œ๊ณฑํ•œ ๊ฐ’์„ ๋”ํ•œ ์œ„์น˜์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
    • ๋˜ ํ•ด๋‹น ์ž๋ฆฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด 2์ œ๊ณฑํ•œ ๊ฐ’์„ ๋”ํ•œ ์œ„์น˜์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

๐Ÿ”น ์กฐ์‚ฌ๋ฒ•์˜ ํ…Œ์ด๋ธ” ํฌ๊ธฐ ์žฌ์„ค์ •

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์„ ํ˜• ์กฐ์‚ฌ๋ฒ•, ์ด์ฐจ ์กฐ์‚ฌ๋ฒ• ๋“ฑ์˜ ์กฐ์‚ฌ๋ฒ•์—์„œ ํ…Œ์ด๋ธ”์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค

2) ๋ฒ„ํ‚ท(Bucket)์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ญ๋ชฉ์„ ์ €์žฅ

: ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท(Bucket)์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ญ๋ชฉ์„ ์ €์žฅ

  • ์ฒด์ด๋‹(Chaining) ๋“ฑ

(3) ์ฒด์ด๋‹(Chaining)

  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด ํŠน์ •ํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ํ•ญ๋ชฉ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ €์žฅ
  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์šฉ์ด
  • ํ…Œ์ด๋ธ” ํฌ๊ธฐ ์žฌ์„ค์ • ๋ฌธ์ œ๋Š” ๋™์  ํ• ๋‹น์„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ
    • ๋™์  ํ• ๋‹น์„ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์†Œ์š”๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค




โœจ tl;dr

  • ํ•ด์‹œ(Hash)๋Š” ์ด๋ก ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์— ์žˆ์–ด์„œ ๐‘‚(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค
  • ํ•ด์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ ๋ฐ ์ •๋ณด๋ณด์•ˆ ๊ด€๋ จ ๋ชจ๋“ˆ ๋“ฑ์—์„œ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค

์‹œ๊ฐ„๋ณต์žก๋„: ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ์˜ ํ•จ์ˆ˜ ๊ด€๊ณ„.
์ปดํ“จํ„ฐ๊ณผํ•™์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ž…๋ ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ํ•จ์ˆ˜๋กœ์„œ ์ž‘๋™ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ทจํ•ด ์‹œ๊ฐ„์„ ์ •๋Ÿ‰ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

profile
๐Ÿš€ ๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ์“ฐ๋Š” ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€