Skip to content

문제 11 · 뻐꾸기 해싱 ​

문제 11 [4점]

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

풀이 및 해설

뻐꾸기 해싱이란

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

장점

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

약점

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

개선 방법

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

개선 방법의 한계

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