λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
πŸ’» Computer Science/- Data Structure, Algorithm

[μ•Œκ³ λ¦¬μ¦˜-이둠] ν•΄μ‹œ ν…Œμ΄λΈ” (Hash Table)

by Wonit 2019. 11. 23.

ν•΄μ‹œ ν…Œμ΄λΈ”

ν•΄μ‹œ ν…Œμ΄λΈ”μ€ κ²€μƒ‰μ˜ 평균 μ‹œκ°„ λ³΅μž‘λ„κ°€ O(1)이 λ˜λŠ” 검색에 졜고의 μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

 

검색 νŠΈλ¦¬λŠ” μ›μ†Œκ°€ μ €μž₯될 μžλ¦¬κ°€ 이미 νŠΈλ¦¬μ— μ‘΄μž¬ν•˜λŠ” μ›μ†Œμ™€ λΉ„κ΅ν•˜μ—¬ κ²°μ •λ˜λŠ” 반면, ν•΄μ‹œ ν…Œμ΄λΈ”μ€ μ›μ†Œκ°€ μ €μž₯될 μžλ¦¬μ— 값에 μ˜ν•΄ κ²°μ •λ˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.

 

ν•΄μ‹œ ν…Œμ΄λΈ”μ€ λ‹¨κ³„μ μœΌλ‘œ

검색킀 -> μ£Όμ†Œ 계산 -> ν…Œμ΄λΈ” μ°Έμ‘°

 

의 νλ¦„μœΌλ‘œ 검색이 이루어진닀.

ν•΄μ‹œ ν…Œμ΄λΈ” 1

  • 검색 ν‚€

    ν•΄μ‹œ ν•¨μˆ˜ h(x) = x mod m에 μ˜ν•΄ 검색 ν‚€κ°€ κ²°μ •λ˜κ³  xλŠ” μ‚¬μš©μž μž…λ ₯ κ°’,(λ°°μ—΄ κ°’) m은 ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기λ₯Ό λœ»ν•œλ‹€.

  • μ£Όμ†Œ 계산

    μ£Όμ†Œ 계산은 검색 ν‚€λ₯Ό ν†΅ν•΄μ„œ x mod m을 μ‹€μ§ˆμ μœΌλ‘œ ν–‰ν•˜λŠ” 과정이닀.

  • ν…Œμ΄λΈ” μ°Έμ‘°

    검색 ν‚€λ₯Ό ν†΅ν•œ μ£Όμ†Œ 계산이 이루어진 ν›„ 검색을 ν•˜λŠ” 단계이닀. μ›μ†Œκ°€ μ €μž₯될 μžλ¦¬κ°€ 값에 μ˜ν•΄ κ²°μ •λ˜λ―€λ‘œ 평균 ν•œ 번의 κ²€μƒ‰μœΌλ‘œλ„ μ°Έμ‘°κ°€ κ°€λŠ₯ν•˜λ‹€.

 
ν•΄μ‹œ ν…Œμ΄λΈ”μ— μ›μ†Œκ°€ μ°¨ μžˆλŠ” λΉ„μœ¨μ€ ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μ„±λŠ₯에 맀우 μ€‘μš”ν•œ 영ν–₯을 λ―ΈμΉœλ‹€. 이 λΉ„μœ¨μ„ 적재율이라고 ν•˜λ©° ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기가 m이고, μ €μž₯된 μ›μ†Œμ˜ 총 μˆ˜κ°€ n이라면 μ μž¬μœ¨μ€ n/m 이닀.

 

ν•΄μ‹œ ν…Œμ΄λΈ” 예제

 


ν•΄μ‹œ ν…Œμ΄λΈ”2

μž…λ ₯: 25, 13, 16, 15, 7 μ—μ„œ ν•΄μ‹œ ν•¨μˆ˜ h(x) = x mod 13을 ν•¨κ»˜ λΆ„μ„ν•΄λ³΄μž.

  • 검색 ν‚€: h(x) = x mod 13
  • ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기 = 13
