๐Ÿ“–Hash Function

์ž„์˜ ํฌ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜

๐Ÿ“Ž๋กœ๋“œ ํŒฉํ„ฐ(Load Factor)

ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ n์„ ๋ฒ„ํ‚ท์˜ ๊ฐœ์ˆ˜ k๋กœ ๋‚˜๋ˆˆ ๊ฒƒ

  • ๋กœ๋“œ ํŒฉํ„ฐ ๋น„์œจ์— ๋”ฐ๋ผ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์žฌ์ž‘์„ฑํ•ด์•ผ ๋ ์ง€, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ• ์ง€๋ฅผ ๊ฒฐ์ •
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์€ ์ ์  ๊ฐ์†Œ

๐Ÿ“Žํ•ด์‹ฑ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

  • ์ •๋ณด๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•
  • ์ตœ์ ์˜ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ ๋ถ„์•ผ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

๐Ÿ“–Hash Table

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์–ป์€ ํ•ด์‹œ(key)๋ฅผ index๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํ•ด๋‹น index์— value๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ํŒŒ์ด์ฌ์˜ dictionary๊ฐ€ hash table๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ

๐Ÿ“ŽํŠน์ง•

  • key๋ฅผ value์— ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Œ
  • ์‚ฝ์ž…, ๊ฒ€์ƒ‰, ์‚ญ์ œ์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅ
  • ์†๋„๊ฐ€ ๋น ๋ฆ„

๐Ÿ“Ž์†๋„

AlgorithmAverageWorst
spaceO(n)O(n)
insertO(1)O(n)
searchO(1)O(n)
deleteO(1)O(n)
  • key-value๊ฐ€ 1:1 ๋งคํ•‘๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…, ๊ฒ€์ƒ‰, ์‚ญ์ œ ๊ณผ์ •์—์„œ ๋ชจ๋‘ ํ‰๊ท ์ ์œผ๋กœ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง

๐Ÿ“–์ถฉ๋Œ

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•ด์‹ฑํ•œ ํ•ด์‹œ ๊ฐ’์ด ์ค‘๋ณต์ธ ๊ฒฝ์šฐ

๐Ÿ“Žํ•ด๊ฒฐ๋ฐฉ๋ฒ•

1. Separate Chaining(๊ฐœ๋ณ„ ์ฒด์ด๋‹)

์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ, ํƒ์ƒ‰์˜ ์‹œ๊ฐ„์ด O(n)์ด ๋จ

Separate Chaining์€ ์–ด๋–ค ์›๋ฆฌ์ธ๊ฐ€์š”?

  1. ํ‚ค์˜ ํ•ด์‹œ ๊ฐ’์„ ๊ณ„์‚ฐ
  2. ํ•ด์‹œ ๊ฐ’์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•จ
  3. ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ

2. Open Addressing(์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ)

์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ํƒ์‚ฌ๋ฅผ ํ†ตํ•ด ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์•„๋‚˜์„œ๋Š” ๋ฐฉ์‹

  • ๋ชจ๋“  ์›์†Œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ž์‹ ์˜ ํ•ด์‹œ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ์— ์ €์žฅ๋œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Œ
  • ๋ฒ„ํ‚ท ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” ์‚ฝ์ž… ๋ถˆ๊ฐ€
  • ํŒŒ์ด์ฌ์˜ dictionary๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

Open Addressing์˜ ํƒ์‚ฌ ๋ฐฉ์‹์€?

์„ ํ˜• ํƒ์‚ฌ ์ฃผ๋กœ ์‚ฌ์šฉ

  1. ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์‚ฌ๋ฅผ ํ•˜๋‚˜์”ฉ ์ง„ํ–‰
  2. ํŠน์ • ์œ„์น˜๊ฐ€ ์„ ์ ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๊ทธ๋‹ค์Œ ์œ„์น˜๋ฅผ ํ™•์ธ
  3. ํƒ์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ณต๊ฐ„์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์‚ฝ์ž…

๐Ÿ“–์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ์˜ Hash Table

๋ธŒ๋ฃจํŠธ ํฌ์Šค(์™„์ „ ํƒ์ƒ‰)์œผ๋กœ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ์— ๋น ์ง€๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