1. ν΄μ(Hash)λ?
ν΄μλ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² κ²μν μ μλλ‘ νΉμ κ°μ κ³ μ ν μ μκ°(ν΄μκ°)μΌλ‘ λ³ννλ κ³Όμ μ. μ΄ κ³Όμ μ μΌλ°©ν₯ ν¨μλ‘, μ λ ₯κ°μ ν΄μκ°μΌλ‘ λ³ννμ§λ§ ν΄μκ°μμ μ λ ₯κ°μ 볡μν μ μμ.
2. ν΄μλ§΅(Hash Map)
- ν΄μλ§΅μ ν€(key)μ κ°(value)μ μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£ κ΅¬μ‘°μ.
- νμ΄μ¬μμλ λμ λ리(Dictionary) κ° ν΄μλ§΅μ ν΄λΉν¨. ν€λ ν΄μκ°μΌλ‘ λ³νλμ΄ λΉ λ₯Έ μ‘°νκ° κ°λ₯ν¨.
μ¬μ© μ΄μ
- λΉ λ₯Έ μ‘°ν: ν΄μλ§΅μ νκ· μ μΌλ‘ O(1)μ μκ° λ³΅μ‘λλ‘ λ°μ΄ν°λ₯Ό μ‘°νν μ μμ.
- μ€λ³΅μ νμ©νμ§ μμ: ν€κ° μ€λ³΅λμ§ μκΈ° λλ¬Έμ μ μΌν λ°μ΄ν°λ₯Ό μ μ₯ν μ μμ.
- ν¨μ¨μ±: λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ΄λ¦¬νλλ° λ§€μ° ν¨μ¨μ μ.
κ΄λ ¨ ν¨μ λ° λ©μλ
- dict.get(key, default=None): ν€μ ν΄λΉνλ κ°μ λ°ν. ν€κ° μμΌλ©΄ default κ°μ λ°ν.
- dict[key]: ν€μ ν΄λΉνλ κ°μ λ°ν. ν€κ° μμΌλ©΄ KeyError λ°μ.
- dict.update(other_dict): λ€λ₯Έ λμ λ리μ νλͺ©μ νμ¬ λμ λ리μ μΆκ°ν¨.
- dict.items(): λμ λ리μ λͺ¨λ (key, value) μμ λ°νν¨.
- dict.keys(): λμ λ리μ λͺ¨λ ν€λ₯Ό λ°νν¨.
- dict.values(): λμ λ리μ λͺ¨λ κ°μ λ°νν¨.
3. ν΄μμ (Hash Set)
- ν΄μμ μ μ€λ³΅λμ§ μλ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£ κ΅¬μ‘°λ‘, μ§ν©(Set)μ νΉμ±μ κ°μ.
- νμ΄μ¬μμλ set μλ£νμ΄ ν΄μμ μ ν΄λΉν¨.
μ¬μ© μ΄μ
- μ€λ³΅ λ°μ΄ν° μ κ±°: ν΄μμ μ μ€λ³΅μ νμ©νμ§ μκΈ° λλ¬Έμ κ³ μ ν λ°μ΄ν°λ₯Ό μ μ₯ν¨.
- λΉ λ₯Έ κ²μ: μ§ν©μ μμλ₯Ό O(1) μκ° λ³΅μ‘λλ‘ νμΈν μ μμ.
κ΄λ ¨ ν¨μ λ° λ©μλ
- set.add(elem): μμλ₯Ό μ μ μΆκ°ν¨.
- set.remove(elem): μ μμ μμλ₯Ό μ κ±°ν¨. μμκ° μμΌλ©΄ KeyError λ°μ.
- set.discard(elem): μμλ₯Ό μ μμ μ κ±°ν¨. μμκ° μμ΄λ μ€λ₯ λ°μνμ§ μμ.
- set.pop(): μ μμ μμμ μμλ₯Ό μ κ±°νκ³ λ°νν¨.
- set.union(other_set): λ μ μ ν©μ§ν©μ λ°νν¨.
- set.intersection(other_set): λ μ μ κ΅μ§ν©μ λ°νν¨.
- set.difference(other_set): λ μ μ μ°¨μ§ν©μ λ°νν¨.
- set.symmetric_difference(other_set): λ μ μ λμΉ μ°¨μ§ν©μ λ°νν¨.
4. ν΄μ μΆ©λ(Hash Collision)
ν΄μ ν¨μλ λ€μν μ λ ₯κ°μ κ³ μ ν ν΄μκ°μΌλ‘ λ³ννλ € νμ§λ§, κ²°κ΅ ν΄μκ°μ΄ μ€λ³΅λ μ μμ. μ΄λ₯Ό ν΄μ μΆ©λμ΄λΌκ³ νλ©°, μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ€μν λ°©λ²μ΄ μ¬μ©λ¨.
- 체μ΄λ(Chaining): μΆ©λμ΄ λ°μνλ©΄ λμΌν ν΄μκ°μ κ°μ§ νλͺ©λ€μ 리μ€νΈλ λ§ν¬λ 리μ€νΈλ‘ μ°κ²°νμ¬ μ μ₯ν¨.
- μ€ν μ΄λλ μ±(Open Addressing): μΆ©λμ΄ λ°μνλ©΄ λ€λ₯Έ λΉ μ리λ₯Ό μ°Ύμ λ°μ΄ν°λ₯Ό μ μ₯ν¨.
5. μ½λ©ν μ€νΈμμμ νμ©
- μ€λ³΅ μμ νμΈ: setμ μ΄μ©ν΄ μ€λ³΅ μμλ₯Ό λΉ λ₯΄κ² νμΈνκ³ μ κ±°ν μ μμ.
- λ 리μ€νΈμ κ΅μ§ν© ꡬνκΈ°: setμ intersection λ©μλλ₯Ό μ¬μ©νμ¬ λ 리μ€νΈμ 곡ν΅λ μμλ₯Ό λΉ λ₯΄κ² ꡬν μ μμ.
- λ¨μ΄ μΆν νμ μΈκΈ°: dictλ₯Ό μ΄μ©νμ¬ κ° λ¨μ΄μ μΆν νμλ₯Ό κ³μ°νλ λ¬Έμ λ₯Ό ν μ μμ.
μμ μ½λ
# ν΄μλ§΅ μμ
my_dict = {'apple': 3, 'banana': 2, 'orange': 5}
print(my_dict.get('apple')) # 3
print(my_dict.get('grape', 0)) # 0
# ν΄μμ
μμ
my_set = {1, 2, 3, 4}
my_set.add(5)
print(my_set) # {1, 2, 3, 4, 5}
# κ΅μ§ν© ꡬνκΈ°
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1.intersection(set2)) # {2, 3}
# λ¨μ΄ μΆν νμ μΈκΈ°
words = ["apple", "banana", "apple", "orange"]
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count) # {'apple': 2, 'banana': 1, 'orange': 1}
μμ λ΄μ©μ μ°Έκ³ νμ¬ μ½λ©ν μ€νΈμμ ν΄μμ κ΄λ ¨λ λ¬Έμ λ₯Ό ν¨μ¨μ μΌλ‘ ν΄κ²°ν μ μμ.
'Python > κ°λ μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| π [νμ΄μ¬] λ°°μ΄(List) (0) | 2025.03.20 |
|---|---|
| [Python] κ°μ²΄μ ν΄λμ€ (0) | 2021.09.22 |
| [Python] ν¨μ (0) | 2021.09.22 |
| [Python] λμ λ리μ μ (0) | 2021.09.12 |
| [Python] ννκ³Ό 리μ€νΈ (0) | 2021.09.12 |