运行 转换列表以在 Python 中设置的时间
Running time for converting list to set in Python
在 Python 中,如果将列表转换为集合,运行 时间和 space 复杂度是多少?
Example:
data = [1,2,3,4,5,5,5,5,6]
# this turns list to set and overwrites the list
data = set(data)
print data
# output will be (1,2,3,4,5,6)
你必须遍历整个列表,这是 O(n) 时间,然后将每个列表插入到一个集合中,这是 O(1) 时间。所以总的时间复杂度是O(n),其中n是列表的长度。
除了正在创建的集或正在使用的列表之外,不需要其他space。
将列表转换为集合需要访问列表中的每个项目一次,O(n)。向集合中插入一个元素是 O(1),所以整体时间复杂度是 O(n)。
Space 新集合要求小于或等于列表的长度,所以也是O(n)。
这是一个很好的 reference Python 数据结构。
正如其他人关于运行时所述,整个列表的集合创建时间为 O(N),每个项目的集合存在检查为 O(1)。
但是他们关于列表和集合之间内存使用相同的评论是不正确的。
在 python 中,集合可以使用比列表多 3 到 10 倍的内存。将内存使用增长设置为 O(N),但它总是至少比列表多 3 倍。可能是因为需要将所有这些哈希值保存在内存中。
相关:
在 Python 中,如果将列表转换为集合,运行 时间和 space 复杂度是多少?
Example:
data = [1,2,3,4,5,5,5,5,6]
# this turns list to set and overwrites the list
data = set(data)
print data
# output will be (1,2,3,4,5,6)
你必须遍历整个列表,这是 O(n) 时间,然后将每个列表插入到一个集合中,这是 O(1) 时间。所以总的时间复杂度是O(n),其中n是列表的长度。
除了正在创建的集或正在使用的列表之外,不需要其他space。
将列表转换为集合需要访问列表中的每个项目一次,O(n)。向集合中插入一个元素是 O(1),所以整体时间复杂度是 O(n)。
Space 新集合要求小于或等于列表的长度,所以也是O(n)。
这是一个很好的 reference Python 数据结构。
正如其他人关于运行时所述,整个列表的集合创建时间为 O(N),每个项目的集合存在检查为 O(1)。
但是他们关于列表和集合之间内存使用相同的评论是不正确的。
在 python 中,集合可以使用比列表多 3 到 10 倍的内存。将内存使用增长设置为 O(N),但它总是至少比列表多 3 倍。可能是因为需要将所有这些哈希值保存在内存中。
相关: