[CS] ํ•ด์‹œ(Hash)

giggleยท2023๋…„ 8์›” 24์ผ
0

๐Ÿ“Œ ํ•ด์‹œ(Hash)

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ๊ฒ€์ƒ‰๊ณผ ์ €์žฅ์ด ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  key ์™€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ํ•œ ์Œ์œผ๋กœ ์กด์žฌํ•˜๊ณ , key ๊ฐ’์ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰๊ณผ ์ €์žฅ์˜ ํ‰๊ท ์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1) ์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ•จ์ˆ˜

  • ๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์  ๊ด€๋ฆฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋งคํ•‘ ์ „ ์›๋ž˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ key, ๋งคํ•‘ ํ›„ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ํ•ด์‹œ ๊ฐ’(value)๋ผ๊ณ  ํ•˜๋ฉฐ,
  • ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ • ์ž์ฒด๋ฅผ ํ•ด์‹ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๊ฒŒ ๋œ๋‹ค๋ฉด, ๋‹ค๋ฅธ key ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ์ธํ•ด ์ถฉ๋Œ(Collision) ๋‚˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค๋ฅผ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜๊ณ , ํ•ด์‹œ ๊ฐ’์„ index ๋‚˜ ์ฃผ์†Œ ์‚ผ์•„ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ํ‚ค์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ์ถฉ๋Œ๋‚˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. -> 'collision' ํ˜„์ƒ

๐Ÿ“Œ ํ•ด์‹œ ์ถฉ๋Œ

์ถฉ๋Œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์ ์€ ์ž์›์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜๋“œ๋””์Šคํฌ๋‚˜ ํด๋ผ์šฐ๋“œ์— ์กด์žฌํ•˜๋Š” ๋ฌดํ•œ์— ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ(key)๋“ค์„ ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•จ์œผ๋กœ์จ ์ž‘์€ ํฌ๊ธฐ์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์–ธ์ œ๋‚˜ ๋™์ผํ•œ ํ•ด์‹œ ๊ฐ’์„ return ํ•˜๊ณ , ํ•ด๋‹น index ๋งŒ ์•Œ๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ์— ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋“œ๋””์Šคํฌ๋‚˜, ํด๋ผ์šฐ๋“œ์— ์กด์žฌํ•˜๋Š” ๋ฌดํ•œํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜๋ฉด ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋„ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’ ๋ฆฌํ„ด, index๋ฅผ ์•Œ๋ฉด ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์‹œ๊ฐ„๋ณต์žก๋„ O(1) - (์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋Š” O(logN))

์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ


์ฒด์ด๋‹ (Chaining)
์ฒด์ด๋‹์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฐ ๋ฒ„ํ‚ท๋งˆ๋‹ค ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(๋˜๋Š” ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถฉ๋Œ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ : ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋ฉฐ, ๋™์ ์ธ ํฌ๊ธฐ ์กฐ์ ˆ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
๋‹จ์ : ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ผํ•œ ๋ฒ„ํ‚ท์— ๋ชจ์ด๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ (Open Addressing)
์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ์€ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋‚ด ๋‹ค๋ฅธ ์œ„์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์„œ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ์•„๋ณด๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
์„ ํ˜• ํƒ์‚ฌ, ์ œ๊ณฑ ํƒ์‚ฌ ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์„ ํ˜• ํƒ์‚ฌ (Linear Probing)
์„ ํ˜• ํƒ์‚ฌ๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ณ„์†ํ•ด์„œ ๋‹ค์Œ ์œ„์น˜๋กœ ์ด๋™ํ•˜๋ฉฐ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ •ํ•ด์ง„ ๊ณ ์ • ํญ์œผ๋กœ ์˜ฎ๊ฒจ ํ•ด์‹œ๊ฐ’์˜ ์ค‘๋ณต์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ : ๊ตฌํ˜„์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
๋‹จ์ : ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์ผ๋ถ€ ๋ฒ„ํ‚ท์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ณฑ ํƒ์‚ฌ (Quadratic Probing)
์ œ๊ณฑ ํƒ์‚ฌ๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ผ์ • ๊ฐ„๊ฒฉ๋งŒํผ ์ด๋™ํ•˜๋ฉฐ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ •ํ•ด์ง„ ๊ณ ์ • ํญ์„ ์ œ๊ณฑ์ˆ˜๋กœ ์˜ฎ๊ฒจ ํ•ด์‹œ๊ฐ’์˜ ์ค‘๋ณต์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ : ์„ ํ˜• ํƒ์‚ฌ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฌธ์ œ๋ฅผ ์–ด๋Š ์ •๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ : ํŠน์ • ํŒจํ„ด์—์„œ๋Š” ๊ฐ™์€ ์œ„์น˜๋ฅผ ๊ณ„์†ํ•ด์„œ ํƒ์‚ฌํ•  ์ˆ˜ ์žˆ์–ด ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ 


ํ”ผ๋“œ๋ฐฑ ๋ฐ ๊ฐœ์„ ์ ์€ ๋Œ“๊ธ€์„ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”๐Ÿ˜Š

profile
๋ฐฐ์›€์„ ๊ธ€๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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