标签: 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
答案 0 :(得分:5)
该函数的Big-O不是恒定时间。
函数的Big-O将与函数math.log的Big-O相同。这基本上取决于功能的实现。 (math.floor函数可以在恒定时间内实现。)
math.log
math.floor
log函数通常使用泰勒级数展开计算,并且为O(M(n) * n^0.5),其中M(n)是乘以两个n位数字的复杂性。
log
O(M(n) * n^0.5)
M(n)
有关此问题的详情,请查看此link。
注意:如果您想检查数字是否为2的幂,您需要做的就是使用二进制算术进行以下检查
2
def pow_of_2(x): return((x&(x - 1))== 0)
基本上,您需要检查二进制表示中是否将一位设置为1。有关其工作原理的更详细说明是here。
1