ν•΄μ‹œλž€?
ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ λ³€ν™˜ν•œ κ°’을 μΈλ±μŠ€λ‘œ μ‚Όμ•„ ν‚€μ™€ κ°’을 μ €μž₯ν•΄μ„œ λΉ λ₯Έ λ°μ΄ν„° νƒμƒ‰μ„ μ œκ³΅ν•˜λŠ” μžλ£Œκ΅¬μ‘°

 

ν•΄μ‹œμ˜ νŠΉμ§•

  • 단방ν–₯ λ™μž‘ (ν‚€λ₯Ό 톡해 값을 찾을 수 μžˆμ§€λ§Œ 값을 톡해 ν‚€λ₯Ό μ°ΎκΈ° λΆˆκ°€λŠ₯)
  • ν‚€ μžμ²΄κ°€ μΈλ±μŠ€μ΄λ―€λ‘œ 값을 μ°ΎκΈ° μœ„ν•œ 탐색 λΆˆν•„μš”
  • 값을 인덱슀둜 ν™œμš©ν•˜κΈ° μœ„ν•΄ μ μ ˆν•œ λ³€ν™˜κ³Όμ • ν•„μš”

 

ν•΄μ‹œμ˜ λ™μž‘λ°©μ‹

ν•΄μ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 경우
ν•΄μ‹œλ₯Ό μ‚¬μš©ν•˜λŠ” 경우

ν•΄μ‹œ ν…Œμ΄λΈ”(hash table) : 킀와 λŒ€μ‘ν•œ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” 곡간

버킷(bucket) : ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 각 데이터

 

ν•΄μ‹œμ˜ νŠΉμ„±μ„ ν™œμš©ν•˜λŠ” λΆ„μ•Ό

단방ν–₯으둜만 검색이 κ°€λŠ₯ν•œ λŒ€μ‹  λΉ λ₯΄κ²Œ μ›ν•˜λŠ” κ°’ 검색 (데이터λ₯Ό μ €μž₯ν•˜κ³  κ²€μƒ‰ν•˜λŠ” 경우 / λ³΄μ•ˆμ΄ ν•„μš”ν•œ κ²½μš°μ— ν™œμš©)

  • λΉ„λ°€λ²ˆν˜Έ 관리 : λΉ„λ°€λ²ˆν˜Έλ₯Ό κ·ΈλŒ€λ‘œ λ…ΈμΆœν•΄ μ €μž₯ν•˜λŠ” κ²ƒμ€ μœ„ν—˜ν•˜λ―€λ‘œ ν•΄μ‹±ν•œ λΉ„λ°€λ²ˆν˜Έ μ €μž₯
  • λ°μ΄ν„°λ² μ΄μŠ€ 인덱싱 : λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 λ°μ΄ν„°λ₯Ό νš¨μœ¨μ μœΌλ‘œ κ²€μƒ‰
  • 블둝체인 : 각 λΈ”둝은 μ΄μ „ λΈ”λ‘μ˜ ν•΄μ‹œκ°’을 ν¬ν•¨ν•˜λ©° μ΄λ₯Ό ν†΅ν•΄ λ°μ΄ν„° λ¬΄κ²°μ„± ν™•μΈ

 

ν•΄μ‹œν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  λ•Œ κ³ λ €ν•  λ‚΄μš©

  • ν•΄μ‹œ ν•¨μˆ˜κ°€ λ³€ν™˜ν•œ κ°’은 μΈλ±μŠ€λ‘œ ν™œμš©ν•΄μ•Όν•˜λ―€λ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ ν¬κΈ°λ₯Ό λ„˜μœΌλ©΄ μ•ˆλœλ‹€.
  • ν•΄μ‹œ ν•¨μˆ˜κ°€ λ³€ν™˜ν•œ κ°’μ˜ μΆ©λŒμ€ μ΅œλŒ€ν•œ μ κ²Œ λ°œμƒν•΄μ•Ό ν•œλ‹€.
    (좩돌 : μ„œλ‘œ λ‹€λ₯Έ 두 킀에 λŒ€ν•΄ ν•΄μ‹± ν•¨μˆ˜λ₯Ό μ μš©ν•œ κ²°κ³Όκ°€ λ™μΌν•œ 것을 의미)

 

