Tôi sẽ trở nên què quặt ở đây và đưa ra một câu trả lời lý thuyết hơn là câu trả lời chỉ bằng pin nhưng hãy lấy giá trị trong đó.
Đầu tiên có hai vấn đề riêng biệt:
a. Khả năng va chạm b. Hiệu suất của băm (ví dụ: thời gian, chu kỳ cpu, v.v.)
Hai vấn đề được san hô nhẹ. Chúng không hoàn toàn tương quan.
Sự cố xảy ra với sự khác biệt giữa hashee và không gian băm kết quả. Khi bạn băm một file 1KB (1024 bytes) tập tin và băm có 32 byte sẽ có:
1,0907481356194159294629842447338e + 2466 (tức là một số với 2466 số không) kết hợp khả dĩ của đầu vào tập tin
và băm không gian sẽ có
1,1579208923731619542357098500869e + 77 (tức là một số với 77 số không)
Sự khác biệt là rất lớn. có 2389 khác biệt giữa chúng. CÓ S COL ĐƯỢC THU THẬP (một va chạm là một trường hợp đặc biệt khi hai tập tin đầu vào KHÁC sẽ có cùng một băm chính xác) vì chúng tôi đang giảm 10^2466 trường hợp xuống còn 10^77 trường hợp.
Cách duy nhất để giảm thiểu rủi ro collison là để phóng to không gian băm và do đó để làm cho hahs dài hơn. Lý tưởng nhất là băm sẽ có chiều dài tập tin nhưng điều này là bằng cách nào đó đạo đức.
Vấn đề thứ hai là hiệu suất. Điều này chỉ đề cập đến thuật toán của hàm băm. Ofcourse rằng một băm dài hơn sẽ hầu hết có thể yêu cầu nhiều chu kỳ CPU nhưng một thuật toán thông minh hơn có thể không.Tôi không có câu trả lời rõ ràng cho câu hỏi này. Nó quá khó khăn.
Tuy nhiên, bạn có thể đo điểm chuẩn/đo lường các triển khai băm khác nhau và rút ra kết luận trước từ điều này.
Chúc may mắn;)
Nguồn
2008-10-31 00:57:16
Xin được cụ thể hơn về những gì bạn đang cố gắng để băm. –
Trang sau đây có một số triển khai các hàm băm mục đích chung có hiệu quả và thể hiện các va chạm tối thiểu: http://partow.net/programming/hashfunctions/index.html –
@Matthieu N Làm thế nào bạn có thể nhận được chính xác 15 upvotes mỗi khi bạn đăng bài này? – nawfal