๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[์ž๋ฃŒ๊ตฌ์กฐ] ํ•ด์‹œ ์ถฉ๋Œ Hash Collision

์ถœ์ฒ˜

https://ryu-e.tistory.com/87

 

ํ•ด์‹œ(Hash)์™€ ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. ํ•ด์‹œ๋ž€? ๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ๊ธธ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ ํ•ด์‹œ ํ•จ์ˆ˜: ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์„

ryu-e.tistory.com

 

https://www.geeksforgeeks.org/introduction-to-hashing-2/

 

Introduction to Hashing - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

ChatGPT

 

 


ํ•ด์น˜ ์ถฉ๋Œ์„ ๋งํ•˜๊ธฐ ์ „ ์•Œ์•„์•ผํ•  ๊ฐœ๋…๋“ค 

ํ•ด์‹œ๋ž€  Hash

์ž„์˜์˜ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•œ ๊ฐ’. ํ•ด์‹œ ๊ฐ’์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ํ•ด๊ธฐ ์ฝ”๋“œ๋ผ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

ํ•ด์‹ฑ์ด๋ž€ Hashing

์ž„์˜์˜ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ๋ฐ›์•„ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ • ๋˜๋Š” ๋ฐฉ๋ฒ•. 

ํ•ด์‹œ ํ•จ์ˆ˜๋ž€ Hash Function

์ž„์˜์˜ ํฌ๊ธฐ์˜ ์ž…๋ ฅ๊ฐ’(์˜ˆ: ๋ฌธ์ž์—ด, ์ •์ˆ˜)์„ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

  • ๋ชฉํ‘œ : ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ๊ฐ’์ด ๊ณ ์œ ํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ํ•œ๋‹ค.
    • ๊ทธ๋ž˜์„œ ๋™์ผํ•œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๊ฒƒ์„ ์™„๋ฒฝํžˆ ๋ณด์žฅํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ ๊ฐ’์˜ ํ•ด์‹œ๊ฐ’๋“ค์ด ๋™์ผํ•œ ์ƒํ™ฉ์„ ํ•ด์‹œ ์ถฉ๋Œ์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ž€ Hash Table

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

 

๐Ÿค” ๋ฐฐ์—ด์€ ์—ฐ์†๋œ ์ €์žฅ๊ณต๊ฐ„์ด๊ณ , Java๋Š” ํ•ด์‹œ๊ฐ’์„ ์ •์ˆ˜๋กœ ์“ฐ๋‹ˆ๊นŒ, JVM์•ˆ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ •์ˆ˜ ํฌ๊ธฐ๋งŒํผ Hash Table์ด ํ• ๋‹น๋˜์–ด์•ผ ํ•˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?

๐Ÿ’ก ์•„๋‹ˆ๋‹ค. ํ•ด์‹œ์ฝ”๋“œ์˜ ๋ฒ”์œ„ ์ „์ฒด๊ฐ€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋กœ ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํ•ด์‹œ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 32๋น„ํŠธ ์ •์ˆ˜(์ž๋ฐ”์—์„œ๋Š” int)์ด๋ฏ€๋กœ, ๋ชจ๋“  ์ •์ˆ˜์˜ ๋ฒ”์œ„(์•ฝ 43์–ต ๊ฐœ)๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—„์ฒญ๋‚œ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. ๋Œ€์‹ , ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ๋ณดํ†ต ์ ์ ˆํ•œ ํฌ๊ธฐ๋กœ ์„ค์ •๋˜๊ณ , ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ํ…Œ์ด๋ธ” ํฌ๊ธฐ์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 

 

์ž๋ฐ”์—์„œ ํ•ด์‹œ์ฝ”๋“œ์™€ ํ…Œ์ด๋ธ” ํฌ๊ธฐ์˜ ๊ฐ„์˜ ๊ด€๊ณ„

