장점
단점
주요 용도
충돌: 서로 다른 키가 동일한 해시 값을 가지는 경우
충돌을 해결하기 위한 대표적인 방법
Chaining 기법
Chaining 예제
hash_table = [[] for _ in range(10)]
def insert(key, value):
index = hash(key) % len(hash_table)
hash_table[index].append((key, value))
def get(key):
index = hash(key) % len(hash_table)
for k, v in hash_table[index]:
if k == key:
return v
return None
Linear Probing 기법
Linear Probing 예제
def **init**(self, size):
self.size = size
self.table = [None] \* size
def hash_function(self, key):
return key % self.size
def insert(self, key, value):
index = self.hash_function(key)
# 충돌 시 다음 슬롯 탐색
while self.table[index] is not None:
index = (index + 1) % self.size
self.table[index] = (key, value)
def get(self, key):
index = self.hash_function(key)
while self.table[index] is not None:
if self.table[index][0] == key:
return self.table[index][1]
index = (index + 1) % self.size
return None
# 테스트
hash_table = LinearProbingHashTable(5)
hash_table.insert(10, "value1")
hash_table.insert(15, "value2") # 충돌 발생
print(hash_table.get(10)) # 출력: value1
print(hash_table.get(15)) # 출력: value2
Quadratic Probing (제곱 탐사)
Double Hashing (이중 해싱)
dict
)와 집합(set
)은 해시 테이블 기반으로 동작.hash_table = {}
hash_table["name"] = "Alice"
hash_table["age"] = 25
print(hash_table["name"]) # 출력: Alice
unique_nums = set([1, 2, 2, 3])
print(unique_nums) # 출력: {1, 2, 3}