我正在创建一个哈希表,并从未排序的数组中插入n
个元素。因为我正在调用哈希函数n
次。创建/插入哈希表的时间复杂度不是O(n)
吗?
我尝试到处搜索,但是他们在碰撞的情况下提到了复杂性,但是没有介绍如何在完美的情况下在O(1)
中创建哈希表,因为我必须遍历数组才能选择元素一个接一个地放在哈希表中?
答案 0 :(得分:0)
当使用完美哈希函数将新记录插入哈希表时,将立即找到未使用的索引条目(用于指向记录)给出O(1)。之后,搜索时会立即找到该记录。
当然,哈希函数很少是完美的。随着哈希索引开始变为填充,该函数有时需要两次或更多次尝试来查找未使用的索引条目以插入新记录,并且每次稍后尝试搜索该记录也将需要在正确的索引条目之前进行两次或更多次尝试找到了。因此,哈希表的实际搜索复杂度最终可能为O(1.5)或更高,但该值由搜索组成,其中记录最常见于第一次尝试,而其他可能需要两次或更多次。
我想诀窍是找到一个足够好的哈希算法"这意味着在一个不太大的指数,一个相当低的平均复杂性和一个可接受的最坏情况之间进行折衷。
我发布了另一个搜索问题here,并展示了如何使用哈希并确定好的哈希函数。该问题需要在包含16000条记录的表中查找64位值,并将其替换为记录中的其他值。从第一个值计算第二个值是不可能的。我的算法的平均搜索混合度为<1.5,最差情况为14。索引大小对我来说有点大,但我认为更详尽的搜索可能会找到更好的搜索。相比之下,二进制搜索最多需要大约两倍的时钟周期来执行查找,就像哈希函数那样,可能是因为它们的时间复杂度更高。