1. ํ•ด์‹œ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ๋ณ€ํ™˜

  • ์ž๋ฐ”์—์„œ ๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ๋Š” int ํƒ€์ž…์œผ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์ด๋Š” 32๋น„ํŠธ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.
  • ํ•ด์‹œ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์ •์ˆ˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ๋ณดํ†ต ์ด๋ฅผ ํ›จ์”ฌ ์ž‘์€ ๊ฐ’์œผ๋กœ ์ œํ•œํ•œ๋‹ค.

2. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์™€ ์ธ๋ฑ์Šค ๊ฒฐ์ •

  • ์‹ค์ œ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด๋‹ค. ์ด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ณดํ†ต ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์†Œ์ˆ˜(์˜ˆ: 101, 1009 ๋“ฑ)๋กœ ์„ค์ •๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์–‘์— ๋‹ค๋ผ ๋™์ ์œผ๋กœ ์กฐ์ •๋˜๊ธฐ๋„ ํ•œ๋‹ค.
  • ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด, ๋ณดํ†ต ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ(%)์„ ์‚ฌ์šฉํ•ด ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์— ๋งž๋Š” ์ธ๋ฑ์Šค๋กœ ์ €์žฅํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ 100์ด๋ผ๋ฉด, hashcode % 100์„ ํ†ตํ•ด ํ•ด์‹œ์ฝ”๋“œ๋ฅผ 0์—์„œ 99์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

 3. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์˜ ํšจ์œจํ™”

  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ํ‚ค์˜ ํ•ด์‹œ๊ฐ’๊ณผ ๋‹ค๋ฅด๋ฉฐ, ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ํ•ด์‹œ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์Šฌ๋กฏ์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
    • ์Šฌ๋กฏ slot : ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ณ„์ ์ธ ์ €์žฅ ๊ณต๊ฐ„. ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜์™€ ๋™์ผํ•œ ๊ฐœ๋…
  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ค์ œ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์™€ ์ถฉ๋Œ์˜ ๋นˆ๋„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„ค์ •๋˜๋ฉฐ, JVM์€ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ํŠนํžˆ, ํ•ด์‹œ์ฝ”๋“œ ์ „์ฒด ๋ฒ”์œ„๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ํšจ์œจํ™”ํ•œ๋‹ค.

 

๐Ÿค” ํ•ด์‹œ ํ…Œ์ด๋ธ”๊ณผ ํ•ด์‹œ๋งต์€ ๋ญ๊ฐ€ ๋‹ค๋ฅด์ง€?

ํŠน์ง• ํ•ด์‹œ ํ…Œ์ด๋ธ” Hash Table ํ•ด์‹œ๋งต HashMap
์—ญ์‚ฌ์  ๋ฐฐ๊ฒฝ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ•ด์‹œ ํ•จ์ˆ˜์™€ ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ•œ ๊ตฌํ˜„์ฒด์ด๋‹ค. ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ตฌ์ฒด์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ํด๋ž˜์Šค๋‚˜ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
ํ‘œํ˜„ ๋ฐฉ์‹
์‚ฌ์šฉ ๊ด€์ 
์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด์™€ ๊ธฐ์ˆ ์ ์ด ๋™์ž‘์„ ์„ค๋ช…ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ํŠน์ • ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ตฌํ˜„๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์šฉ์–ด์ด๋‹ค.

 

 

ํ•ด์‹œ ์ถฉ๋Œ์ด๋ž€ Hash Collision

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ์„ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ๊ฐ’์ด ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒƒ.

ํ•ด์‹œ ์ถฉ๋Œ์˜ ๋ฐœ์ƒ ํ™•๋ฅ ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํฌ๊ธฐ, ํ•ด์‹œ ๊ฐ’์˜ ๋ถ€ํฌ ๋ฐ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ํšจ์œจ์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ƒˆ๋กœ ์ž…๋ ฅ๋ฐ›์€ ํ‚ค์˜ ํ•ด์‹œ๊ฐ’์ด ์ด๋ฏธ ์ ์œ ๋œ ์Šฌ๋กฏ์œผ๋กœ ๋งคํ•‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

ํ•ด์‹œ ์ถฉ๋Œ์„ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ•ด์‹œ ์ถฉ๋Œ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์˜ˆ๋ฐฉํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๋ฐœ์ƒ ํ™•๋ฅ ์„ ์ค„์ผ ์ˆ˜๋Š” ์žˆ๋‹ค.

