嗨,所以我试图在下面给出这些函数的Big O表示法的时间复杂度,但是我不太清楚如何去做。我得到了前2个,但最后3个我不知道如何解决它。
对于R1,我解决了它。对于小于它的数字,该函数运行3次,对于低于它的数字运行3次,依此类推。然后它出来3 ^ n。因此它的O(3 ^ n)
对于R2,它将是O(log n),因为每次迭代它都会减半。我使用1024代表n这样做了。 1024 - > 5+(512) - > 5 + 5 +(256)等等得到5 * log2n,即O(log n)
对于R3我认为它是O(log log n),因为有些推理我有点理解并且不太懂,而且它只是在猜测。因为它是多个sqrts我决定它是log log n。但是我不知道如何正确地解决这个或其他功能(R4,R5)。我对算法很新。非常感谢帮助和解释,谢谢!
def R1(n):
if (n == 0):
return 1
else:
return R1(n-1) * R1(n-1) * R1(n-1)
def R2(n):
if (n == 0):
return 1
if (R2(n//2) >= 5):
return R2(n//2) + 5
else:
return 5
def R3(n):
if (n <= 1):
return 1
sum=0
for ii in range(int(math.sqrt(n))):
sum += R3(int(math.sqrt(n)))
return sum
def R4(n):
if (n <= 1):
return 1
count = 1
tmp = R4(n//2)
for jj in range(n):
ii=1;
while (ii<n):
if (tmp < math.exp(ii+jj)):
count += 1
ii*=2
return R4(n//2) * (count % 2)
def R5(n):
if (n == 0): return 1
if (n == 1): return 3
return R5(n-1) + R5(n-2)*R5(n-2)