【发布时间】:2016-01-19 05:10:07
【问题描述】:
以下函数的“大 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
【问题讨论】:
-
这似乎是
O(1),因为它进行了固定计算,然后返回True或False。 -
但计算不是基于 x @TimBiegeleisen 的变量
-
函数是 O(log(x)) (因为将 x 转换为 double 是 O(log x)),而且对于大 x 也会产生错误的结果。例如,
pow_of_2(2 ** 1000)返回 False。 -
我认为您对运行时间分析感到困惑。该函数只是计算一个日志然后返回。这是一个持续的惩罚。如果你有一个循环,或者其他类型的结构,那么运行时间就不会是恒定的。
-
我和蒂姆在一起。 O(1)。它是其他任何东西都没有任何意义,因为问题中没有任何东西是“n”。有一个标量变量 (
x),你只能用它做固定数量的操作(不管 "x" 有什么值)。
标签: python time-complexity big-o