[μλ£κ΅¬μ‘°] ν΄μ¬ ν μ΄λΈ with Python
π‘ ν΄μ¬ ν μ΄λΈ?
: ν΄μν μ΄λΈμ ν€μ λν λ°μ΄ν°λ₯Ό μ μ₯νλ λ°μ΄ν°κ΅¬μ‘°μ΄λ€.
: ν€λ₯Ό ν΄μν¨μλ‘ μ°μ°νμ¬ ν΄μ κ°μ μμλ΄κ³ , μ΄λ₯Ό κΈ°λ°μΌλ‘ ν€μ λν λ°μ΄ν°κ°μ μμλΌ μ μλ€.
: μ¦, ν€λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ°λ‘ μμλΌ μ μμ΄ μλκ° νκΈ°μ μΌλ‘ λΉ¨λΌμ§λ€.
: νμ΄μ¬μ λμ λ리 νμ μ΄ λ°λ‘ ν΄μν μ΄λΈκ΅¬μ‘°λ‘ ꡬν λμ΄μλ€.
π‘ ν΄μ¬ ν μ΄λΈ ꡬννκΈ°
class Dict:
def __init__(self):
self.items = [None] * 8
def put(self, key, value):
index = hash(key) % len(self.items)
self.items[index] = value
def get(self, key):
index = hash(key) % len(self.items)
return self.items[index]
my_dict = Dict()
my_dict.put("test", 3)
print(my_dict.get("test")) # 3μ΄ λ°ν
π‘ ν΄μ¬ ν μ΄λΈμ νΉμ§
[ μ₯μ ]
1) ν€λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ°λ‘ μμλΌ μ μμ΄ μ μ₯/μ½κΈ° μλκ° κ΅μ₯ν λΉ¨λΌμ§λ€.
-> λ°°μ΄μ κ²½μ°μλ λͺ¨λ μμλ€μ νλμ© νμν΄μΌνλ€.
2) ν΄μλ ν€μ λν λ°μ΄ν°κ° μλμ§ νμΈμ΄ μ¬μ(μ€λ³΅ 체ν¬)
[ λ¨μ ]
1) μ μ₯ 곡κ°μ΄ λ§μ΄ νμνλ€.
-> 곡κ°κ³Ό νμμκ°μ λ§λ°κΎΈλ κΈ°λ²μ΄λ€.
2) λ°μ΄ν° 곡κ°μ μκ² μ‘μΌλ©΄ μΆ©λμ΄ λ°μν μ μλ€.
-> ν€μ ν΄λΉνλ μ£Όμκ° λμΌν κ²½μ°, μΆ©λμ ν΄κ²°νκΈ° μν λ³λμ μλ£κ΅¬μ‘°κ° νμνλ€.
-> νλ¨μ ν΄μν μ΄λΈμ μΆ©λ ν΄κ²° μ°Έκ³
[ μ£Όμ μ©λ ]
1) κ²μμ΄ λ§μ΄ νμν κ²½μ°
2) μ μ₯/μμ /μ½κΈ°κ° λΉλ²ν κ²½μ°
3) μΊμ¬ ꡬνμ(μ€λ³΅ 체ν¬κ° λΉ λ₯΄κ² κ°λ₯νκΈ° λλ¬Έ)
π‘ ν΄μ ν μ΄λΈμ μΆ©λ ν΄κ²°
1) Open hashing(κ°λ°© ν΄μ)
: μΆ©λμ΄ λ°μν λ°μ΄ν°μ λν΄μλ ν΄μν μ΄λΈ λ°μ μΆκ°μ μΈ λ°μ΄ν°κ³΅κ°μ μ μ₯νλ λ°©λ²μ΄λ€.
open hashingμ λνμ μΈ μλ channingκΈ°λ²μ΄ μλ€.
channing κΈ°λ²μμλ μΆ©λμ΄ μΌμ΄λλ©΄ linked listλ₯Ό μ΄μ©ν΄μ λ€μ μ°κ²°μμΌ μ μ₯νλ€.
μ΄λ μΌλ§νΌ μΆ©λμ΄ μΌμ΄λ μ§λ₯Ό λͺ°λΌμ λ°°μ΄μ΄ μλ linked listλ₯Ό μ΄λ€.

2) Linear Probing(νμ ν΄μ)
: ν΄μ ν μ΄λΈμ λΉ κ³΅κ°μ μ μ₯νλ λ°©λ²μ΄λ€.
: hash addressμ λ€μλΆν° 맨 μ²μ λμ€λ λΉκ³΅κ°μ μ μ₯νλ€.
: μ μ₯κ³΅κ° νμ©λλ₯Ό λμΌ μ μλ€λ μ₯μ μ΄ μλ€.
π‘ ν΄μ ν μ΄λΈμ μκ°λ³΅μ‘λ
1) μΌλ°μ μΈ κ²½μ° O(1)
2) μ΅μ μ κ²½μ°(μΆ©λμ΄ λͺ¨λ μΌμ΄λλ κ²½μ°) O(n)
νμ§λ§ ν΄μ ν μ΄λΈμ κ²½μ° μΌλ°μ μΈ κ²½μ°λ₯Ό κΈ°λνκ³ λ§λ€κΈ° λλ¬Έμ μκ° λ³΅μ‘λλ O(1)μ΄λΌκ³ ν μ μλ€.