/
πŸ“™

JS Hash table

JavaScript
Table of contents
  • ν•΄μ‹œ ν…Œμ΄λΈ”

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

ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜λ©΄ 자료λ₯Ό 쉽고 λΉ λ₯΄κ²Œ μ €μž₯ν•  수 있고 ν‚€-κ°’ μŒμ„ 기반으둜 자료λ₯Ό 얻을 수 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ κ°μ²΄λŠ” ν•΄μ‹œ ν…Œμ΄λΈ”κ³Ό 같은 λ°©μ‹μœΌλ‘œ 킀와 ν•΄λ‹Ή ν‚€μ˜ μ—°κ΄€λœ 값을 μ •μ˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μ£Όμš” ν•¨μˆ˜

  • put(): ν•΄μ‹œ ν…Œμ΄λΈ”μ— 자료λ₯Ό μ €μž₯
    • μ‹œκ°„ λ³΅μž‘λ„: O(1)
  • get(): ν•΄μ‹œ ν…Œμ΄λΈ”λ‘œλΆ€ν„° 자료λ₯Ό μ–»μŒ
    • μ‹œκ°„ λ³΅μž‘λ„: O(1)

λΈŒλΌμš°μ €μ˜ localStorage

  • ν•΄μ‹œ ν…Œμ΄λΈ”μ— 기반의 자료 ꡬ쑰
  • μ£Όμš” λΈŒλΌμš°μ €(λͺ¨λ˜ λΈŒλΌμš°μ €?)μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λ³Έ μžλ°”μŠ€ν¬λ¦½νŠΈ 객체
  • λΈŒλΌμš°μ € 내에 자료λ₯Ό μœ μ§€ν•  수 있게 ν•΄μ€€λ‹€ (μ„Έμ…˜ 이후에도 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€λŠ” 것을 의미)

ν•΄μ‹± 기법

ν•΄μ‹œ ν•¨μˆ˜ ν•΄μ‹œ ν•¨μˆ˜λŠ” νŠΉμ • ν‚€λ‘œ 자료λ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄μ˜ 인덱슀둜 λ³€ν™˜ν•œλ‹€.

  • κ²°μ •μ„±: λ™μΌν•œ ν‚€λŠ” λ™μΌν•œ ν•΄μ‹œ 값을 생성해야 ν•œλ‹€.
  • νš¨μœ¨μ„±: μ‹œκ°„ λ³΅μž‘λ„κ°€ O(1)이어야 ν•œλ‹€.
  • κ· μΌν•œ λΆ„ν•΄: λ°°μ—΄ 전체λ₯Ό μ΅œλŒ€ν•œ ν™œμš©ν•΄μ•Ό ν•œλ‹€.

μ†Œμˆ˜ ν•΄μ‹±

μ†Œμˆ˜λ₯Ό μ‚¬μš©ν•œ λͺ¨λ“ˆλŸ¬ λ‚˜λˆ—μ…ˆμ΄ κ· μΌν•œ λ°©μ‹μœΌλ‘œ λ°°μ—΄ 인덱슀λ₯Ό μƒμ„±ν•œλ‹€. μ†Œμˆ˜μ— μ˜ν•œ λͺ¨λ“ˆλŸ¬λŠ” κ³ μ •λœ 크기에 λŒ€ν•΄ κ°€μž₯ κ· λ“±ν•œ λΆ„λ°°λ₯Ό 보μž₯ν•œλ‹€.

탐사

탐사 ν•΄μ‹± 기법을 μ‚¬μš©ν•΄ μΆ©λŒμ„ ν”Όν•˜κ³  λ°°μ—΄μ—μ„œ λ‹€μŒμœΌλ‘œ μ‚¬μš© κ°€λŠ₯ν•œ 인덱슀λ₯Ό 찾을 수 μžˆλ‹€.

μ„ ν˜• 탐사 ν•œ λ²ˆμ— ν•œ 인덱슀λ₯Ό μ¦κ°€μ‹œν‚΄μœΌλ‘œμ¨ μ‚¬μš© κ°€λŠ₯ν•œ 인덱슀λ₯Ό μ°ΎλŠ”λ‹€. 단점은 ꡰ집이 μ‰½κ²Œ λ°œμƒν•œλ‹€λŠ” 것이닀. ꡰ집은 μˆœνšŒν•΄μ•Ό ν•  자료λ₯Ό 더 많이 μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— 쒋지 λͺ»ν•˜λ‹€.

이차 탐사 이차 νƒμ‚¬λŠ” 맀번 1μ”© μ¦κ°€μ‹œν‚€λŠ” λŒ€μ‹  μ™„μ „ μ œκ³±μ„ μ‚¬μš©ν•œλ‹€. ꡰ집 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 쒋은 기법이닀.

이쀑 ν•΄μ‹± / μž¬ν•΄μ‹±

이차 ν•΄μ‹± ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ μ›λž˜ ν•΄μ‹± ν•¨μˆ˜λ‘œλΆ€ν„° λ‚˜μ˜¨ κ²°κ³Όλ₯Ό ν•œ 번 더 ν•΄μ‹±ν•˜λŠ” 것이 μžˆλ‹€.

  • 첫 번째 ν•΄μ‹± ν•¨μˆ˜μ™€ 달라야 ν•œλ‹€.
  • μ‹œκ°„ λ³΅μž‘λ„κ°€ O(1)이어야 ν•œλ‹€.
  • κ²°κ³Όκ°€ 0이 λΌμ„œλŠ” μ•ˆ λœλ‹€.

$$ hash_2(x) = R-(x \% R) $$

  • $x$ : 첫 번째 ν•΄μ‹±μ˜ κ²°κ³Ό
  • $R$ : ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 크기보닀 μž‘λ‹€.
  • $i$ : 반볡 μ‹œλ„ 횟수

$$ i*hash_2(x) $$

μš”μ•½

ν•΄μ‹œ ν…Œμ΄λΈ”μ€ 처음 μ •μ˜ ν• λ•Œ μ§€μ •ν•œ κ³ μ •λœ 크기의 자료 ꡬ쑰이닀. λ°°μ—΄μ˜ 인덱슀λ₯Ό μƒμ„±ν•˜λŠ” ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„λœλ‹€. 쒋은 ν•¨μˆ˜λŠ” 결정적이고 효율적이고 κ· λ“±ν•˜κ²Œ λΆ„ν•΄ν•œλ‹€. ν•˜μ§€λ§Œ 일뢀 좩돌이 λ°œμƒν•˜λŠ” 것은 ν”Όν•  수 μ—†λ‹€.

logo
Things I've Learned