Skip to content

문제 11 · 완전 해싱

문제 11 [4점]

완전 해싱perfect hashing은 앞으로 들어올 N개의 원소를 알고 있을 때, 이들이 충돌collision하지 않도록 하는 자료구조이다. 어떠한 방법으로 어떠한 불합리를 해소하였는지 서술(각 2점)하시오.

풀이 및 해설

해소하려는 불합리

일반 해싱은 충돌을 완전히 없앨 수 없어, 최악의 경우 여러 원소가 한 슬롯에 몰리면 탐색이 O(N) 까지 나빠진다. 반대로 충돌을 확실히 막으려고 테이블을 아주 크게(N2 규모) 잡으면 탐색은 O(1) 로 보장되지만 공간이 O(N2) 로 낭비된다. 완전 해싱은 원소 집합을 미리 알고 있다(정적) 는 조건에서, 이 "탐색 최악 성능"과 "공간 낭비"의 양쪽 불합리를 동시에 해소한다.

방법: 2단계 해싱(FKS 기법)

  1. 1차 해시: 원소 N개를 크기 M=O(N) 인 1차 테이블로 해싱한다. 이때는 충돌을 허용한다. i번 슬롯에 들어간 원소 수를 ni 라 하자.
  2. 2차 해시: 각 1차 슬롯 i 마다 별도의 작은 2차 테이블을 두되, 그 크기를 mi=ni2 로 잡는다. 이 슬롯의 원소들에 대해 충돌이 하나도 없는 2차 해시 함수를 (임의 함수 몇 번 시도로) 찾아 배정한다.
2차 테이블 크기 mi=ni2각 슬롯 내부에서 충돌 확률 <12, 충돌 없는 함수를 곧 찾음

왜 이것이 불합리를 해소하는가

  • 탐색: 원소를 찾을 때 1차 해시 한 번, 2차 해시 한 번, 총 두 번의 해시로 끝난다. 각 2차 테이블 안에는 충돌이 없으므로 최악에도 O(1) 이 보장된다. → 탐색 성능의 불합리 해소.

  • 공간: 슬롯 하나만 보면 ni2 는 커 보이지만, 1차 해시를 잘 고르면 ini2=O(N) 이 되도록 만들 수 있다(기댓값 논증). 따라서 전체 공간은

    imi=ini2=O(N)

    로, 선형 공간만 쓴다. → 공간 낭비의 불합리 해소.

정리하면 완전 해싱은 2단계 해시 + 2차 테이블 크기 ni2 라는 방법으로, "최악 O(1) 탐색"과 "O(N) 공간"을 동시에 달성한다(단, 원소 집합이 미리 고정되어 있어야 한다).

PDF