Python &引用;“大O”;这个二次幂函数的
以下函数的“大O”是什么?我的假设是O(log(n)),但我想再次检查。该函数仅确定其参数是否为2的幂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功能)
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”的值是多少)。