ν΄μ ν μ΄λΈμ΄λ?
- ν€(key)μ κ°(value)μ μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£κ΅¬μ‘°.
- ν΄μ ν μ΄λΈμμ μ½μ /μμ /νμ μ νκ· μ μΈ μκ°λ³΅μ‘λλ O(1)λ‘, μ΄λ€ κ°μ μ°ΎλλΌλ ν λ¨κ³λ§ μμλλ€.
μ¬μ© μ¬λ‘
- κ²μμ΄λ μ μ₯μ΄ λΉλ²ν λ μ¬μ©νλ©΄ μ’μλ°, νΉν μΊμλ₯Ό ꡬνν λ ν΄μ ν μ΄λΈμ μ¬μ©ν μ μλ€.
- μΊμλ μ΄μ μ κ³μ°λ κ²°κ³Όλ₯Ό μμλ‘ μ μ₯νλ μ₯μλ‘, μΊμμ μ κ·Ό μκ°μ λΉν΄ μλ λ°μ΄ν°λ₯Ό μ κ·Όνλ μκ°μ΄ μ€λ 걸리λ κ²½μ°λ κ°μ λ€μ κ³μ°νλ μκ°μ μ μ½νκ³ μΆμ κ²½μ°μ μ¬μ©λλ€.
μλ μ리
- ν΄μ ν μ΄λΈ λ΄λΆμμλ indexμ valueλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄ κ΅¬μ‘°λ₯Ό μ¬μ©νλ€.
- ν€(key)λ₯Ό ν΄μ ν¨μλ₯Ό μ¬μ©νμ¬ λ°°μ΄μ μΈλ±μ€λ‘ λ³νν ν ν΄λΉ μΈλ±μ€μ κ°(value)μ μ μ₯νλ€.
ν΄μ ν¨μ
- ν΄μ ν μ΄λΈμμμ ν΄μ ν¨μλ μμμ λ°μ΄ν°λ₯Ό μ μλ‘ λ³ννλ ν¨μ.
- μλ₯Ό λ€μ΄, ν΄μ ν¨μμ inputμ΄ 'abc'λΌλ©΄ outputμ΄ '1234'κ° λλ κ²μ΄λ€. μ΄λ λ³νλ κ° '1234'κ° ν΄μμ΄λ€.

ν΄μ μΆ©λκ³Ό ν΄κ²° λ°©λ²
- μλ‘ λ€λ₯Έ ν€ κ°μ΄ λμΌν μΈλ±μ€λ‘ λ§€νλ κ²½μ° ν΄μ μΆ©λ(hash collision)μ΄ λ°μνμ¬ ν΄μ ν μ΄λΈμ μ±λ₯μ λ¨μ΄νΈλ¦°λ€.
- μ΄λ₯Ό ν΄κ²°νλ λ°©λ²μΌλ‘ λΆλ¦¬ μ°κ²°λ²(seperate chaining), κ°λ°© μ£Όμλ²(open addressing)μ΄ μλ€.
1. λΆλ¦¬ μ°κ²°λ²(seperate chaining)
- ν΄μ ν μ΄λΈ κ°κ°μ 곡κ°μ λ²ν·(bucket)μ΄λΌκ³ νλ€.
- κ° λ²ν·μ λμνλ μ°κ²° 리μ€νΈλ₯Ό μμ±νκ³ , λ²ν·μ΄ μ°κ²° 리μ€νΈμ κ°μ₯ μ λ Έλλ₯Ό λ°λΌλ³΄κ²λ νμ¬ μΆ©λμ λ°©μ§νλ λ°©λ²μ΄λ€.
- ν΄μ μΆ©λμ΄ λ°μνμ λ κ·Έμ κ°μ λ²ν· μ°κ²° 리μ€νΈμ λ§μ§λ§ λ Έλλ‘ ν΄λΉ κ°μ μΆκ°ν΄μ£ΌκΈ°λ§ νλ©΄ λλ€.

