Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将集合转换为冻结集的复杂性_Python_Set_Time Complexity_Frozenset - Fatal编程技术网

在Python中将集合转换为冻结集的复杂性

在Python中将集合转换为冻结集的复杂性,python,set,time-complexity,frozenset,Python,Set,Time Complexity,Frozenset,在Python中“冻结”集合的计算复杂度是多少 例如,第二行在 a = {1,2,3} b = frozenset(a) 需要O(n)时间吗?或者它只是一个在固定时间内创建的“视图”b不是a的视图。您可以通过以下方式进行检查: 因此,b中的更改不会反映在a中。当然,你可以自己测试一下。由于frozenset将iterable作为参数,因此它必须迭代每个参数。这是一个O(n)过程 顺便说一句,frozenset没有什么特别之处,即使从set创建set也有O(n)时间复杂性: for i in [

在Python中“冻结”集合的计算复杂度是多少

例如,第二行在

a = {1,2,3}
b = frozenset(a)

需要O(n)时间吗?或者它只是一个在固定时间内创建的“视图”

b
不是
a
的视图。您可以通过以下方式进行检查:

因此,
b
中的更改不会反映在
a
中。当然,你可以自己测试一下。由于
frozenset
将iterable作为参数,因此它必须迭代每个参数。这是一个O(n)过程

顺便说一句,
frozenset
没有什么特别之处,即使从
set
创建
set
也有O(n)时间复杂性:

for i in [10**5, 10**6, 10**7]:
    a = set(range(i))
    %timeit set(a)

100 loops, best of 3: 3.33 ms per loop
10 loops, best of 3: 30.2 ms per loop
1 loop, best of 3: 421 ms per loop   

它不是一个视图,因为如果您稍后向
a
添加(..)某些内容,
b
不会更新。该构造在参数的iterable所具有的元素数量上是线性的。因此构造为O(n)。对于单个元素,插入可能会像O(n)一样糟糕,但摊销成本是O(1)。为什么不简单地创建一个大型集合并尝试一下呢?从一次测试来看,这应该是非常明显的。
for i in [10**5, 10**6, 10**7]:
    a = set(range(i))
    %timeit set(a)

100 loops, best of 3: 3.33 ms per loop
10 loops, best of 3: 30.2 ms per loop
1 loop, best of 3: 421 ms per loop