Python &引用;“大O”;这个二次幂函数的

Python &引用;“大O”;这个二次幂函数的,python,time-complexity,big-o,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 函数的Big-O不是常数时间 函数的Big-O与函数的Big-O相同math.log。这基本上取决于功能的实现。(可以在固定时间内实现math.floor功能)

以下函数的“大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

函数的Big-O不是常数时间

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

log
函数通常使用泰勒级数展开进行计算,它是
O(M(n)*n^0.5)
其中
M(n)
是两个n位数字相乘的复杂度

有关这方面的更多信息,请看这个

注意:如果要检查一个数字是否是
2的幂
,只需使用二进制算术进行以下检查

def pow_of_2(x): 返回((x&(x-1))==0)


基本上,您需要检查二进制表示中是否恰好有一位设置为
1
。更详细的解释是。

这似乎是
O(1)
,因为它执行固定的计算,然后返回
True
False
。但是计算不是基于x@timbiegeleisenth的变量吗?函数是O(log(x))(因为将x转换为double就是O(log x)),但也会对大x产生错误的结果。例如,
pow\u of_2(2**1000)
返回False。我认为您对运行时分析感到困惑。该函数只需计算一个日志,然后返回。这是一个持续的惩罚。如果你有一个循环,或者其他类型的结构,那么运行时间就不会是恒定的。我支持Tim。O(1)。因为问题中没有什么是“n”,所以它是其他任何东西都没有意义。只有一个标量变量(
x
),您只能使用它执行固定数量的操作(无论“x”的值是多少)。