소수가 사용되는 이유는 데이터가 특정 패턴을 나타낼 때 충돌을 최소화하기 위해서입니다.
가장 먼저해야 할 일 : 데이터가 무작위 인 경우 소수가 필요하지 않은 경우 임의의 수에 대해 mod 연산을 수행 할 수 있으며 모듈의 가능한 각 값에 대해 동일한 충돌 횟수가 발생합니다.
그러나 데이터가 무작위가 아닌 경우 이상한 일이 발생합니다. 예를 들어 항상 10의 배수 인 숫자 데이터를 고려하십시오.
mod 4를 사용하면 다음을 찾을 수 있습니다.
10 모드 4 = 2
20 모드 4 = 0
30 모드 4 = 2
40 모드 4 = 0
50 모드 4 = 2
따라서 모듈러스 (0,1,2,3)의 3 가지 가능한 값에서 0과 2 만 충돌이 발생합니다.
7과 같은 소수를 사용하면
10 모드 7 = 3
20 모드 7 = 6
30 모드 7 = 2
40 모드 7 = 4
50 모드 7 = 1
기타
또한 5는 좋은 선택이 아니라 5는 소수입니다. 이유는 모든 키가 5의 배수이기 때문입니다. 즉, 키를 나누지 않는 소수를 선택해야합니다. 보통 충분합니다.
따라서 소수가 사용되는 이유는 반복적이라는 측면에서 잘못된 것은 해시 함수의 충돌 분포에서 키의 패턴 효과를 중화하는 것입니다.