Cuckoo Hash Table
Cuckoo Hash Table은 해시 충돌 문제를 해결하기 위해 개발된 해시 테이블의 한 종류로, 두 개 이상의 해시 함수를 사용하여 각 키에 대해 여러 개의 가능한 위치를 제공한다.
특징
- 다중 해시 함수: 일반적으로 두 개 이상의 해시 함수를 사용한다.
- 결정적 성능: 최악의 경우에도 일정한 시간 복잡도를 보장한다.
- 동적 재배치: 충돌 발생 시 기존 항목을 다른 위치로 이동시킨다.
장점
- 빠른 검색 속도: O(1) 시간 복잡도로 검색 연산을 수행한다.
- 공간 효율성: 높은 로드 팩터를 유지할 수 있다.
- 삭제 연산 지원: Bloom Filter와 달리 효율적인 삭제가 가능하다.
단점
- 삽입 연산의 복잡성: 최악의 경우 무한 루프에 빠질 수 있어 재해싱이 필요할 수 있다.
- 구현의 복잡성: 일반 해시 테이블에 비해 구현이 더 복잡하다.
응용
- 데이터베이스 인덱싱
- 네트워크 라우팅 테이블
- 캐시 시스템
- 스팸 필터링
동작 원리
삽입:
- 첫 번째 해시 함수로 위치를 계산하여 삽입을 시도한다.
- 충돌 발생 시, 기존 항목을 두 번째 해시 함수로 계산된 위치로 이동시킨다.
- 이 과정을 반복하며, 필요시 재해싱을 수행한다.
검색:
- 두 개의 해시 함수로 계산된 위치만 확인하면 된다.
삭제:
- 두 위치를 확인하여 항목을 찾아 삭제한다.
구성 요소
- 해시 테이블: 일반적으로 두 개의 테이블을 사용한다.
- 해시 함수: 각 테이블에 대한 별도의 해시 함수를 사용한다.
- 키-값 쌍: 저장되는 데이터 단위이다.
구현 방식
Cuckoo Hash Table은 주로 배열을 사용하여 구현된다.
각 배열은 하나의 해시 테이블을 나타내며, 일반적으로 두 개 이상의 배열을 사용한다.
주요 연산들의 동작 과정
삽입 (insert):
- 첫 번째 해시 함수로 위치를 계산하여 삽입을 시도한다.
- 해당 위치가 비어있으면 삽입을 완료한다.
- 충돌 시, 기존 항목을 두 번째 해시 함수로 계산된 위치로 이동시킨다.
- 이 과정을 반복하며, 일정 횟수 이상 반복되면 재해싱을 수행한다.
검색 (lookup):
- 두 개의 해시 함수로 계산된 위치를 확인한다.
- 둘 중 하나의 위치에서 키를 찾으면 성공, 아니면 실패이다.
삭제 (delete):
- 검색과 동일한 방식으로 항목을 찾는다.
- 항목을 찾으면 해당 위치의 값을 삭제한다.
예시 코드
|
|