(1) 체이닝
: 같은 주소로 해쉬되는 원소를 모두 하나의 연결 리스트에 매달아 관리
(2) 개방주소 방법(Open Addressing)
: 개방주소 방법은 체이닝과 같은 추가 공간을 허용하지 않고 주어진 해쉬 테이블 공간 내에서 해결한다.
먼저 해쉬 함수를 계산하여 계산된 주소를 차지하고 있는 다른 원소가 없으면 그 자리에 넣고, 이미 그 자리를 차지한 원소가 있으면 정해진 규칙에 따라 다음 자리를 찾게된다.
처음 계산한 해쉬 함수를 0번째 해쉬함수, 충돌이 일어나서 다음 주소를 계산하는 것을 1번째 해쉬함수 ... 이런식으로 표현한다
(3) 선형 조사(Linear Probing)
: 선형 조사는 가장 간단한 충돌 해결 방법으로,
충돌이 일어난 바로 뒷자리를 보는 것이다.
이렇게 하면 i번째 해쉬 함수는 h(x)로 부터 i만큼 떨어진 자리가 된다.
테이블의 경계를 넘어갈 경우에는 맨 앞으로 돌아간다.
(4) 이차원 조사(Quadratic Probing)
: 이차원 조사는 바로 뒷자리를 보는 선형 조사와 달리
보폭을 이차함수에 의해 넓혀가면서 본다.
예를 들면, i번째 해쉬 함수를 h(x)로 부터 i^2만큼 떨어진 자리로 삼을 수 있다.
즉, h(x), h(x)+1, h(x)+4, h(x)+9, h(x)+16.... 과 같이 볼 수 있다.
(5) 더블 해슁(Double Hashing)
: 더블 해슁은 두 개의 함수를 사용한다.
더블 해슁에서 i번째 해쉬 함수는 다음과 같다
여기서 h(x)와 f(x)는 서로 다른 해쉬 함수이다.
충돌이 생겨 다음에 볼 주소를 계산할 때
두 번째 해쉬 함수값 만큼씩 점프를 한다
(https://images.velog.io/images/muchogusto/post/bbcfbd14-ddf1-48cc-9c74-facfeb7eca62/image.png)