基于可变的循环极限调用f时的时间复杂度是多少?
示例代码:
def rec(i,j,k,n):
for h in range(1,j):
f(i,j,k,h)// function call O(1)
if k<=n:
rec(i+1,j+i+1,k+j+1,n)
else:
pass
使用i = 0,j = 0,k = 0并传递n的程序
rec(0,0,0,n)
答案 0 :(得分:1)
i
与通话深度呈线性增长。
j
集成了i
,因此随着通话深度的增加而平方增长
k
集成了j
,因此随着通话深度的增加而立方增长。
因此,到达的最大深度为 ϴ(n ^(1/3))
还有深度为 n ^ 1/3/2 的 ϴ(n ^ 1/3)个呼叫,使其他呼叫相形见。
这些调用每次都在循环中花费 ϴ(n ^ 2/3)时间,因此最终复杂度为 ϴ(n ^ 1/3 * n ^ 2/3)= ϴ(n)
所以这很棘手,但是需要线性时间。不过,您确实应该做一个实验来确认。