2010-03-23 9 views
5

triển khai hashtable tốt cho C là gì? Tôi cần phải sử dụng nó với trình biên dịch mpicc. Chức năng xóa là không cần thiết.Triển khai Hashtable cho C

+0

Không, thực sự. Hơn nữa, hashtable sẽ là bất biến. – Alex

+0

Không thay đổi theo nghĩa 'đã được tạo và không thay đổi sau'. – Alex

+0

Dữ liệu có được biết đến lúc biên dịch không? Sau đó, bạn có thể sử dụng trình tạo băm hoàn hảo như Remo.D được đề xuất. – quinmars

Trả lời

4

Một trong số glib rất đẹp. Không chắc chắn nếu nó quá lớn và/hoặc có thể cô lập từ phần còn lại của glib, mặc dù.

Nếu không, Pearson hashing có vẻ là điểm khởi đầu tốt để thực hiện của riêng bạn (đó là hàm băm được tối ưu hóa cho máy có đăng ký 8 bit).

+0

glib là tốt đẹp nhưng nó quá lớn mà tôi sẽ không đề nghị để bao gồm nó trong dự án của bạn chỉ cho điều đó. Nếu bạn cũng cần tất cả các tính năng khác glib có, mặc dù, tôi đồng ý rằng sẽ là con đường để đi. –

3

Nếu tất cả các phím đều đã biết trước, bạn có thể sử dụng trình tạo mã vạch perfect hash tránh chi phí không gian ẩn trong bảng băm.

Nếu, mặt khác, bạn thực sự cần một bảng băm đầy đủ, tôi sẽ đề xuất một biến thể của Cuckoo Hashing (ví dụ: phiên bản d-ary).

Tôi đã sử dụng với sự hài lòng một phiên bản đơn giản của Hopscotch Hashing hoạt động khá tốt ngay cả ở các yếu tố tải cao hơn.