1. ์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์„ค๊ณ„

๐Ÿค” ์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์–ด๋–ค ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‚˜?

1. ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋Šฅํ•œ ๋น ๋ฅด๊ฒŒ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

2. ํ‚ค๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•ด์•ผ ํ•œ๋‹ค. (๊ฐ ํ…Œ์ด๋ธ” ์œ„์น˜๊ฐ€ ๋™์ผํ•œ ํ™•๋ฅ ์„ ๊ฐ–๋Š”๋‹ค.)

  • ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ž…๋ ฅ๊ฐ’๋ฐ ๋Œ€ํ•ด ํ•ด์‹œ๊ฐ’์ด ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.

3. ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•œ๋‹ค.

  • ๋น„์Šทํ•œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ๋น„์Šทํ•œ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. 

4. ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ๋‚ฎ์•„์•ผ ํ•œ๋‹ค.

  • ๋กœ๋“œ ํŒฉํ„ฐ load factor : ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๊ฐ’.
  • ๋กœ๋“œ ํŒฉํ„ฐ = ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์ด ๋ฐ์ดํ„ฐ ์ˆ˜ / ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ
  • ๋กœ๋“œ ํŒฉํ„ฐ๋กœ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ : ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ๋นฝ๋นฝํ•˜๊ฒŒ ์ฑ„์›Œ์ ธ ์žˆ๋Š”์ง€. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ง€ํ‘œ์ด๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ํŠน์ • ๊ธฐ์ค€ ์ด์ƒ(์˜ˆ: 0.7~0.75 ์ด์ƒ)์ด ๋˜๋ฉด, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฌ๋Š” ์žฌํ•ด์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • ์žฌํ•ด์‹ฑ : ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์ถฉ๋Œ๋กœ ์ธํ•ด ํšจ์œจ์ด ๋–จ์–ด์ง€๊ฑฐ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง„ ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ๋” ํฐ ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์žฌํ•ด์‹ฑ์˜ ์žฅ์  : ํ•ด์‹œ ์ถฉ๋Œ์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์žฌํ•ด์‹ฑ์˜ ๋‹จ์  : ์žฌํ•ด์‹ฑ ๊ณผ์ •์—์„œ ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•ด ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์†Œ๋ชจ๋œ๋‹ค. 
  • ๋‚ฎ์€ ๋กœ๋“œ ํŒฉํ„ฐ : ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋งŽ์€ ๋นˆ ์Šฌ๋กฏ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์ง€๊ณ  ํƒ์ƒ‰ ์„ฑ๋Šฅ์ด ์ข‹์•„์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋†’์€ ๋กœ๋“œ ํŒฉํ„ฐ : ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง€๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

2. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ ์กฐ์ •

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ธ€ ์ ์ ˆํžˆ ํฐ ์†Œ์ˆ˜๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.

๐Ÿค” ์™œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์†Œ์ˆ˜๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“œ๋‚˜?

๐Ÿ’ก ์†Œ์ˆ˜์˜ ํŠน์ง•์œผ๋กœ ์ธํ•ด ๊ณ ๋ฅธ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ง„๋‹ค. + ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์˜ ๊ท ์ผ์„ฑ ์ฆ๊ฐ€ + ํŒจํ„ด ํšŒํ”ผ

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด์‹œ๊ฐ’์„ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„๊ณ (๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ ์‚ฌ์šฉ), ๊ทธ ๋‚˜๋จธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ง์ˆ˜์ด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํŠน์ •ํ•œ ์ˆ˜(์˜ˆ: 10, 20, 100 ๋“ฑ)์ผ ๊ฒฝ์šฐ, ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•œ ํ•ด์‹œ๊ฐ’์ด ํŠน์ • ํŒจํ„ด์„ ๊ฐ€์ง€๋ฉด, ์ผ๋ถ€ ์ธ๋ฑ์Šค์— ๊ฐ’์ด ์ง‘์ค‘๋˜์–ด ์ถฉ๋Œ์ด ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์†Œ์ˆ˜๋Š” ๋‹ค๋ฅธ ์ˆ˜์™€ ๊ณตํ†ต ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ, ํ•ด์‹œ๊ฐ’์˜ ํŒจํ„ด์— ๊ด€๊ณ„์—†์ด ํ•ด์‹œ๊ฐ’๋“ค์ด ๋” ๋‹ค์–‘ํ•œ ์ธ๋ฑ์Šค์— ๋ถ„ํฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•ด์‹œ ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

