Big O符号中每个python集合操作的时间复杂度是多少?
我正在使用Python的set type对大量项目进行操作。我想知道每个操作的性能将如何受到集合大小的影响。例如,add和成员资格测试:
myset = set()
myset.add('foo')
'foo' in myset
谷歌搜索并未发现任何资源,但仔细考虑Python集合实现的时间复杂性似乎是合理的。
如果存在,那么this之类的链接就会很棒。如果没有这样的东西,那么也许我们可以解决它?
用于查找所有设置操作的时间复杂度的额外标记。
答案 0 :(得分:30)
根据Python wiki: Time complexity,设置实施为hash table。因此,您可以期望在 O(1)平均值中查找/插入/删除。除非您的哈希表的加载因子太高,否则您将面临冲突和O(n)。
P.S。由于某种原因,他们声称O(n)的删除操作看起来像是错误的。
P.P.S。这对CPython来说是正确的,pypy是different story。
答案 1 :(得分:4)
操作in
应独立于容器的大小,即。 O(1) - 给出最佳散列函数。对于Python字符串,这应该接近为真。散列字符串总是很关键,Python应该很聪明,因此你可以期待接近最佳的结果。
答案 2 :(得分:2)
其他答案不涉及集合上的2个关键操作:并集和相交。在最坏的情况下,如果集合中没有相同散列的元素不多,则并集取O(n + m),而交集取O(min(x,y))。常见操作的时间复杂度列表可在此处找到:https://wiki.python.org/moin/TimeComplexity