ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)

2024. 2. 19. 22:22ยท๐Ÿ“‚ computer-science

[1] ํ•ด์‹œํ…Œ์ด๋ธ” (Hash Table) ??

 ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ Key, Value ํ˜•ํ…Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1) ์ธ ๋งŒํผ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ด์œ ๋Š” ํ•ด์‹œํ•จ์ˆ˜(hash function) ์™€ ํ•ด์‹œ ํ…Œ์ด๋ธ”(hash table)์˜ ๋ฒ„ํ‚ท(bucket) ๋•๋ถ„์ด๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜(hash function) ์€ Key ๊ฐ’์„ ํ•ด์‹œ(Hash) ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•˜๊ณ , ๋ฒ„ํ‚ท(bucket) ์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

 

2. ํ•ด์‹œํ…Œ์ด๋ธ” ๋™์ž‘์›๋ฆฌ

Key ๊ฐ’์„ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function) ์„ ๊ฑฐ์ณ ํ•ด์‹œ ๊ฐ’(Hash) ์„ ๋ณ€ํ™˜ํ•˜์—ฌ ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ํŠน์ • ๋ฒ„ํ‚ท์˜ ์ €์žฅํ•  ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  Key, Value, Hash ์™€ ๊ฐ™์€ ๊ฐ’๋“ค์„ ์ €์žฅํ•œ๋‹ค.

  • ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function) : ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ˆ˜(Integer) ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

 

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

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ํฌ๊ฒŒ Division Method, Digit Folding, Multiplication Method, Univeral Hashing ๊ธฐ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

 

  1. Division Method : ๋‚˜๋ˆ—์…ˆ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ž…๋ ฅ๊ฐ’์„ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ(bucket size)๋กœ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    • ( ์ฃผ์†Œ = ์ž…๋ ฅ๊ฐ’ % ๋ฒ„ํ‚ท ์‚ฌ์ด์ฆˆ) ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์†Œ์ˆ˜๋กœ ์ •ํ•˜๊ณ  2์˜ ์ œ๊ณฑ์ˆ˜์™€ ๋จผ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํšจ๊ณผ๊ฐ€ ์ข‹๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
  2. Digit Folding : ๊ฐ Key์˜ ๋ฌธ์ž์—ด์„ ASCII ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ณ  ๊ฐ’์„ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ” ๋‚ด์˜ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  3. Multiplication Method : ์ˆซ์ž๋กœ ๋œ Key๊ฐ’ K์™€ 0๊ณผ 1์‚ฌ์ด์˜ ์‹ค์ˆ˜ A, ๋ณดํ†ต 2์˜ ์ œ๊ณฑ์ˆ˜์ธ m์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„์‚ฐ์„ ํ•ด์ค€๋‹ค. h(k)=(kAmod1) × m
  4. Univeral Hashing : ๋‹ค์ˆ˜์˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ง‘ํ•ฉ H์— ๋„ฃ์–ด๋‘๊ณ , ๋ฌด์ž‘์œ„๋กœ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์„ ํƒํ•ด ํ•ด์‹œ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

4. Hash collision

 ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ” bucket ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ open address, seperate chaining ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค.

 

[1] ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•(seperate chaining)

 

Seperating Chaining ์€ ๋™์ผํ•œ ๋ฒ„ํ‚ท์˜ ๋ฐ์ดํ„ฐ์— LinkedList ์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. Seperating Chaining ๋ฐฉ์‹์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ™•์žฅ์ด ํ•„์š”์—†๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋™์ผํ•œ ๋ฒ„ํ‚ท์˜ ์ฒด์ด๋‹๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํƒ์ƒ‰ ์†๋„๊ฐ€ ๋–จ์–ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

[2] ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•(Open Addressing)

 

Open Addressing ์€ ๋น„์–ด์žˆ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋ฒ„ํ‚ท์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. Open Addressing ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ Linear Probing, Quadratic Probing, Double Hashing Probing ์ด ์กด์žฌํ•œ๋‹ค.

 

  1. Linear Probing : ํ˜„์žฌ์˜ ๋ฒ„ํ‚ท index๋กœ๋ถ€ํ„ฐ ๊ณ ์ •ํญ ๋งŒํผ์”ฉ ์ด๋™ํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•ด ๋น„์–ด ์žˆ๋Š” ๋ฒ„ํ‚ท์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  2. Quadratic Probing : ํ•ด์‹œ์˜ ์ €์žฅ์ˆœ์„œ ํญ์„ ์ œ๊ณฑ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒ˜์Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” 1๋งŒํผ ์ด๋™ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ ๊ณ„์† ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด 2^2, 3^2 ์นธ์”ฉ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  3. Double Hashing Probing : ํ•ด์‹œ๋œ ๊ฐ’์„ ํ•œ๋ฒˆ ๋” ํ•ด์‹ฑํ•˜์—ฌ ํ•ด์‹œ์˜ ๊ทœ์น™์„ฑ์„ ์—†์• ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ•ด์‹œ๋œ ๊ฐ’์„ ํ•œ๋ฒˆ ๋” ํ•ด์‹ฑํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค๋ณด๋‹ค ๋งŽ์€ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

5. java ์—์„œ์˜ HashMap

์ž๋ฐ”์—์„œ๋Š” ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ Seperate chaining ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ, ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ๊ฐ„ ๋ชจ๋‘ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์ ‘๊ทผํ•˜์ง€๋งŒ, ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์ด ๋Š˜์–ด๋‚œ๋‹ค๋ฉด ๊ฐ’์ด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์ด ์„ ํ˜• ์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์‹ ์ค‘ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ([์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] ์•„์ดํ…œ 11. equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ)

 

Reference

  • https://www.youtube.com/watch?v=ZBu_slSH5Sk
  • https://mangkyu.tistory.com/102
  • https://www.codingeek.com/data-structure/complete-guide-open-addressing-classification-eliminate-collisions/
  • https://en.wikipedia.org/wiki/Hash_table

 

'๐Ÿ“‚ computer-science' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์บ์‹œ ์ •๋ฆฌ (Cache Summary)  (0) 2025.03.09
Multi Programming, Processing, Tasking, Threading  (0) 2024.02.16
thread type & model  (0) 2024.02.15
๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ (Virtual Memory)  (0) 2024.01.26
'๐Ÿ“‚ computer-science' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์บ์‹œ ์ •๋ฆฌ (Cache Summary)
  • Multi Programming, Processing, Tasking, Threading
  • thread type & model
  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ (Virtual Memory)
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    spring-batch
    mysql
    spring AOP
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    ํšŒ๊ณ 
    JPA
    Redisson
    UUID
    nGrinder
    AWS
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    spring camp 2025
    react
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    gof
    kafka
    spring
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    ๋™์‹œ์„ฑ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”