[Java] 해시함수의 충돌을 피하기 위해 테이블 사이즈를 소수, 홀수로 만들어야 하는 이유
해시함수의 충돌을 피하기 위해서는 테이블 크기를 홀수로 만들거나, 소수로 설정하거나, 크기 자체를 늘리는 것이 좋다고 한다. 그런데 강의 해주시는 교수님은 왜 충돌이 발생하는지 설명만 하고 왜 테이블 크기를 늘려야 하는건지는 설명해주지 않으셨다. 그래서 쓰는 글. 해시함수는 key값에서 정수값을 계산하는데 이 때 해시 테이블의 길이를 벗어나지 않기 위해서 테이블 길이로 해시함수의 리턴값을 모듈러(%-나머지값) 연산한다고 한다. 예를 들어 테이블의 크기가 6이고 특정 해시 함수를 사용했을 때 2의 배수를 반환한다면 2, 4, 6, 8, 10 … 가 해시함수에서 반환되는데 이를 해시 테이블 사이즈에 맞게 조정(모듈러 사용)하면 2(2%6), 4(4%6), 0(6%6), 2(8%6), 4(10%4) … 로 변..
2022. 12. 8.