确定递归函数的时间复杂度

时间:2016-02-28 09:32:22

标签: python algorithm recursion

嗨,所以我试图在下面给出这些函数的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)

0 个答案:

没有答案