Round 1
  • 25λ₯Ό ν•΄μ‹œ ν•¨μˆ˜λ‘œ λŒλ Έμ„ λ•Œ λ‚˜μ˜€λŠ” κ°’: 25 mod 13 = 12
  • ν…Œμ΄λΈ” μ—΄ 12번째 Index에 μΆ”κ°€
Round 2
  • 13을 ν•΄μ‹œ ν•¨μˆ˜λ‘œ λŒλ Έμ„ λ•Œ λ‚˜μ˜€λŠ” κ°’: 13 mod 13 = 0
  • ν…Œμ΄λΈ” μ—΄ 0번째 Index에 μΆ”κ°€
Round 3
  • 16을 ν•΄μ‹œ ν•¨μˆ˜λ‘œ λŒλ Έμ„ λ•Œ λ‚˜μ˜€λŠ” κ°’: 16 mod 13 = 3
  • ν…Œμ΄λΈ” μ—΄ 3번째 Index에 μΆ”κ°€
Round 4
  • 15λ₯Ό ν•΄μ‹œ ν•¨μˆ˜λ‘œ λŒλ Έμ„ λ•Œ λ‚˜μ˜€λŠ” κ°’: 15 mod 13 = 2
  • ν…Œμ΄λΈ” μ—΄ 2번째 Index에 μΆ”κ°€
Round 5
  • 7을 ν•΄μ‹œ ν•¨μˆ˜λ‘œ λŒλ Έμ„ λ•Œ λ‚˜μ˜€λŠ” κ°’: 7 mod 13 = 7
  • ν…Œμ΄λΈ” μ—΄ 7번째 Index에 μΆ”κ°€
Round 6
  • μ™„λ£Œ!

ν•΄μ‹œ ν•¨μˆ˜


ν•΄μ‹œ ν•¨μˆ˜λŠ” ν‚€ 값을 μž…λ ₯으둜 λ°›μ•„ ν•΄μ‹œ ν…Œμ΄λΈ”μƒμ˜ μ£Όμ†Œλ₯Ό λ¦¬ν„΄ν•œλ‹€κ³  ν–ˆλŠ”λ° ν•΄μ‹œ ν•¨μˆ˜λŠ” λ‹€μŒ 두 가지 μ„±μ§ˆμ„ 가지도둝 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

  • μž…λ ₯ μ›μ†Œκ°€ ν•΄μ‹œ ν…Œμ΄λΈ” 전체에 고루 μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€.
  • 계산이 간단해야 ν•œλ‹€.

첫 번째 μ„±μ§ˆμ΄ κ°€μž₯ μ€‘μš”ν•œλ°, 이 μ„±μ§ˆμ„ 잘 λ§Œμ‘±ν•΄μ•Ό μ„œλ‘œ λ‹€λ₯Έ 두 μ›μ†Œκ°€ ν•œ μ£Όμ†Œλ₯Ό 놓고 μΆ©λŒν•  ν™•λ₯ μ΄ μž‘μ•„μ§€κΈ° λ•Œλ¬Έμ΄λ‹€!!

ν•΄μ‹œ ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” λŒ€ν‘œμ μΈ 방법

1. λ‚˜λˆ„κΈ° 방법

λ‚˜λˆ„κΈ° 방법은 μ§€κΈˆκΉŒμ§€ λ§›λ³΄κΈ°λ‘œ μˆ˜ν–‰ν–ˆλ˜ ν•΄μ‹œ ν•¨μˆ˜μ˜ 검색 킀와 λ™μΌν•œ ꡬ쑰이닀.
h(x) = x mod m

  • ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기 : m
  • ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기 m : 2의 λ©±μˆ˜μ— 가깝지 μ•Šμ€ μ†Œμˆ˜λ‘œ κ΅¬μ„±λ˜μ–΄μ•Ό ν•œλ‹€.
2. κ³±ν•˜κΈ° 방법

h(x) = m(xA mod 1)
ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기보닀 큰 수λ₯Ό ν•΄μ‹œ ν…Œμ΄λΈ” 크기 λ²”μœ„μ— λ“€μ–΄μ˜€λ„λ‘ ν•œ 것이닀.

