해싱을 사용할 때 충돌이 발생하는 경우 다양한 방법으로 이를 해결할 수 있습니다. 아래는 대표적인 해시 충돌 해결 방법들입니다.
설명: 선형 조사법은 충돌이 발생하면 다음 인덱스를 순차적으로 탐색하여 빈 공간을 찾는 기본적인 충돌 해결 방식입니다. 구현이 간단하고 직관적이지만, 데이터가 연속해서 저장되는 현상인 클러스터링(Clustering) 문제를 일으킬 수 있습니다. 클러스터링이 발생하면 추가 충돌이 빈번해지고 탐색 성능이 저하될 수 있습니다.
(index = 3 + 1, 3 + 2, ...)
순서로 증가시키며 빈 공간을 찾습니다.설명: 이차 조사법은 선형 조사법에서 발생하는 클러스터링 문제를 줄이기 위해 고안되었습니다. 충돌 시 이동하는 인덱스를 제곱수로 증가시켜 데이터를 분산시킵니다. 첫 번째 충돌에서는 1^2
, 두 번째 충돌에서는 2^2
만큼 인덱스를 이동합니다. 이러한 방식으로 연속된 데이터 집중을 방지합니다.
index = 3 + 1^2 = 4
, 두 번째 충돌 시 index = 3 + 2^2 = 7
등으로 이동합니다.설명: 이차 조사법 역시 고정된 이동 패턴을 사용하므로 클러스터링을 완벽히 해결하지 못합니다. 이를 보완하기 위해 이중 해싱법이 사용됩니다. 두 개의 해시 함수를 적용하여 충돌 시 각기 다른 이동 패턴을 부여하므로 탐색 경로가 다양해지고 클러스터링 현상이 줄어듭니다.
hash1(key) = key % table_size
와 hash2(key) = prime - (key % prime)
을 사용하여 (hash1(key) + i * hash2(key)) % table_size
로 이동합니다.설명: 체인법은 각 인덱스에 연결 리스트(Linked List)를 사용하여 여러 데이터를 저장하는 방식으로 충돌을 해결합니다. 충돌이 발생할 경우, 해당 인덱스에 연결 리스트로 데이터를 추가하여 관리합니다. 이렇게 하면 빈 공간을 따로 탐색할 필요가 없으며, 해시 테이블의 크기보다 더 많은 데이터를 저장할 수 있어 오버플로우 문제도 줄일 수 있습니다.
list[5]
에 연결 리스트 형태로 데이터를 추가하여 저장합니다.이와 같은 다양한 충돌 해결 방법들이 해시 테이블의 효율적인 사용을 위해 활용됩니다. 각 방법은 특정 상황에 따라 장단점이 있으며, 목적과 데이터 특성에 맞게 선택하여 사용하는 것이 중요합니다.