← 질문 목록
#9깊이 0
해시 테이블의 평균 O(1)이 무너지는 경우는?
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
키가 한 버킷으로 몰릴 때다. 평균 O(1)은 해시가 고르게 흩어진다는 전제 위의 값이다. 그 전제가 깨지면 최악 O(n)으로 간다. 완화는 충돌한 것을 어떻게 담느냐와 언제 늘리느냐 두 갈래다.
| 갈래 | 하는 일 | 최악을 어디까지 |
|---|---|---|
| 담는 방식 | 한 버킷이 길어지면 연결 리스트를 트리로 | O(n) → O(log n) |
| 늘리는 시점 | load factor를 넘으면 버킷을 두 배로 | 애초에 안 몰리게 |
자바 HashMap은 둘을 함께 쓴다. 앞쪽은 이미 몰린 뒤의 방어고, 뒤쪽은 몰리기 전의 예방이다.
몰리는 이유는 둘이다. 해시 함수가 나빠서 자연히 겹치거나, 누군가 일부러 겹치게 만들거나. 뒤쪽이 해시 충돌 공격인데, 사용자 입력이 그대로 키가 되는 자리에서는 실제 공격 벡터가 된다.
늘리는 것 자체에도 값이 있다. 리사이즈는 모든 키를 다시 배치하므로 그 한 번이 무겁다. 분할 상환하면 평균은 O(1)이지만 평균이 지연을 보장하지는 않는다 — 응답 시간이 중요한 경로에서는 이 한 번이 튀는 지점으로 나타난다.
나머지 연산 대신 비트 마스크를 쓸 수 있어서다. 대신 하위 비트만 보게 되므로 해시를 한 번 더 섞어야 한다.
추천 꼬리질문
관련 질문
- 해시 충돌 발생 시 해결 방법은 무엇인가?자료구조 · 알고리즘해시 테이블의 평균 O(1)이 무너지는 핵심 원인이 해시 충돌이므로 두 개념은 직결된다.
- 해시 충돌을 해결하는 두 방식의 차이는 무엇인가?자료구조 · 알고리즘해시 충돌과 그 해결 방식은 해시 테이블의 성능 유지와 시간 복잡도에 직접적인 영향을 준다.
- 해시 충돌이 생기면 어떤 방법으로 푸는가?자료구조 · 알고리즘해시 충돌 발생 시의 해결 방법은 해시 테이블의 연산 효율성이 저하되는 상황을 다루기 위한 필수 개념이다.
- 해시 충돌이 발생했을 때의 해결책은 무엇인가?자료구조 · 알고리즘해시 충돌로 인한 성능 저하를 방지하기 위한 해결책은 해시 테이블의 시간 복잡도 분석과 밀접하다.
- 이진 탐색 트리가 한쪽으로 치우치면 무엇이 문제인가?자료구조 · 알고리즘