因此散列表对于集合中数据的恒定时间查找非常酷,但据我所知,它们受到可能的散列冲突的限制,这会导致少量的时间复杂性。
在我看来,任何支持非有限输入范围的散列函数实际上都是减少碰撞的启发式算法。为任何输入范围创建一个完美的哈希表是否有任何绝对的限制,或者它只是没有人想到的东西?
答案 0 :(得分:0)
我认为这取决于你的意思和任何范围的输入。"
如果您的目标是创建一个可以接收任何东西并且永远不会产生碰撞的哈希函数,那么就没有办法做您要求的事情了。这是鸽笼原理的结果 - 如果你有n个可以被散列的对象,你的哈希函数需要至少n个不同的输出,或者你被迫至少得到一个哈希冲突。如果存在无限多个可能的输入对象,则不能构建总是避免冲突的有限哈希表。
另一方面,如果您的目标是构建一个散列表,其中查找是最坏情况O(1)(也就是说,您只需查看固定数量的位置以查找任何元素),那么有很多不同的选择。您可以使用dynamic perfect hash table或cuckoo hash table,它支持最坏情况的O(1)查找和预期的O(1)插入和删除。这些哈希表通过使用各种不同的哈希函数而不是任何一个固定哈希函数来工作,这有助于规避上述限制。
希望这有帮助!