O(log n)时间复杂度

时间:2019-09-17 05:51:35

标签: python time-complexity

函数power(n,p)接受一个数字和一个幂,并返回加到给定幂的数字。 此函数的复杂度必须为O(log(p))。

def power(n,p):

    if (p == 0): return 1
    elif (int(p % 2) == 0):
        return (power(n, int(p / 2)) *
               power(n, int(p / 2)))
    else:
        return (n * power(n, int(p / 2)) *
                   power(n, int(p / 2)))
print(power(2,8))

是否满足o(log n)复杂度。我真的不了解log n复杂度的工作原理

1 个答案:

答案 0 :(得分:1)

您的代码的重复关系为:

T(p) = 2 * T(p / 2) + O(1)

使用master theorem,我们得到T(p) = O(p)。因此,它不是O(log(p))


要使其成为O(log(p)),您可以执行以下操作:

def power(n, p):
    if p == 0:
        return 1

    # Call this only once, instead of two times.
    power_p_divided_by_2 = power(n, p // 2)

    if p % 2:
        return n * power_p_divided_by_2 * power_p_divided_by_2
    else:
        return power_p_divided_by_2 * power_p_divided_by_2

print(power(2, 8))

此代码的重复关系为:

T(p) = T(p / 2) + O(1)

使用master theorem,我们得到T(p)= O(log(p))。