更好的方法来找到2的权力

时间:2014-11-20 09:17:23

标签: python exponential

我是python的新手。 1 << n总是优于2 ** n吗?为什么或者为什么不?

有没有更好的方法来找到2的权力?

2 个答案:

答案 0 :(得分:4)

与时间复杂度相比,

<<**的工作方式几乎相同,可以看到结果, 当值小时,pow工作得更快,但对于较大的值,它会很慢

In [108]: %timeit pow(2, 2)
10000000 loops, best of 3: 127 ns per loop

In [104]: timeit 1<<2
10000000 loops, best of 3: 23.2 ns per loop

In [105]: timeit 2**2
10000000 loops, best of 3: 24.5 ns per loop


In [111]: %timeit  1<<10
10000000 loops, best of 3: 23.9 ns per loop

In [112]: %timeit  2**10
10000000 loops, best of 3: 23.5 ns per loop

In [113]: %timeit pow(2, 10)
10000000 loops, best of 3: 167 ns per loop

In [114]: %timeit  1<<10000
10000000 loops, best of 3: 23.5 ns per loop

In [115]: %timeit  2**10000
10000000 loops, best of 3: 23.9 ns per loop

In [116]: %timeit pow(2, 10000)
10000 loops, best of 3: 27.7 µs per loop

答案 1 :(得分:2)

一个重要的编程原则:不要过早地过度优化。

鉴于1 << n将在整数算术中执行,这显着限制了结果空间,最快的方法是预先计算它们并使用查找表(例如简单数组)。对于64位无符号整数类型,这样的表只有64个条目。

(在C ++中,您甚至可以在编译时使用一些模板技巧来评估它们。)