Skip to content

문제 11 · 뻐꾸기 해싱

문제 11 [4점]

뻐꾸기 해싱cuckoo hashing의 장점(1점), 약점(1점), 개선 방법(1점)과 개선 방법의 한계(1점)를 서술하시오.

풀이 및 해설

뻐꾸기 해싱이란

두 개(이상)의 해시 함수 h1,h2 와 (보통) 두 개의 테이블을 쓴다. 키 kh1(k) 또는 h2(k) 둘 중 한 자리에만 존재한다. 삽입하려는 자리에 이미 다른 키가 있으면 그 키를 쫓아내고(뻐꾸기가 알을 밀어내듯) 내가 들어가며, 쫓겨난 키는 자신의 다른 후보 자리로 이동한다. 이 밀어내기가 연쇄적으로 일어난다.

장점

  • 조회(lookup)가 최악에도 O(1): 키는 h1(k), h2(k) 두 자리만 확인하면 되므로, 있든 없든 상수 시간에 판정된다. 삭제도 O(1).

약점

  • 삽입이 불안정: 밀어내기가 사이클을 이루면 무한 반복(재해싱 필요)이 될 수 있고, 적재율이 일정 임계치(두 함수·두 테이블일 때 약 50%)를 넘으면 삽입 실패·재구성 비용이 급증한다. 즉 삽입의 최악 성능이 보장되지 않는다.

개선 방법

  • 자리마다 여러 키를 담는 버킷(bucket, k-way) 을 두거나, 해시 함수를 3개 이상으로 늘린다. 이렇게 하면 각 키의 후보 자리가 많아져 밀어내기 사이클 확률이 낮아지고, 적재율을 90% 이상까지 끌어올릴 수 있다.

개선 방법의 한계

  • 버킷·해시 함수를 늘리면 조회 시 확인해야 할 자리(캐시 접근) 수가 늘어 상수 인자가 커진다. 또한 어떤 방식이든 적재율이 충분히 높아지면 삽입 실패는 여전히 발생하며, 그때는 테이블을 키워 전체 재해싱을 해야 하는 최악의 비용을 완전히 없앨 수는 없다.
조회 최악 O(1) 보장삽입 최악 성능은 미보장(재해싱 가능)
PDF