Problem Solving/Algorithm, DS

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ํƒ์ƒ‰๊ณผ ์ถฉ๋Œ (Hashing)

blackon29 2021. 2. 10. 13:17

๐Ÿ“‚ ํ•ด์‹œํ…Œ์ด๋ธ”

์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ํƒ์ƒ‰์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆ˜์‹œ๋กœ ํƒ์ƒ‰์ด ์ง„ํ–‰๋œ๋‹ค(ex. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ) ๋”ฐ๋ผ์„œ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ํƒ์ƒ‰์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ์ด์Šˆ์ด๋‹ค.

์›์†Œ๊ฐ€ ์ €์žฅ๋  ์ž๋ฆฌ๊ฐ€ ์›์†Œ์˜ ๊ฐ’์— ์˜ํ•ด ๋ฐ”๋กœ ๊ฒฐ์ •๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ → O(1) ์‹œ๊ฐ„์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ์‘๋‹ต์„ ์š”๊ตฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•

cf. ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ์›์†Œ์˜ ๊ฐ’์— ์˜ํ•ด ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜์ง€๋งŒ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•ด ๋‚ด๋ ค๊ฐ€๋Š” ์‹œ๊ฐ„์ด ์†Œ์š”๋จ

์ตœ์†Œ๊ฐ’, ํŠน์ •๊ฐ’ ๋ฐ”๋กœ ์ „/ํ›„์˜ ๊ฐ’ ๋“ฑ์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์—†์œผ๋ฉฐ ๊ทธ๋ƒฅ ํŠน์ •๊ฐ’์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„๋‚ด๊ธฐ๋งŒ ํ•˜๋Š” 'ํƒ์ƒ‰'์˜ ๊ธฐ๋Šฅ๋งŒ ํ•จ

 

ํ•ด์‹œํ…Œ์ด๋ธ”์—์„œ๋Š” ํ•ด์‹œํ•จ์ˆ˜ h(x) = (ax + b) mod p ๋ฅผ ์ด์šฉํ•ด ์›์†Œ๊ฐ€ ์ €์žฅ๋  ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•จ

  • h(x) = x mod 11
  • ๊ฐ’์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ฐฐ๋ถ„ํ• ์ˆ˜๋ก ์ข‹์Œ (๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ)

ํƒ์ƒ‰

  • 16์„ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด h(16) = 16 mod 11 = 5 ์ด๊ณ  ํ•ด๋‹น์นธ์— ๋“ค์–ด์žˆ์Œ
  • 27๋ฅผ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด h(27) = 27 mod 11 = 5 ์ด๊ณ  ํ•ด๋‹น์นธ์— ์—†์Œ
  • 27์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ 16๊ณผ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•จ → ์ถฉ๋Œ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ?

์ถฉ๋Œ

  • ํ•ด์‹œ์ฒด์ธ(hash chain) - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ํ•œ ์ธ๋ฑ์Šค์— ์—ฌ๋Ÿฌ๊ฐœ์˜ key๋ฅผ ์—ฐ๊ฒฐํ•ด ์ €์žฅํ•œ๋‹ค
  • ์„ ํ˜•์กฐ์‚ฌ : ์ถฉ๋Œ๋œ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•ด ๋นˆ์นธ์ด ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์นธ์œผ๋กœ ์ด๋™ํ•ด ์ €์žฅํ•˜๊ณ  ํƒ์ƒ‰ํ•œ๋‹ค 
  • ์ผ์ฐจ๊ตฐ์ง‘ : ํŠน์ • ์˜์—ญ์— ์›์†Œ๋“ค์ด ๋ชฐ๋ ค ํ•ด์‹œ์˜ ํšจ์œจ์ด ๋‚ฎ์•„์ง€๋Š” ๋ฌธ์ œ (= ํด๋Ÿฌ์Šคํ„ฐ๋ง = ์ ๋ฆผํ˜„์ƒ)
  • ์ด์ฐจ์›์กฐ์‚ฌ : ๋ฐ”๋กœ ๋‹ค์Œ ์นธ์ด ์•„๋‹Œ i^2 ์นธ์œผ๋กœ ์ด๋™ํ•ด ์ €์žฅํ•˜๊ณ  ํƒ์ƒ‰ํ•œ๋‹ค (์ผ์ฐจ๊ตฐ์ง‘ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ← ๋ถ„์‚ฐ์‹œํ‚ด)
  • ์ด์ฐจ๊ตฐ์ง‘ : x1=x2 ๋ผ๋ฉด h(x1)=h(x2)์ด๋ฏ€๋กœ ์–ด์จŒ๊ฑฐ๋‚˜ ๊ณ„์† ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•จ
  • ์ด์ค‘ํ•ด์‹ฑ : ์ผ/์ด์ฐจ๊ตฐ์ง‘ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค (์•„์˜ˆ ๋‹ค๋ฅธ ์ถฉ๋Œ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ํ•ด์‹œํ•จ์ˆ˜) = ๋ฆฌํ•ด์‹ฑ ๋ฐฉ๋ฒ•

์‚ญ์ œ

  • ๋‹จ์ˆœํžˆ ๋นˆ์นธ(NULL)์ด ์•„๋‹ˆ๋ผ DELETED ๋งˆํฌ๋ฅผ ํ‘œ์‹œํ•ด๋‘  (์„ ํ˜•์กฐ์‚ฌํ•œ ์›์†Œ์˜ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์•ผํ•˜๋ฏ€๋กœ)

๊ฒ€์ƒ‰์‹œ๊ฐ„

O(logn)์„ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์ด๋‚˜ O(logn)์˜ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‰๊ท ์ ์œผ๋กœ O(1) ์‹œ๊ฐ„์— ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งŒ์•ฝ ํ•ด์‹œ ์ฒด์ธ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ํ•œ ์ธ๋ฑ์Šค์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ, ํ‰๊ท ์ ์œผ๋กœ ํ•œ ์ธ๋ฑ์Šค๋‹น k๋งŒํผ์˜ ์›์†Œ๊ฐ€ ํฌํ•จ๋œ๋‹ค๋ฉด ํ‰๊ท  ๊ฒ€์ƒ‰์‹œ๊ฐ„์€ 1 + k ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. O(1+k) ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ๊ฒƒ.

์ด๋•Œ k > 0.5 ๋ผ๋ฉด ์ผ์ฐจ๊ตฐ์ง‘ ๋ฐœ์ƒ ํ™•๋ฅ ์ด ๋†’์•„์ง€๋Š”๋ฐ ์ด๋Š” ๋น„๋‘˜๊ธฐ์ง‘ ์›๋ฆฌ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๊ฒฝ์šฐ ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ๋Š˜๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ต์ˆ˜๋‹˜์ด ์—ฌ๊ธฐ์„œ ๋ถ„ํ• ์ƒ๊ฐ๊ธฐ๋ฒ•์„ ๋…ผ์˜ํ•  ๋•Œ ๋‹ค์‹œ ์–ธ๊ธ‰ํ•œ๋‹ค๊ณ  ํ•˜์…จ๋Š”๋ฐ..

๊ทธ๋ž˜์„œ ๋ถ„ํ• ์ƒ๊ฐ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์•„์ฃผ ์‚ด์ง ๊ณต๋ถ€ํ•ด๋ดค๋‹ค. ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์„œ