문제 10 · 개별 체이닝
문제 10 [3점]
개별 체이닝separate chaining에 대해 서술하시오.
풀이 및 해설
개별 체이닝이란
해시 충돌collision을 해결하는 방법 중 하나로, 해시 테이블의 각 칸(버킷)에 연결 리스트(또는 다른 보조 자료구조)를 두고, 같은 해시 값으로 매핑되는 원소들을 그 리스트에 모두 이어 붙인다. 즉 테이블의 한 칸은 하나의 원소가 아니라 "그 슬롯으로 해싱된 원소들의 리스트"를 가리킨다.
연산
- 삽입:
번 버킷의 리스트 맨 앞에 추가 → . - 탐색/삭제:
번 버킷의 리스트를 순회 → 리스트 길이에 비례.
적재율load factor
특징(장·단점)
- 장점
- 개방 주소법과 달리 적재율이 1을 넘어도(원소가 버킷보다 많아도) 동작한다. 테이블이 "가득 차서 삽입 실패"하는 일이 없다.
- 삭제가 간단하다(리스트에서 노드만 제거). 개방 주소법처럼 삭제 표식(tombstone)이 필요 없다.
- 군집화(clustering) 문제가 없다.
- 단점
- 각 노드마다 포인터를 추가로 저장해야 해 메모리 오버헤드가 있고, 리스트를 따라가므로 캐시 지역성이 나쁘다.
- 적재율이 커지면 리스트가 길어져 탐색이 느려진다. 이를 막으려면
를 낮게 유지하도록 재해싱(rehash) 이 필요하다.
적재율을 적절히(예: