Python集合操作的时间复杂度?
3 个回答
16
操作 in
的速度应该和容器的大小无关,也就是说,它的时间复杂度应该是 O(1),前提是有一个好的哈希函数。对于Python中的字符串,这个说法应该是 几乎 成立的。对字符串进行哈希处理是非常重要的,Python在这方面应该做得很好,所以你可以期待接近最佳的效果。
21
其他回答没有提到集合上的两个重要操作:并集和交集。在最坏的情况下,并集的时间复杂度是O(n+m),而交集的时间复杂度是O(min(x,y)),前提是集合中没有太多元素有相同的哈希值。你可以在这里找到常见操作的时间复杂度列表:https://wiki.python.org/moin/TimeComplexity
162
根据Python的维基页面:时间复杂度,集合(set)是用哈希表来实现的。所以你可以期待查找、插入和删除操作的平均时间复杂度是O(1)。不过,如果你的哈希表的负载因子太高,就会出现碰撞,这时候时间复杂度就变成O(n)了。
附注:出于某种原因,他们声称删除操作是O(n),这看起来像是个笔误。
再附注:这对于CPython是正确的,而pypy则是另一个故事。