반응형
- Hash table에서 Collision 해결 방법은?
- 대표적인 방법으로 2개가 있다.
- open addressing
- 충돌 발생 시 규칙에 따라 table의 비어있는 slot을 찾는다.
- slot를 찾는 방법은 3가지가 있다.
- Linear Probing
- Quadratic Probing
- Double Hashing
- separete chaining
- linked list를 사용한다.
- 충돌 발생 시 노드(slot)을 추가해 데이터를 저장한다.
- Open addressing
- 충돌이 발생하면 규칙에 따라 table의 비어있는 slot을 찾는다.
- linked List나 tree를 사용하지 않는다.
- 때문에 separate chaining에 비해 메모리를 적게 사용한다.
- Linear Probing, 선형 조사법
- 충돌이 발생한 해시값에서 일정 값만큼 건너 뛰어 비어있는 slot에 데이터를 저장한다.
- Quadratic Probing, 이차 조사법
- 충돌이 발생한 해시값에서 제곱수로 건너 뛰어 비어있는 slot을 찾는다.
- 위 두 방법은 충돌 횟수가 증가하면 데이터가 몰리게 되는 클러스터링 현상이 발생되는데 이것을 해결하기 위해 Double Hashing을 사용한다.
- Double Hashing, 이중, 중복 해시
- 충돌 발생 시 문제를 해결할 때 주로 사용한다.
- 말 그대로 2개의 해시 함수를 사용한다.
- 첫 함수로 해시 값을 얻고, 두 번째 값은 충돌이 발생할 때 탐사 이동폭을 얻기 위해 사용한다.
- Separate chaining
- 해시 함수를 통해 나온 해시 값을 그대로 Key에 저장하는 게 아니라 그 값을 node(slot)에 연결한다.
- 즉, Linked list 형식으로 연결을 하게 된다.
- 시간복잡도
- 삽입은 linked list에 node를 추가해 데이터를 저장하기 때문에 O(1)이다.
- 조회는 기본은 O(1)이지만 최악은 O(n)이 될 수 있다.
- 최악인 경우는 n개의 key가 해시값이 모두 다 같을 때 n의 linked list가 생성되는 경우이다.
- 삭제는 삭제를 위해 조회를 해야하니, 조회랑 같다.
기출로 대비하는 개발자 전공면접 [CS 완전정복] 을 참고해서 공부하였습니다.
반응형
'노트 > CS 노트' 카테고리의 다른 글
[CS 노트] : Hash table에 대해서 (0) | 2022.04.08 |
---|---|
[CS 노트] : 이진 탐색 트리에 대해서 (0) | 2022.04.06 |
[CS 노트] : Queue와 Priority Queue 비교 (0) | 2022.04.02 |
[CS 노트] : Queue 2개를 사용해 Stack을 구현하라 (3) | 2022.04.01 |
[CS 노트] : Stack으로 Queue를 구현하기 (0) | 2022.03.31 |
댓글