1. ์ฒด์ด๋‹ Chaining : ์ถฉ๋Œ ์‹œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฐ ์Šฌ๋กฏ์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(๋˜๋Š” ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ)๋กœ ๊ด€๋ฆฌํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • ํ•ด์‹œ ๊ฐ’์ด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ, ํ•ด๋‹น ์Šฌ๋กฏ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์žฅ์  : ํ…Œ์ด๋ธ” ํฌ๊ธฐ์— ์ œํ•œ์ด ์—†์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์  : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ํƒ์ƒ‰ ์‹œ๊ฐ„์ด O(n)์œผ๋กœ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๊ธฐ๋Šฅ์ด O(1)์ด๋ผ๋Š” ์žฅ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค. 
    • ์ด๋Ÿฐ ๋ฌธ์ œ๋กœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ํƒ์ƒ‰ ์‹œ๊ฐ„์„ O(log n)์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ• Open Addressing : ์ถฉ๋Œ ์‹œ ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

๋Œ€ํ‘œ์ ์ธ ๊ธฐ๋ฒ•์œผ๋กœ ์„ ํ˜• ํ”„๋กœ๋น™(Linear Probing), ์ด์ฐจ์‹ ํ”„๋กœ๋น™(Quadratic probing), ์ด์ค‘ ํ•ด์‹œ(Double hashing)์ด ์žˆ๋‹ค.

1. ์„ ํ˜• ํ”„๋กœ๋น™ Linear Probing

์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ณ ์ •๋œ ํฌ๊ธฐ๋งŒํผ ๊ณ„์†ํ•ด์„œ ๋‹ค์Œ ์Šฌ๋กฏ์„ ํƒ์‚ฌํ•ด ๋นˆ ์Šฌ๋กฏ์„ ์ฐพ๋Š”๋‹ค.

 

๋™์ž‘ ๋ฐฉ์‹

1. ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ : ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ๊ณ„์‚ฐ๋œ ์ธ๋ฑ์Šค๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ, ํ•œ ์นธ์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋™ํ•ด ๋นˆ ์Šฌ๋กฏ์„ ์ฐพ๋Š”๋‹ค.

2. ์ƒˆ๋กœ์šด ์Šฌ๋กฏ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•˜๋ฉฐ(๋ณดํ†ต +1), ๋นˆ ์Šฌ๋กฏ์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ์œ„์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

3. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋์— ๋„๋‹ฌํ•˜๋ฉด ์ˆœํ™˜ํ•˜์—ฌ ํ…Œ์ด๋ธ”์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์ด์–ด๊ฐ„๋‹ค.

 

์ˆ˜์‹ ํ‘œํ˜„

  • h() = ํ•ด์‹œ ํ•จ์ˆ˜
  • k = ํ•ด์‹ฑ๋˜๋Š” ํ‚ค
  • i = ์ถฉ๋Œ ํšŸ์ˆ˜
  • n = ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ
  • h(k, i) = (h(k) + i) % n

์„ ํ˜• ํ”„๋กœ๋น™์˜ ์žฅ์ 

๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š”์—†๋‹ค.

 

์„ ํ˜• ํ”„๋กœ๋น™์˜ ๋‹จ์ 

1์ฐจ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐœ์ƒ : ์—ฌ๋Ÿฌ ์ถฉ๋Œ์ด ์ธ์ ‘ํ•œ ์Šฌ๋กฏ์— ๋ชจ์ด๊ฒŒ ๋˜๋ฉด, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๊ฐ™์€ ์˜์—ญ์—์„œ ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ํƒ์ƒ‰ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

