在Python中,当我将集合转换为列表时,此类任务的算法复杂度是多少?它只是对集合进行类型转换,还是需要将项目复制到不同的数据结构中?发生什么事了?
我很想知道复杂性是恒定的,就像 Python 中的许多东西一样。
大多数情况下,时间复杂度为 O(n),其中 n 是集合的大小,因为:
但是,需要注意的是,Python 的集合的底层数组大小基于集合对象拥有的最大大小,而不一定基于其当前大小;这是因为当从集合中删除元素时,基础数组不会重新分配为较小的大小。如果一个集合很小但曾经很大,那么对其进行迭代可能会比 O(n) 慢。
复杂度是线性的,因为所有引用都被复制到新容器。但只有引用和是而不是对象 - 这对于大对象来说可能很重要。
由于它是用
hashtable
实现的,理论上最坏情况的复杂度为 O(n^2)。根据列表中的项目,散列操作可能会尝试将它们全部分配到相同的内存插槽,在这种情况下,它会迭代冲突链以查找可用空间。虽然我不确定实现这种情况需要什么样的项目列表。