将列表转换为在 Python 中设置的渐近复杂度

Asymptotic complexity of converting list to set in Python

关于这个已经有,答案是渐近复杂度为O(n)。但我观察到,如果将未排序的列表转换为集合,则可以按排序顺序打印出集合,这意味着在这些操作中间的某个时刻,列表已经排序。那么,由于任何比较排序都有 Omega(n lg n) 的下界,因此该操作的渐近复杂度也应该是 Omega(n lg n)。那么这个操作的复杂度到底是多少?

Python 中的一组是 unordered collection,因此您看到的任何顺序都是偶然的。由于 dictset 都作为 CPython 中的哈希表实现,插入是平均情况 O(1) 和最坏情况 O(N)。

所以 list(set(...)) 总是 O(N) 而 set(list(...)) 是平均情况 O(N)。

您可以浏览 set here.

的源代码