← 질문 목록
#217깊이 0
해시 충돌이 발생했을 때의 해결책은 무엇인가?
자료구조 · 알고리즘기초
체이닝은 한 버킷에 여러 값을 잇는다. 오픈 어드레싱은 배열 안에서 다른 빈 칸을 찾는다.
| 기준 | 체이닝 | 오픈 어드레싱 |
|---|---|---|
| 저장 방식 | 연결 리스트 사용 | 배열 내 빈 공간 탐색 |
| 성능 저하 | 메모리 오버헤드 | 클러스터링 현상 |
| 삭제 처리 | 리스트에서 제거 | 삭제 마커로 관리 |
체이닝은 버킷에 여러 데이터를 연결해 저장한다. 데이터가 많아지면 리스트가 길어져 탐색 시간은 O(N)으로 늘어난다. 자바 8 이후 HashMap처럼 한 버킷이 임계치를 넘으면 리스트를 레드-블랙 트리로 바꾸는 구현도 있다. 해시 테이블 일반의 동작은 아니다.
오픈 어드레싱은 빈 칸을 찾을 때까지 다른 칸을 탐색한다. 선형 탐색을 쓰면 데이터가 뭉치는 클러스터링이 발생해 성능이 급격히 떨어진다. 이를 막기 위해 2차 해시 함수를 쓰거나 무작위로 탐색하는 방식을 사용한다.
추천 꼬리질문
관련 질문
- 해시 테이블의 평균 O(1)이 무너지는 경우는?자료구조 · 알고리즘해시 테이블의 시간 복잡도가 무너지는 이유는 해시 충돌이 빈번하게 발생하기 때문이다.
- 해시 충돌 발생 시 해결 방법은 무엇인가?자료구조 · 알고리즘두 질문 모두 해시 충돌 해결 방법이라는 동일한 개념을 다루고 있다.
- 해시 충돌을 해결하는 두 방식의 차이는 무엇인가?자료구조 · 알고리즘두 질문 모두 해시 충돌 해결책이라는 동일한 개념을 다루고 있다.
- 해시 충돌이 생기면 어떤 방법으로 푸는가?자료구조 · 알고리즘해시 충돌 발생 시 해결을 위해 사용하는 방법이라는 동일한 주제를 다룹니다.
- HashMap은 해시 충돌을 어떤 방식으로 처리하는가?언어 · 런타임