从列表

时间:2017-03-10 04:07:52

标签: python python-3.x time-complexity big-o space-complexity

我有以下代码,我正在努力获得时间复杂度。

seen = set()
a=[4,4,4,3,3,2,1,1,1,5,5]
result = []
for item in a:
    if item not in seen:
        seen.add(item)
        result.append(item)
print (result)

据我所知,当我访问列表时,该操作的时间复杂度为O(n)。与if块一样,每次我查找该集合时都会花费另一个O(n)。整体时间复杂度O(n^2)也是如此? set.add()是否也增加了复杂性?

另外,空间复杂度是O(n)吗?因为每次遇到新元素时,集合的大小会增加吗?

非常感谢任何有关时间和空间复杂性的输入或链接。

1 个答案:

答案 0 :(得分:2)

Python中的集合实现为哈希表(类似于字典),因此inset.add()都是O(1)。 list.append() also O(1)摊销。

总的来说,这意味着时间复杂度为O(n),因为迭代超过a

空间复杂度也是O(n),因为所需的最大空间与输入的大小成正比。

有关Python集合上各种操作的时间复杂性的有用参考可以在https://wiki.python.org/moin/TimeComplexity找到...而PyCon talk The Mighty Dictionary提供了一个有趣的深入探讨Python如何实现各种O(1)复杂性设置和字典操作。