是否会出现在线性列表中搜索关键字比哈希表更快的实例?
我基本上想知道是否存在一个边缘情况,在线性列表中搜索关键字的速度会快于哈希表搜索。
谢谢!
答案 0 :(得分:2)
在哈希表中搜索实际上并不总是恒定时间。如果散列函数与数据匹配不佳,则可能会发生大量冲突,并且在极端情况下每个数据项具有相同的散列值,结果看起来很像线性搜索。根据细节,这种有效的线性搜索可能比对数组中的数据进行线性搜索更慢。 (例如,open addressing具有二次探测序列,这使得处理器缓存的使用率很低,可能比在阵列上进行线性搜索要慢。)
以下是一个真实案例的示例,其中所有密钥都在同一个存储桶中结束:Java bug 4669519。
答案 1 :(得分:0)
是的,在极少数元素的情况下。想想哈希是如何工作的。它必须计算散列以查找存储桶,然后搜索该存储桶中的列表。此外,它可能是一个复杂的多级哈希等等。因此,您可以在线性列表中搜索比哈希查找算法更多的工作。
另一个例子是,您要查找的元素始终位于列表的开头或附近。根据你正在做的事情,它可能会发生。
还有其他人,但这应该可以帮助你思考。
不过,不要混淆。哈希通常是你想要的。