1. ν•΄μ‹œ ν…Œμ΄λΈ”μ€ μž…λ ₯ 값을 0κ³Ό 1μ‚¬μ΄μ˜ μ†Œμˆ˜λ‘œ λŒ€μ‘μ‹œν‚¨λ‹€.
2. ν•΄μ‹œ ν…Œμ΄λΈ” 크기 m을 κ³±ν•˜μ—¬ 0λΆ€ν„° m-1 μ‚¬μ΄λ‘œ ν™•μž₯μ‹œν‚¨λ‹€.

이 λ°©λ²•μ—μ„œ μ€‘μš”ν•œ 것은 ν•΄μ‹œ ν•¨μˆ˜μ˜ νŠΉμ„±μ„ κ²°μ •μ§“λŠ” 0 < A < 1 λ²”μœ„μ˜ μƒμˆ˜ A이닀.

  • μƒμˆ˜ Aλ₯Ό μ •ν•œλ‹€. 이 λ•Œ μƒμˆ˜ A의 λ²”μœ„λŠ” 0<A<1이닀.
  • μž…λ ₯ x에 Aλ₯Ό κ³±ν•œλ‹€.
  • m을 κ³±ν•œλ‹€.
κ²°λ‘ : λ‚˜λˆ„κΈ° 방법은 κ΅¬ν˜„ν•˜κΈ° μ‰½μ§€λ§Œ 크기가 μ œν•œμ μΈ ν…Œμ΄λΈ”λ§Œ μ‚¬μš©ν•  수 μžˆλŠ” 반면 κ³±ν•˜κΈ° 방법은 μ œν•œμ μΈ ν…Œμ΄λΈ”λ§Œ μ‚¬μš©ν•˜λ”λΌλ„ λ²”μœ„κ°€ μ»€μ§€λŠ” μž₯범이 μžˆλ‹€.

좩돌 ν•΄κ²°

ν•΄μ‹œ ν•¨μˆ˜λŠ” μ–΄λ–€ 값에 λͺ¨λ“ˆλŸ¬ 연산을 톡해 값을 μ–»λŠ”λ‹€κ³  ν•˜μ˜€λŠ”λ° λ§Œμ•½ λͺ¨λ“ˆλŸ¬ν•œ 값이 κ°™κ²Œ 되면 즉 (13, 26, 39) κ°€ μž…λ ₯으둜 λ“€μ–΄μ™”λ‹€κ³  ν•˜λ©΄ λͺ¨λ‘ 13을 ν‚€λ‘œ κ°–λŠ” ν•΄μ‹œν•¨μˆ˜ x mod 13을 μˆ˜ν–‰ν•œ κ²°κ³ΌλŠ” 0이 λ˜λ―€λ‘œ 같은 μ£Όμ†Œμ— λ“€μ–΄κ°€λ €κ³  ν•œλ‹€. 이λ₯Ό 좩돌 이라고 ν•œλ‹€.

μΆ©λŒμ„ ν•΄κ²°ν•˜λŠ” λ°©λ²•μ—λŠ” 크게 두 가지 방법이 μžˆλ‹€.

1. 체이닝 방법

같은 μ£Όμ†Œμ— ν•΄μ‹±λ˜λŠ” μ›μ†Œλ₯Ό λͺ¨λ‘ λͺ¨μ•„ ν•˜λ‚˜μ˜ μ—°κ²° λ¦¬μŠ€νŠΈμ— λ§€λ‹¬μ•„μ„œ 관리.

ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기가 m 이면 μ΅œλŒ€ m개의 μ—°κ²° λ¦¬μŠ€νŠΈκ°€ μ‘΄μž¬ν•¨.

2. 개방 μ£Όμ†Œ 방법

ν•΄μ‹œ ν…Œμ΄λΈ” μ‹œκ°„ λ³΅μž‘λ„

ν•΄μ‹œ ν…Œμ΄λΈ”μ€ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 μ‹€μ œ 값을 κ°–λŠ” ν…Œμ΄λΈ”μ— μ°Έμ‘° ν•˜λ„λ‘ 섀계가 λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— μž…λ ₯의 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(1)이 λœλ‹€.

ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ νŠΉμ§•

ν•΄μ‹œ ν…Œμ΄λΈ” μžλ°” μ½”λ“œ

λŒ“κΈ€