将列表转换为Python的渐进复杂性

问题描述 投票:0回答:1

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

python list set big-o complexity-theory
1个回答
0
投票

Python中的集合是unordered collection,因此您看到的任何命令都是偶然的。由于dictset都在CPython中被实现为哈希表,因此插入是平均情况O(1)和最坏情况O(N)。

因此list(set(...))始终为O(N),set(list(...))为平均情况O(N)。

您可以浏览set here的源代码。

© www.soinside.com 2019 - 2024. All rights reserved.