Skip to content

문제 10 · 개별 체이닝

문제 10 [3점]

개별 체이닝separate chaining에 대해 서술하시오.

풀이 및 해설

개별 체이닝이란

해시 충돌collision을 해결하는 방법 중 하나로, 해시 테이블의 각 칸(버킷)에 연결 리스트(또는 다른 보조 자료구조)를 두고, 같은 해시 값으로 매핑되는 원소들을 그 리스트에 모두 이어 붙인다. 즉 테이블의 한 칸은 하나의 원소가 아니라 "그 슬롯으로 해싱된 원소들의 리스트"를 가리킨다.

연산

  • 삽입: h(k) 번 버킷의 리스트 맨 앞에 추가 → O(1).
  • 탐색/삭제: h(k) 번 버킷의 리스트를 순회 → 리스트 길이에 비례.

적재율load factor λ=원소 수 N버킷 수 M 이 평균 리스트 길이가 되므로, 균일한 해시라면 탐색의 기대 비용은 O(1+λ) 이다.

평균 탐색 비용=O(1+λ),λ=N/M

특징(장·단점)

  • 장점
    • 개방 주소법과 달리 적재율이 1을 넘어도(원소가 버킷보다 많아도) 동작한다. 테이블이 "가득 차서 삽입 실패"하는 일이 없다.
    • 삭제가 간단하다(리스트에서 노드만 제거). 개방 주소법처럼 삭제 표식(tombstone)이 필요 없다.
    • 군집화(clustering) 문제가 없다.
  • 단점
    • 각 노드마다 포인터를 추가로 저장해야 해 메모리 오버헤드가 있고, 리스트를 따라가므로 캐시 지역성이 나쁘다.
    • 적재율이 커지면 리스트가 길어져 탐색이 느려진다. 이를 막으려면 λ 를 낮게 유지하도록 재해싱(rehash) 이 필요하다.

적재율을 적절히(예: λ1) 유지하면 모든 기본 연산이 평균 O(1) 로 동작한다.

PDF