2. κ°λ°© μ£Όμλ²(open addressing)
- ν λ²ν·μλ νλμ κ°λ§ μ μ₯νκ³ , μΆ©λμ΄ λ°μνλ©΄ λ€λ₯Έ λΉ λ²ν·μ μ μ₯νμ¬ μΆ©λμ λ°©μ§νλ λ°©λ²μ΄λ€.
- μ μ₯ν λ€μ λ²ν·μ μ°Ύλ λ°©λ²μΌλ‘ μ ν νμ¬λ²(linear probing), μ κ³± νμ¬λ²(quadratic probing), μ΄μ€ ν΄μ±(double hashing)μ΄ μλ€.
- μ ν νμ¬λ²μ λ§κ·Έλλ‘ μμ°¨μ μΌλ‘ λΉ λ²ν·μ μ°Ύλ λ°©λ²μ΄λ€.
+) JSμ Object, Map, Setμ ν΄μ ν μ΄λΈμΌκΉ?
- λ§μ λ νΌλ°μ€λ€μ 보면 JSμ Object, Map, Setμ΄ ν΄μ ν μ΄λΈμ΄λΌκ³ μ΄μΌκΈ°νλλ° μλ°ν μ΄μΌκΈ°νμλ©΄ μλλ€.
JS Object λ ν΄μ ν μ΄λΈμ΄ μλλ€
- V8 μμ§μ ν¬ν¨ν λλΆλΆμ μλ°μ€ν¬λ¦½νΈ μμ§μ λμ μ±λ₯μ μν΄ ν΄μ ν μ΄λΈκ³Ό μ μ¬νμ§λ§ ν΄μ ν μ΄λΈλ³΄λ€ λμ λ°©λ²μΌλ‘ Objectλ₯Ό ꡬννλ€.
- Objectλ ν€-κ° μμ λ°μ΄ν° μ§ν©μ΄λΌλ μ μ κ°μ§λ§, μλ°μ€ν¬λ¦½νΈ μμ§μ΄ Objectλ₯Ό ν΄μ ν μ΄λΈμ μλ¦¬λ‘ μ€ννμ§ μκΈ° λλ¬Έμ ν΄μ ν μ΄λΈμ΄ μλλ€.
JS Map, Set μ ν΄μ ν μ΄λΈμ΄ μλλ€
The specification requires maps to be implemented "that, on average, provide access times that are sublinear on the number of elements in the collection". Therefore, it could be represented internally as a hash table (with O(1) lookup), a search tree (with O(log(N)) lookup), or any other data structure, as long as the complexity is better than O(N).
The specification requires sets to be implemented "that, on average, provide access times that are sublinear on the number of elements in the collection". Therefore, it could be represented internally as a hash table (with O(1) lookup), a search tree (with O(log(N)) lookup), or any other data structure, as long as the complexity is better than O(N).
- Map, Setμ MDN λ¬Έμλ₯Ό 보면 ECMAScript λͺ μΈμμλ Mapκ³Ό Setμ΄ λ³΅μ‘λκ° μ νμκ°λ³΄λ€ λΉ λ₯Έ μλ£κ΅¬μ‘°λ‘ ꡬνλ μ μλ€κ³ λμμλ€.
- μ¦, JS μμ§μ΄ Map, Setμ μ΄λ»κ² ꡬννλμ§μ λ¬λ €μμΌλ©° λ°λμ ν΄μ ν μ΄λΈλ‘ λμνλ€κ³ λ§ν μλ μλ€.
- V8μ Map, Setμ λ°μ΄ν° μ κ·Όμ λν μκ° λ³΅μ‘λκ° O(1)μ΄κΈ° λλ¬Έμ ν΄μν μ΄λΈκ³Ό λΉμ·νλ€κ³ μ¬κ²¨μ§λ κ²μΌ λΏμ΄λ€.
μ°Έκ³
- λ Έλ§λ μ½λ - κ°λ°μλΌλ©΄ κΌ μμμΌν Hash Table μ λͺ¨λ κ²!
- μ¬μ΄ μ½λ - λ§΅(map)κ³Ό ν΄μ ν μ΄λΈ(hash table) ν΅μ¬λ§ λͺ¨μ보기! λ§΅κ³Ό ν΄μ ν μ΄λΈ(a.k.a ν΄μ λ§΅)μ 20λΆκ° μμ£Όμμ£Όμμ£Ό μμ°¨κ² μ€λͺ ν©λλ€!!
- ν΄μ μΆ©λ
- [DS] ν΄μν μ΄λΈ (Hash Table)
- μλ£κ΅¬μ‘° | ν΄μ ν μ΄λΈ hash table
- Data Structures: Hash Tables
- Map
- Set