我使用杂音哈希在哈希表中存储150,000个单词 我正在使用线性探测来解决程序中的冲突。我认为如果哈希表的大小很大,那么就会有大量的空闲空间,而且我不需要长时间探测。但奇怪的事情发生了。当哈希表的大小为250,000时,我获得了最快的运行时间。之后运行时间增加。为什么会这样?
答案 0 :(得分:2)
虽然Robert涵盖了一般性问题(Locality),但问题可能是 Spatial Locality 。
当你有一个较小的哈希表时,它适合缓存。当您有一个非常大的哈希表时,每次查找都会出现页面错误的高风险。如果您出现页面错误,那么您的操作系统需要暂停执行,直到内存管理单元可以将块从较慢的访问内存复制到更靠近CPU的缓存。
在极端情况下,较慢的访问内存甚至可能是操作系统提供的磁盘上资源。
答案 1 :(得分:1)
"散列表通常表现出较差的引用位置 - 也就是说,要访问的数据在内存中看似随机分布。由于哈希表会导致跳转的访问模式,因此可能会触发导致长时间延迟的微处理器缓存未命中。如果表格相对较小且密钥紧凑,则使用线性搜索搜索的数组等紧凑数据结构可能更快。最佳性能点因系统而异。" - https://en.wikipedia.org/wiki/Hash_table