2. ์ด์ฐจ์‹ ํ”„๋กœ๋น™ Quadratic Probing

์„ ํ˜• ํ”„๋กœ๋น™๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ ์  ๋” ํฐ ํญ์œผ๋กœ ํƒ์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋นˆ ์Šฌ๋กฏ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ œ๊ณฑ ๋‹จ์œ„๋กœ ์ด๋™ํ•œ๋‹ค.

 

๋™์ž‘ ๋ฐฉ์‹

1. ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ : ๊ธฐ๋ณธ ํ•ด์‹œ ์ธ๋ฑ์Šค์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ œ๊ณฑ ๊ฐ„๊ฒฉ์œผ๋กœ ์ด๋™ํ•ด ์ƒˆ๋กœ์šด ์Šฌ๋กฏ์„ ์ฐพ๋Š”๋‹ค.

2. i ๋ฒˆ์งธ ์ถฉ๋Œ์—์„œ๋Š” i ์ œ๊ณฑ๋งŒํผ์˜ ๊ฐ„๊ฒฉ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, +1, +4, +9, +16 ๋“ฑ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.

 

์ˆ˜์‹ ํ‘œํ˜„

  • h() = ํ•ด์‹œ ํ•จ์ˆ˜
  • k = ํ•ด์‹ฑ๋˜๋Š” ํ‚ค
  • i = ์ถฉ๋Œ ํšŸ์ˆ˜
  • n = ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ
  • h(k, i) = (h(k) + i * i) % n

์ด์ฐจ์‹ ํ”„๋กœ๋น™์˜ ์žฅ์ 

1์ฐจ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ์Šฌ๋กฏ์ด ์ œ๊ณฑ ๊ฐ„๊ฒฉ์œผ๋กœ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ถฉ๋Œ๋œ ์š”์†Œ๋“ค์ด ์„œ๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์ €์žฅ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ ธ ๋ฐ€์ง‘ ๋ฌธ์ œ๊ฐ€ ์™„ํ™”๋œ๋‹ค.

 

์ด์ฐจ์‹ ํ”„๋กœ๋น™์˜ ๋‹จ์ 

2์ฐจ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฌธ์ œ : ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํ‚ค๋“ค์ด ๋™์ผํ•œ ์ˆœ์„œ๋กœ ํƒ์‚ฌํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์–ด, ์—ฌ์ „ํžˆ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ•ด๊ฒจํ•˜์ง€๋Š” ๋ชปํ•œ๋‹ค.

๋นˆ์Šฌ๋กฏ์„ ์ฐพ์„ ๋•Œ ์ด๋™ ๊ฐ„๊ฒฉ์ด ์ปค์งˆ ์ˆ˜ ์žˆ์–ด, ๋ชจ๋“  ์Šฌ๋กฏ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์ „์— ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋ฅผ ์†Œ์ˆ˜๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

3. ์ด์ค‘ ํ•ด์‹œ Double Hashing

๋‘ ๊ฐœ์˜ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ, ๋‘ ๋ฒˆ์งธ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํƒ์ƒ‰ ๊ฐ„๊ฒฉ์„ ๊ฒฐ์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค.

์ด์ค‘ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์˜ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์กฐํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  • i = ์ถฉ๋Œ ํšŸ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜
  • k = ํ•ด์‹ฑ๋˜๋Š” ํ‚ค
  • n = ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ
  • h1() = ์ฒซ ๋ฒˆ์งธ ํ•ด์‹œ ํ•จ์ˆ˜
  • h2() = ๋‘ ๋ฒˆ์งธ ํ•ด์‹œ ํ•จ์ˆ˜
  • h(k, i) = (h1(k) + i * h2(k)) % n

 

๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•์˜ ์žฅ์  : ๋ณ„๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋‚ด์— ์ €์žฅ๋œ๋‹ค.

๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•์˜ ๋‹จ์  : ํ…Œ์ด๋ธ”์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.