지금은 특정 함수의 출력으로 4 개의 부호없는 32 비트 정수를 생성하는 프로그램을 작성하고 있습니다. 이 4 개의 정수를 해쉬하고 싶기 때문에이 함수의 출력을 미래의 출력과 비교할 수 있습니다.4 개의 부호없는 정수에 대한 해시 함수 (C++)
그래도 괜찮은 해시 함수를 작성하는 데 문제가 있습니다. 처음에이 코드를 작성했을 때, 필자는 4 개의 정수 각각을 간단히 추가하여 던졌습니다. 나는 이동 및 추가와 같은 몇 가지 다른 기술을 사용해 보았습니다. 해시를 얻지 만 품질이 떨어지며 함수가 많은 충돌을 발생시킵니다.
해시 출력은 32 비트 또는 64 비트 정수일 수 있습니다. 문제의 함수는 수십억 개의 해시를 생성하므로 여기서는 충돌이 실제 문제이며 더 큰 변수를 사용하여 가능한 한 적은 충돌이 발생하도록합니다.
아무도 내가 품질 해시 함수를 작성하는 방법을 알아낼 수 있습니까?
"이 4 개의 정수를 해시하고 싶기 때문에이 함수의 출력을 향후 출력과 비교할 수 있습니다." 꼭 따라야하는 것은 아닙니다. 문자열을 출력하는 함수를 테스트하는 경우 회귀 테스트를 수행하기 위해 32 비트 또는 64 비트로 해시하지 않아도됩니다. 귀하의 경우 50 %의 저장 공간을 절약하기 위해 두통을 피고 있습니다 (128 대신 64 비트 사용). 그만한 가치가 있니? 대신 gzip을 사용해 보셨습니까? –
다음 일반 용도의 해시 함수 중 하나 이상을 사용하는 것이 좋습니다 : http://www.partow.net/programming/hashfunctions/index.html –