자주 μ‚¬μš©ν•˜λŠ” ν•΄μ‹œν•¨μˆ˜

1) λ‚˜λˆ—μ…ˆλ²• (division method)

 

β„Ž(π‘₯) = π‘₯ π‘šπ‘œπ‘‘ π‘š
  • x = ν‚€ / m = μ†Œμˆ˜ 
  • ν‚€λ₯Ό μ†Œμˆ˜λ‘œ λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό 인덱슀둜 μ‚¬μš© (μΆ©λŒμ„ 쀄이기 μœ„ν•΄ μ†Œμˆ˜ μ‚¬μš©)
  • λ‚˜λ¨Έμ§€λ₯Ό μ·¨ν•˜λŠ” μ—°μ‚°μ„ λͺ¨λ“ˆλŸ¬ μ—°μ‚°μ΄λΌκ³  ν•˜λ©° μ—°μ‚°μžλ‘œ % μ‚¬μš©
  • m을 λͺ¨λ“ˆλŸ¬ μ—°μ‚°ν–ˆμ„ λ•Œ λ‚˜μ˜¬ 수 μžˆλŠ” 값은 0~(m-1)μ΄λ―€λ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ ν¬κΈ°λŠ” m (큰 μ†Œμˆ˜λ₯Ό μ°ΎκΈ° μ–΄λ €μš΄ 문제)

2) κ³±μ…ˆλ²• (multiplication method)

 

β„Ž(π‘₯) = (((π‘₯ βˆ— 𝐴) π‘šπ‘œπ‘‘ 1) βˆ— π‘š)
  • m = μ΅œλŒ€ λ²„ν‚·μ˜ 개수 / A = ν™©κΈˆλΉ„ (μˆ˜ν•™μ μœΌλ‘œ μž„μ˜μ˜ 길이λ₯Ό λ‚˜λˆ„μ—ˆμ„ λ•Œ 전체:κΈ΄ λΆ€λΆ„ = κΈ΄ λΆ€λΆ„:짧은 뢀뢄인 λΉ„μœ¨)
  • κ³±μ…ˆλ²•μ„ κ³„μ‚°ν•˜λŠ” 방식
    • 킀에 ν™©κΈˆλΉ„ κ³±ν•˜κΈ°
    • μœ„μ—μ„œ κ΅¬ν•œ κ°’μ˜ λͺ¨λ“ˆλŸ¬ 1 μ·¨ν•˜κΈ° (μ •μˆ˜ λΆ€λΆ„을 λ²„리고 μ†Œμˆ˜ λΆ€λΆ„ μ·¨ν•˜κΈ°)
    • μœ„μ—μ„œ κ΅¬ν•œ κ°’을 κ°€μ§€κ³  μ‹€μ œ ν•΄μ‹œ ν…Œμ΄λΈ”에 λ§€ν•‘

 

λ¬Έμžμ—΄ ν•΄μ‹±

β„Žπ‘Žπ‘ β„Ž(𝑠) = (𝑠[0] + 𝑠[1] βˆ— 𝑝 + 𝑠[2] βˆ— 𝑝2 … 𝑠[π‘›βˆ’1] βˆ— 𝑝n-1) π‘šπ‘œπ‘‘ π‘š
  • λ¬Έμžμ—΄μ˜ λ¬Έμžλ₯Ό μˆ«μžλ‘œ λ³€ν™˜ν•˜κ³  μ΄ μˆ«μžλ“€μ„ λ‹€ν•­μ‹μ˜ κ°’μœΌλ‘œ λ³€ν™˜ν•΄μ„œ ν•΄μ‹±
  • ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ μš©ν•œ 값이 ν•΄μ‹œ ν…Œμ΄λΈ” 크기에 λΉ„ν•΄ λ„ˆλ¬΄ 클 경우 μˆ˜μ • μž‘μ—… ν•„μš”
    → λ§μ…ˆμ„ μ „λΆ€ ν•œ λ‹€μŒ λͺ¨λ“ˆλŸ¬ μ—°μ‚°μ„ ν•˜λŠ” λŒ€μ‹  μ€‘간쀑간 λͺ¨λ“ˆλŸ¬ μ—°μ‚°μ„ ν•΄ λ”ν•œκ°’μ„ λͺ¨λ“ˆλŸ¬ μ—°μ‚°

 

