这个2次幂函数的“大O”

时间:2016-01-19 05:10:07

标签: python time-complexity big-o

以下功能的“大O”是什么?我的假设是它是O(log(n)),但我想仔细检查。该函数只是确定其参数是否为2的幂。

def pow_of_2(x):
    a = math.log(x, 2)
    if a == math.floor(a):
       return True
    else:
       return False

1 个答案:

答案 0 :(得分:5)

该函数的Big-O不是恒定时间。

函数的Big-O将与函数math.log的Big-O相同。这基本上取决于功能的实现。 (math.floor函数可以在恒定时间内实现。)

log函数通常使用泰勒级数展开计算,并且为O(M(n) * n^0.5),其中M(n)是乘以两个n位数字的复杂性。

有关此问题的详情,请查看此link

注意:如果您想检查数字是否为2的幂,您需要做的就是使用二进制算术进行以下检查

def pow_of_2(x):     return((x&(x - 1))== 0)

基本上,您需要检查二进制表示中是否将一位设置为1。有关其工作原理的更详细说明是here