Keys to Indices

Separate Chaining


충돌(collision)은 서로 다른 키가 같은 버킷 인덱스를 받는 사건이다. 체이닝(chaining)은 각 버킷에 작은 목록을 두어 충돌한 키와 값 쌍을 함께 저장하고, 찾을 때는 선택된 버킷 안에서만 키를 비교한다.

충돌가능한 키가 버킷보다 많으면 적어도 한 버킷은 여러 키를 받는다.
저장과 탐색h(k)로 버킷을 고른 뒤 그 안에서 같은 키를 찾는다.
비용버킷 길이를 b라 하면 O(1 + b)이며 한 버킷에 몰리면 O(n)이다.

충돌한 키는 같은 버킷의 목록에 차례로 붙는다

단계를 옮기면 키 하나를 h(k) = k mod 11로 넣고, 그 버킷의 길이와 충돌 여부가 바뀐다.

행 하나가 버킷이며 왼쪽 칸이 인덱스다. 초록 테두리 칸은 방금 넣은 키, 파란 칸은 같은 버킷에 먼저 있던 키다.

get(k)는 선택된 버킷 안의 키만 비교한다

찾을 키를 바꾸면 h(k) = k mod 4로 고른 버킷과 그 안에서 비교하는 키, 비교 횟수, 결과가 바뀐다.

행 하나가 버킷이다. 초록 테두리 칸은 찾은 키, 파란 칸은 비교했지만 다른 키, 흐린 행은 보지 않은 버킷이다.