서로 다른 두 key가 같은 버킷으로 해싱될 수 있는데, 이를 **충돌(collision)**이라 합니다. hash table은 충돌을 해결하고 버킷이 혼잡해지기 전에 **리사이징(resizing)**함으로써 평균 O(1)을 유지하며, 이는 **적재율(load factor)**로 제어됩니다.
충돌 해결
text
분리 연결법(separate chaining): 각 버킷이 리스트를 가짐
[3] -> ("cat",9) -> ("rat",2) # 둘 다 3으로 해싱됨
개방 주소법(open addressing): 다음 빈 슬롯으로 탐사
hash=3 점유됨 -> 4 시도 -> 5 시도 ... (선형 탐사)
적재율과 리사이징
text
적재율 α = 항목 수 / 버킷 수
α 증가 -> 충돌 증가 -> 조회 느려짐
α가 임계값(예: 0.75)을 초과하면:
-> 더 큰 array를 할당(보통 2배)
-> 기존 모든 key를 새 버킷으로 REHASH
python
():
old = .buckets
.buckets = [] * ((old) * )
entry all_entries(old):
._insert(entry.key, entry.value)
