我有一个问题,假设gdc(i,n)的时间和空间复杂度为O(1),此函数的空间复杂度是多少? 由于for循环,时间复杂度为O(n)。 空间复杂度如何?答案是O(1),但我不明白为什么...导致for循环占用n个空间,所以不应该是O(n)吗?
def gcd_fun(n):
for i in range(1, n+1):
result += gcd(i, n)
return result
答案 0 :(得分:2)
这取决于您的python版本。如果您使用的是python 2,它将为range函数创建列表。列表分别需要O(n)的存储复杂度。否则,如果您使用的是python 3,它将创建生成器。
更新:正如Vineeth所说,范围不是迭代器。很抱歉误导。
根据文档:
与常规列表或元组相比,范围类型的优势在于,范围对象将始终占用相同(少量)的内存,无论其表示的范围大小如何(因为它仅存储开始,停止和步长值,并根据需要计算各个项目和子范围。