Tôi đang viết một chương trình ngay bây giờ để tạo bốn số nguyên 32 bit không dấu như đầu ra từ một hàm nhất định. Tôi muốn băm bốn số nguyên này, vì vậy tôi có thể so sánh đầu ra của hàm này với các đầu ra trong tương lai.Chức năng băm cho bốn số nguyên không dấu (C++)
Tôi đang gặp sự cố khi viết chức năng băm phong nha. Khi tôi viết mã này ban đầu, tôi đã ném vào một bổ sung đơn giản của mỗi trong bốn số nguyên, mà tôi biết sẽ không đủ. Tôi đã thử một số kỹ thuật khác, chẳng hạn như dịch chuyển và thêm, không có kết quả. Tôi nhận được một băm, nhưng nó có chất lượng kém, và chức năng tạo ra một tấn va chạm.
Đầu ra băm có thể là số nguyên 32 bit hoặc 64 bit. Hàm trong câu hỏi tạo ra hàng tỷ băm, do đó va chạm là một vấn đề thực sự ở đây, và tôi sẵn sàng sử dụng một biến lớn hơn để đảm bảo rằng có ít va chạm nhất có thể.
Có ai giúp tôi tìm ra cách viết hàm băm chất lượng không?
"Tôi muốn băm bốn số nguyên này, vì vậy tôi có thể so sánh đầu ra của hàm này với các đầu ra trong tương lai". Không nhất thiết phải tuân theo. Nếu bạn đang thử nghiệm một hàm xuất chuỗi, bạn sẽ không phải băm đến 32 hoặc 64 bit để thực hiện các phép thử hồi quy. Trong trường hợp của bạn, bạn đang cho mình một nhức đầu để tiết kiệm 50% không gian lưu trữ (giả sử bạn sử dụng 64 bit thay vì 128). Nó có đáng không? Bạn đã thử sử dụng gzip thay thế chưa? –
Bạn đã cân nhắc sử dụng một hoặc nhiều hàm băm mục đích chung sau đây: http://www.partow.net/programming/hashfunctions/index.html –