伙计们,我正在使用动态编程方法来解决问题。以下是该方法的简要概述
我将值存储在声明为
的哈希表中 boost::unordered_map<Key_Object, Data_Object, HashFunction> hashState;
我对算法进行了时间分析,发现运行时间几乎 95%用于检索/插入哈希表中的数据。
这些是我的哈希表的详细信息
hashState.size() 1880
hashState.load_factor() 0.610588
hashState.bucket_count() 3079
hashState.max_size() 805306456
hashState.max_load_factor() 1
hashState.max_bucket_count() 805306457
我有以下两个问题
我可以采取哪些措施来改善哈希表的插入/检索操作的性能吗?
C ++ STL有hash_multimap,也符合我的要求。在插入/检索性能方面,boost库 unordered_map 如何与 hash_multimap 进行比较。
答案 0 :(得分:0)
如果您的哈希函数不是罪魁祸首,那么您可以做的最好的事情就是使用不同的地图实现。由于您的密钥非常大,因此使用Boost.Intrusive library中的unordered_map
可能是最佳选择。或者,您可以尝试关闭散列:Google SparseHash或MCT,但肯定需要进行分析,因为当元素足够小时,建议使用闭合散列。 (SparseHash更成熟,经过充分测试,但MCT不需要那些set_empty()
/ set_deleted()
方法。
编辑:
我刚刚注意到我提到的Boost库中没有侵入式地图,只有set和multiset。不过,您可以尝试两个封闭的散列库。
编辑2:
STL hash_map
不是标准的,它可能是一些扩展,不能在编译器之间移植。
答案 1 :(得分:0)
您确定您使用的哈希函数不是瓶颈吗? 哪个时间百分比采用哈希函数? 您是否可以通过简单调用哈希来执行相同的测试并替换插入/检索。