我正在实现基于哈希的磁盘索引,将字符串映射到对象。为了在哈希表中找到合适的存储桶,我使用了线性探测,并将输入字符串的哈希与哈希表中存储的字符串进行比较。
此方法的主要问题是两个不同的字符串可以轻松地哈希为相同的值。因此,为了确保找到正确的存储桶,我不仅需要比较散列,还必须在数据文件中查找条目,并确保存储在其中的字符串等于键字符串。如果不是,那么我将继续迭代哈希表。
此方法有效,但似乎很浪费,因为我必须在哈希文件和数据文件本身中都进行查找,以检查字符串是否存在。
我听说您可以做的是使用两个不同的哈希函数对字符串进行哈希处理,并将这两个哈希存储在哈希文件中。然后,争论变得很明显,对于两个哈希函数,两个不同的字符串散列为相同值的可能性在天文学上很低。因此,哈希文件中的条目如下所示:
h1(s1) h2(s2) ptr1
h1(s2) h2(s2) ptr2
...
要检查是否找到了密钥k的正确存储桶,请检查h1(k) == h1(p) && h2(k) == h2(p)
。
我的问题是,该方案是否有效,因为它对我来说似乎很可疑。如果有效,在文献中是否有描述?