문제 11 · 완전 해싱
문제 11 [4점]
완전 해싱perfect hashing은 앞으로 들어올
풀이 및 해설
해소하려는 불합리
일반 해싱은 충돌을 완전히 없앨 수 없어, 최악의 경우 여러 원소가 한 슬롯에 몰리면 탐색이
방법: 2단계 해싱(FKS 기법)
- 1차 해시: 원소
개를 크기 인 1차 테이블로 해싱한다. 이때는 충돌을 허용한다. 번 슬롯에 들어간 원소 수를 라 하자. - 2차 해시: 각 1차 슬롯
마다 별도의 작은 2차 테이블을 두되, 그 크기를 로 잡는다. 이 슬롯의 원소들에 대해 충돌이 하나도 없는 2차 해시 함수를 (임의 함수 몇 번 시도로) 찾아 배정한다.
왜 이것이 불합리를 해소하는가
탐색: 원소를 찾을 때 1차 해시 한 번, 2차 해시 한 번, 총 두 번의 해시로 끝난다. 각 2차 테이블 안에는 충돌이 없으므로 최악에도
이 보장된다. → 탐색 성능의 불합리 해소.공간: 슬롯 하나만 보면
는 커 보이지만, 1차 해시를 잘 고르면 이 되도록 만들 수 있다(기댓값 논증). 따라서 전체 공간은로, 선형 공간만 쓴다. → 공간 낭비의 불합리 해소.
정리하면 완전 해싱은 2단계 해시 + 2차 테이블 크기