Tôi có một ứng dụng ngôn ngữ C mà tôi cần thực hiện tra cứu bảng.Tra cứu bảng băm - với băm hoàn hảo, trong C
Các mục nhập là chuỗi, Tất cả đều được biết khi bắt đầu thời gian chạy. Bảng được khởi tạo một lần, và sau đó nhìn lên nhiều lần. Bảng có thể thay đổi, nhưng về cơ bản nó giống như ứng dụng bắt đầu lại. Tôi nghĩ rằng điều này có nghĩa là tôi có thể sử dụng một băm hoàn hảo? Nó là ok để tiêu thụ một thời gian cho khởi tạo hashtable, vì nó xảy ra chỉ một lần.
Sẽ có từ 3 đến 100.000 mục nhập, mỗi mục duy nhất và tôi ước tính rằng 80% trường hợp sẽ có ít hơn 100 mục nhập. Một tra cứu ngây thơ đơn giản là "đủ nhanh" trong những trường hợp đó. (== không ai phàn nàn)
Tuy nhiên trong trường hợp có 10k mục +, tốc độ tra cứu của cách tiếp cận ngây thơ là không thể chấp nhận. Cách tiếp cận tốt để cung cấp hiệu suất tra cứu dựa trên hashtable tốt cho các chuỗi trong C là gì? Giả sử tôi không có thư viện thương mại bên thứ ba như Boost/etc. Tôi nên sử dụng thuật toán băm nào? làm thế nào để tôi quyết định?
http://www.gnu.org/s/gperf/? –
Ngoài ra http://cmph.sourceforge.net/ – Nemo