Hash 有没有办法为非有限输入创建一个完美的哈希表?

Hash 有没有办法为非有限输入创建一个完美的哈希表?,hash,hashtable,Hash,Hashtable,因此,哈希表对于集合中数据的恒定时间查找来说确实很酷,但据我所知,它们受到可能的哈希冲突的限制,这会导致少量时间复杂性的增加 在我看来,任何支持非有限输入范围的哈希函数都是减少冲突的一种启发式方法。为任何范围的输入创建一个完美的哈希表有没有绝对的限制,或者这只是一个没有人知道的问题?我认为这取决于你所说的“任何范围的输入”是什么意思 如果您的目标是创建一个哈希函数,该函数可以接受任何内容,并且永远不会产生冲突,那么就没有办法满足您的要求。这是鸽子洞原理的结果——如果您有n个可以散列的对象,那么您

因此,哈希表对于集合中数据的恒定时间查找来说确实很酷,但据我所知,它们受到可能的哈希冲突的限制,这会导致少量时间复杂性的增加


在我看来,任何支持非有限输入范围的哈希函数都是减少冲突的一种启发式方法。为任何范围的输入创建一个完美的哈希表有没有绝对的限制,或者这只是一个没有人知道的问题?

我认为这取决于你所说的“任何范围的输入”是什么意思

如果您的目标是创建一个哈希函数,该函数可以接受任何内容,并且永远不会产生冲突,那么就没有办法满足您的要求。这是鸽子洞原理的结果——如果您有n个可以散列的对象,那么您的散列函数至少需要n个不同的输出,或者您被迫获得至少一个散列冲突。如果有无限多个可能的输入对象,那么就无法构建总是能够避免冲突的有限哈希表

另一方面,如果您的目标是构建一个哈希表,其中查找是最坏情况O(1)(也就是说,您只需查看固定数量的位置即可找到任何元素),那么有许多不同的选项可用。可以使用或,它支持最坏情况下的O(1)查找和预期的O(1)插入和删除。这些哈希表通过使用各种不同的哈希函数而不是任何一个固定的哈希函数来工作,这有助于规避上述限制


希望这有帮助

任何输入范围的完美哈希表都需要无限的空间。显然,这是不可行的。@PhilGabardo很想知道这一点。你能提供证据或者更多的细节/信息吗?如果这个建议的哈希表能够支持无限范围的输入,那么它的哈希函数将把每个唯一的键映射到内存中的唯一地址。因此,必须有无限的内存地址才能解释这一点。