Hash 为什么是hastable';在最坏的情况下,s的再灰化复杂性可能是二次的
我不明白为什么hastable的再灰化复杂性在最坏的情况下可能是二次的: 任何帮助都将不胜感激 谢谢只是一些基本知识:Hash 为什么是hastable';在最坏的情况下,s的再灰化复杂性可能是二次的,hash,stl,hashset,unordered-set,Hash,Stl,Hashset,Unordered Set,我不明白为什么hastable的再灰化复杂性在最坏的情况下可能是二次的: 任何帮助都将不胜感激 谢谢只是一些基本知识: 哈希冲突是指两个或多个元素采用相同的哈希。这可能导致最坏情况下的O(n)操作 我不会再深入讨论这个问题了,因为人们可以找到很多解释。基本上所有元素都可以有相同的散列,因此在该散列中有一个包含所有元素的大链表(当然,在链表上搜索是O(n)) 它不必是链表,但大多数实现都是这样做的 再哈希创建一个具有所需大小的新哈希表,并基本上为旧表中的每个元素进行插入(可能有更好的方法,但我相
O(n)
操作
我不会再深入讨论这个问题了,因为人们可以找到很多解释。基本上所有元素都可以有相同的散列,因此在该散列中有一个包含所有元素的大链表(当然,在链表上搜索是O(n)
)
它不必是链表,但大多数实现都是这样做的n
插入,查看0
,然后1
,然后2
,然后…,然后n-1
元素,即0+1+2+…+n-1
=n*(n-1)/2
=O(n2)
您不能将其优化为O(n)
?对我来说,您可以这样做是有道理的,但即使如此,这并不意味着所有实现都必须这样做。当使用哈希表时,通常假定不会有太多的冲突(即使这种假设是幼稚的),从而避免了最坏情况下的复杂性,从而减少了对额外复杂性的需要,从而避免了重复使用O(n2)
1:对于所有可能的仇恨者,很抱歉引用而不是(对于其他所有人-CPlusPlus众所周知是错误的),但是我在那里找不到这个信息(因此,当然,它可能是错误的,但我希望不是,在这种情况下它确实有意义)。因为散列冲突。