좩돌 처리

좩돌(collision) : μ„œλ‘œ λ‹€λ₯Έ 킀에 λŒ€ν•΄ ν•΄μ‹œ ν•¨μˆ˜μ˜ 결과값이 같은 것 (ν•˜λ‚˜μ˜ 버킷에 2개의 값을 λ„£dj 좩돌 μ²˜λ¦¬κ°€ ν•„μš”)

 

1) μ²΄μ΄λ‹μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ°

체이닝 : 좩돌이 λ°œμƒν•˜λ©΄ ν•΄λ‹Ή 버킷에 λ§ν¬λ“œλ¦¬μŠ€νŠΈλ‘œ 같은 ν•΄μ‹œκ°’μ„ κ°€μ§€λŠ” 데이터 μ—°κ²°

  • ν•΄μ‹œ ν…Œμ΄λΈ” 곡간 ν™œμš©μ„±μ΄ 떨어진닀. (좩돌이 λ§Žμ•„μ§€λ©΄ λ§ν¬λ“œλ¦¬μŠ€νŠΈμ˜ 길이가 κΈΈμ–΄μ Έ ν•΄μ‹œ ν…Œμ΄λΈ” 곡간 μ‚¬μš©λ„↓)
  • 검색 μ„±λŠ₯이 떨어진닀. (좩돌이 많으면 λ§ν¬λ“œλ¦¬μŠ€νŠΈ 자체의 ν•œκ³„λ‘œ 검색 μ„±λŠ₯ μ €ν•˜)

2) 개방 μ£Όμ†Œλ²•μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ°

개방 μ£Όμ†Œλ²•(open addressing) : 빈 버킷을 μ°Ύμ•„ μΆ©λŒκ°’μ„ μ‚½μž… → ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ΅œλŒ€ν•œ ν™œμš©ν•˜λ―€λ‘œ 효율적 λ©”λͺ¨λ¦¬ μ‚¬μš©

  • μ„ ν˜• 탐사 방식 (linear probing) 
    • 좩돌이 λ°œμƒν•˜λ©΄ λ‹€λ₯Έ 빈 버킷을 찾을 λ•ŒκΉŒμ§€ μΌμ •ν•œ κ°„κ²©μœΌλ‘œ 이동
    • ν•΄μ‹œ 좩돌이 λ°œμƒν•œ 값끼리 λͺ¨μ΄λŠ” μ˜μ—­μ΄ 생겨 ν΄λŸ¬μŠ€ν„° ν˜•μ„± (μ΄λŸ¬ν•œ κ΅°μ§‘이 μƒκΈ°λ©΄ ν•΄μ‹œκ°’이 κ²ΉμΉ  ν™•λ₯  μ¦κ°€)
  • 이쀑 ν•΄μ‹± 방식
    • ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 2개 μ‚¬μš©
    • 두 번째 ν•΄μ‹œν•¨μˆ˜λŠ” 첫 번째 ν•΄μ‹œν•¨μˆ˜λ‘œ 좩돌이 λ°œμƒν•˜λ©΄ ν•΄λ‹Ή μœ„μΉ˜ κΈ°μ€€ μ–΄λ–»κ²Œ μœ„μΉ˜λ₯Ό 정할지 κ²°μ •ν•˜λŠ” μ—­ν• 
    • μ„ ν˜• 탐사와 λΉ„μŠ·ν•˜κ²Œ λ”ν•˜λŠ” λ°©μ‹μ΄μ§€λ§Œ μ£Όμ–΄μ§€λŠ” ν‚€λ§ˆλ‹€ μ ν”„ν•˜λŠ” μœ„μΉ˜λ₯Ό λ‹€λ₯΄κ²Œ ν•΄μ„œ ν΄λŸ¬μŠ€ν„° ν˜•μ„± κ°μ†Œ

 

ν•΄μ‹œ 문제의 핡심은 킀와 값을 λ§€ν•‘ν•˜λŠ” κ³Όμ • !!


β€» μ°Έκ³  자료 β€»

https://wikidocs.net/221191

+ Recent posts