Bảng dưới đây tóm tắt các hoạt động của các hash khác nhau chức năng mô tả ở trên, đối với ba bộ dữ liệu:
1) Tất cả các từ và cụm từ có các mục nhập trong sốTừ điển thứ hai không được lược tả của Merriam-Webster (311,141 chuỗi, độ dài trung bình 10 ký tự).
2) Tất cả các chuỗi trong/bin/,/usr/bin/,/usr/lib/,/usr/UCB/ và/usr/openwin/bin/* (66.304 chuỗi, độ dài trung bình 21 ký tự).
3) Danh sách URL được thu thập bởi trình thu thập dữ liệu web chạy trong một số giờ đêm qua (28,372 chuỗi, chiều dài trung bình 49 ký tự).
Chỉ số hiệu suất được hiển thị trong bảng là "kích thước chuỗi trung bình" trên tất cả các phần tử trong bảng băm (tức là giá trị mong đợi của số so sánh chính để tìm kiếm phần tử).
Webster's Code Strings URLs
--------- ------------ ----
Current Java Fn. 1.2509 1.2738 13.2560
P(37) [Java] 1.2508 1.2481 1.2454
P(65599) [Aho et al] 1.2490 1.2510 1.2450
P(31) [K+R] 1.2500 1.2488 1.2425
P(33) [Torek] 1.2500 1.2500 1.2453
Vo's Fn 1.2487 1.2471 1.2462
WAIS Fn 1.2497 1.2519 1.2452
Weinberger's Fn(MatPak) 6.5169 7.2142 30.6864
Weinberger's Fn(24) 1.3222 1.2791 1.9732
Weinberger's Fn(28) 1.2530 1.2506 1.2439
Nhìn vào bảng này, thì rõ ràng rằng tất cả các chức năng trừ chức năng Java hiện tại và hai phiên bản vỡ của chức năng phục vụ Weinberger của tuyệt vời, hiệu suất gần như không thể phân biệt. I phỏng đoán mạnh mẽ rằng hiệu suất này về cơ bản là "lý tưởng lý thuyết" , đó là những gì bạn sẽ nhận được nếu bạn sử dụng một trình tạo số ngẫu nhiên đúng thay cho hàm băm.
Tôi muốn loại bỏ hàm WAIS vì đặc điểm kỹ thuật của nó chứa các trang có số ngẫu nhiên và hiệu suất của nó không tốt hơn bất kỳ hàm nào đơn giản hơn nhiều so với bất kỳ hàm nào trong số . Bất kỳ hàm nào trong số sáu hàm còn lại có vẻ như là các lựa chọn tuyệt vời, nhưng chúng ta phải chọn một. Tôi cho rằng tôi sẽ loại trừ biến thể của Vo và chức năng của Weinberger vì chúng phức tạp hơn phức tạp, mặc dù nhỏ. Trong bốn chiếc còn lại, tôi có thể chọn P (31), vì nó rẻ nhất để tính toán trên một máy RISC (vì 31 là sự khác biệt của hai cường độ của hai). P (33) là tương tự rẻ để tính toán, nhưng hiệu suất của nó là nhẹ tồi tệ hơn, và 33 là composite, mà làm cho tôi một chút lo lắng.
Josh
cũng so sánh http://stackoverflow.com/questions/1835976/what-is-a-sensible-prime-for-hashcode-calculation - Tôi nghĩ rằng 31 là một lựa chọn không tồi nếu bạn viết hàm hashCode của riêng bạn. –
Nếu đó là 29, hoặc 37, hoặc thậm chí 97, bạn sẽ hỏi 'tại sao không 31?' – EJP
@EJP điều quan trọng là phải biết lý do đằng sau sự lựa chọn của không. trừ khi con số là kết quả của một thủ thuật ma thuật đen. –