2012-05-29 16 views
11

Tôi đang tìm hàm băm tốc độ cao với phân bố tốt (gần đồng nhất) để sử dụng trong triển khai bảng băm.Thuật toán băm để thực hiện bảng băm

Bảng băm sẽ được sử dụng riêng để lưu trữ giá trị bằng khóa nguyên.

Tôi có thể sử dụng các bit dưới của số nguyên làm băm không?

ví dụ: int key = n & 15; và tạo một mảng với 16 vị trí để lưu trữ chúng.

Bất kỳ đề xuất nào?

+12

Không có chức năng nào như hàm băm hoàn hảo. Tuy nhiên, nếu bạn muốn một số thuật toán với mã nguồn tương ứng, hãy xem tại đây: http://partow.net/programming/hashfunctions/index.html –

+0

Lấy các bit thấp nhất có lẽ là điều tồi tệ nhất để làm. (nhưng: tất cả phụ thuộc vào phạm vi giá trị bạn mong đợi trong khóa int của bạn) Hãy thử trộn trong các bit trên là tốt, hoặc nhân với một số đủ lớn (lẻ, nguyên tố). Biết những gì mong đợi và đo lường nó. – wildplasser

+0

Đăng bình luận của bạn như là một câu trả lời và tôi sẽ chấp nhận nó. –

Trả lời

3

Bạn có thể xem tại đây xxhash

hàm băm nói của bạn rất nhanh, nhưng nó là rất xấu quá. Nếu bạn muốn có hàm băm "ngu ngốc", bạn có thể xem xét mô đun.

Ví dụ:

int key = item % size_of_hash_table 
+2

Tại sao "nó" xấu? –

0

Vâng, đêm qua tôi đã thực hiện một thử nghiệm băm linh hoạt (trong C) trong đó bao gồm nhiều hashers top-gun và 38 phím khác nhau.

Tất cả các bạn đều được chào đón để benchmark nó tại địa chỉ: http://www.overclock.net/t/1319572/benchmarking-the-fastest-hash-function/0_20#post_18495990

Tôi sẽ vui mừng cho tiết lộ cách Intel vs AMDIntel 12.1 biên dịch vs Microsoft 16 (VS2010) kết hợp trình biên dịch xử với sự giúp đỡ của bạn.