根据维基百科和谷歌发现的各种.edu网站等多个来源,哈希表解决冲突的最常见方式是线性探测、二次探测和链接法。虽然随机探测被简单地提到了一下,但并没有受到太多关注。我已经实现了一个使用随机探测解决冲突的哈希表。假设存在冲突,则解决方法如下:
此外,由于哈希的大小通常是地址空间的大小(32位机器上为32位),因此在良好的哈希方案下,不可能在完整的32位哈希空间中放入足够多的项以导致大量的哈希冲突。
那么,为什么随机探测是如此不受欢迎的冲突解决策略呢?
- 使用对象的完整(32位)哈希来种子化线性同余随机数生成器。
- 生成器生成32位数字,并取模以确定在哈希表中下一个要探测的位置。
此外,由于哈希的大小通常是地址空间的大小(32位机器上为32位),因此在良好的哈希方案下,不可能在完整的32位哈希空间中放入足够多的项以导致大量的哈希冲突。
那么,为什么随机探测是如此不受欢迎的冲突解决策略呢?