python set操作的时间复杂度?


79

Big O表示法中每个python设置操作的时间复杂度是多少?

我正在将Python的set类型用于对大量项目的操作。我想知道每个操作的性能如何受到集合大小的影响。例如,添加,并测试成员资格:

myset = set()
myset.add('foo')
'foo' in myset

谷歌搜索并没有占用任何资源,但是合理地考虑了Python的set实现的时间复杂性是合理的。

如果它存在,到一些链接像将是巨大的。如果那里没有这样的东西,那么也许我们可以解决吗?

用于查找所有设置操作的时间复杂度的额外标记。


2
虽然GWW的链接非常有用,但是您可以通过理解python集的时间复杂性来理解它们,它们只是python字典的特殊情况(键,但没有值)。因此,如果您知道哈希映射上操作的时间复杂性,那么您就已经足够了。
野鸭2011年

Answers:


66

根据Python Wiki:时间复杂度set被实现为哈希表。因此,您可以期望以O(1)平均值查找/插入/删除。除非哈希表的负载系数太高,否则您将面临冲突和O(n)。

PS由于某种原因,他们要求O(n)进行删除操作,这看起来像是错误的输入。

PPS对于CPython来说确实如此,pypy是另一回事。


在python中设置还可以进行自动排序。那么你认为插入新的价值仍然是O(1)的时间复杂度
纳雷什·塔库尔

3
@thakurinbox您可以通过链接支持您的声明吗?
谢尔盖·罗曼诺夫斯基

5

操作in应独立于容器的大小,即 O(1) -给出最佳哈希函数 对于Python字符串,这应该几乎是正确的。散列字符串始终很关键,Python应该在那儿很聪明,因此您可以期待接近最佳的结果。


2

其他答案没有讨论关于集合的2个关键运算:并集和相交。在最坏的情况下,如果集合中没有相同散列的元素不多,则并集取O(n + m),而交集取O(min(x,y))。可以在此处找到常用操作的时间复杂度列表:https : //wiki.python.org/moin/TimeComplexity

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.