【发布时间】:2021-02-19 11:54:32
【问题描述】:
def g3(n):
s = 0
i = 1
while i < n:
i *= 2
s += i
return s
def f3(n):
s = []
i = 2
while (i < n):
s.append(g3(i))
i *= i
return s
我正在尝试计算函数f3 的时间和空间复杂度,我得到了一些错误的答案,但我不知道我的错误在哪里,最终答案是时间复杂度:O(log(n)),空间复杂性O(log(log(n)))。
我的工作:
首先我决定计算函数g3 的时间复杂度,因为f3 在循环内调用它。 i 的值在 k 迭代之后是 2^k 并且它在 2^k >= n 时停止,这意味着 k=log(n)。所以现在我知道g3 的时间复杂度是log(n)。
继续循环内的f3,i 的值是2,4,16,256 或换句话说2^(2^k),它在2^(2^k) >= n 时停止,所以我们得到k = log(log(n))。
现在为了计算f3 的整个时间复杂度,我知道函数f3 总共调用了g3 log(log(n)) 次。所以时间复杂度应该是这样的:
[log(2^(2^0))+log(2^(2^1))+...+log(2^(2^(log(log(n)))]*log(n)
请注意,所有这些都乘以log(n),因为每个调用在g3 中迭代log(n) 次(或者至少我是这样理解的)。
现在我被困在这里,因为我觉得我走了这么远并犯了一些错误,我无法计算出总时间复杂度,也看不到它是O(log(n)),我非常感谢任何帮助或反馈。
在此先感谢大家!
【问题讨论】:
标签: python time-complexity space-complexity