문제 7 · 해시 함수 비판
문제 7 [2점]
수정이는 아래와 같은 함수를 이용하면 확률적으로 고른 분포를 보이는 좋은 해시 함수가 되지 않을까 생각했습니다. 이 함수가 해시 함수hash function로서 어떠한지 서술하세요.
여기서 random(0, 10)은 0과 10 사이의 임의의 실수real number를 생성합니다.
풀이 및 해설
결론부터 말하면 이 함수는 해시 함수로 부적절합니다. 좋은 해시 함수의 핵심 요건을 두 가지나 위반하기 때문입니다.
(1) 결정성 위반 — 가장 치명적
해시 함수는 결정적deterministic이어야 합니다. 즉 같은 키 x는 언제 계산해도 항상 같은 슬롯으로 사상되어야 합니다. 그래야 저장할 때와 조회할 때 같은 위치를 가리켜 값을 찾을 수 있습니다.
그런데 이 함수는 매 호출마다 random(0, 10)이 달라지므로, 같은 키가 매번 다른 슬롯으로 갑니다. 저장한 값을 다시 찾을 수 없어 해시 테이블hash table로서 아예 동작하지 않습니다.
(2) 실수 곱 — 정수 인덱스 보장 안 됨
슬롯 번호(배열 인덱스)는 정수여야 하는데, x × random(0,10)은 실수입니다. 정수 인덱스로 쓰려면 별도의 버림/반올림이 필요하고, 곱해지는 값이 구간에 따라 편향되면 분포도 균등하지 않게 됩니다.
좋은 해시 함수의 요건
| 요건 | 의미 |
|---|---|
| 결정성deterministic | 같은 키 → 항상 같은 값 |
| 균등성uniformity | 슬롯에 고르게 분산 |
| 효율성efficiency | 빠르게 계산 |
"확률적으로 고른 분포"를 노린다며 난수를 넣은 것이 오히려 결정성을 깨뜨려 해시 함수의 가장 기본 요건을 무너뜨렸습니다.