Pythonでこの階乗関数の空間複雑度はどうあるべきですか?
def fact(n):
product = 1
for i in range(2, n+1):
product = product * i
return product
C のような他の言語でのこの同じ考え方は、O(1) 空間の複雑さをもたらしますが、この例では、range(2,n+1) は O(n) 空間の複雑さの空間複雑さをもたらしますか?
Pythonでこの階乗関数の空間複雑度はどうあるべきですか?
def fact(n):
product = 1
for i in range(2, n+1):
product = product * i
return product
C のような他の言語でのこの同じ考え方は、O(1) 空間の複雑さをもたらしますが、この例では、range(2,n+1) は O(n) 空間の複雑さの空間複雑さをもたらしますか?
py2.x ではrange
リストが返されるため、for ループは実際にはそのリストを反復処理しています。したがって、それはO(N)
メモリの観点からです。
xrange
一度に 1 つのアイテムを返すここで使用できます。
ヘルプxrange
:
xrange(start, stop[, step]) -> xrange object
Like range(), but instead of returning a list, returns an object that
generates the numbers in the range on demand. For looping, this is
slightly faster than range() and more memory efficient.