什么情况下使用哈希表可以提高性能,什么情况下不能?哪些情况不适合使用哈希表?
什么情况下使用哈希表可以提高性能,什么情况下不能?
如果您有理由关心,请使用哈希表和您正在考虑的其他任何内容来实现,将您的实际数据放入其中,并衡量哪个性能更好。
也就是说,如果哈希表具有您需要的操作(即您不希望按排序顺序迭代它,或者将其快速与另一个哈希表进行比较),并且具有数百万或更多(数十亿、数万亿...)元素,那么它可能是您的最佳选择,但很大程度上取决于哈希表实现(尤其是封闭式哈希与开放式哈希的选择)、对象大小、哈希函数质量和计算成本/运行时间)、比较成本、奇怪之处计算机在不同缓存级别的内存性能...简而言之:太多的事情使得即使是有根据的猜测也比测量更好的选择,当它很重要时。
哪些情况不适合使用哈希表?
主要是当:
输入无法进行哈希处理(例如,您得到了二进制 blob,但不知道其中的哪些位是重要的,但您确实有一个int cmp(const T&, const T&)
您可以使用的功能std::map
), or
可用/可能的哈希函数非常容易发生冲突,或者
-
您希望避免最坏情况下的性能影响:
您的访问模式非常专门(例如,经常对具有某种特定排序顺序“附近”的键的元素进行操作),这样缓存效率对于将它们保留在内存附近的其他存储模型(例如桶排序元素)来说更好,甚至如果您不完全依赖排序顺序,例如迭代
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)