【发布时间】:2019-10-18 12:22:22
【问题描述】:
我有一个找到指数的函数,但我对函数的复杂性感到困惑。
功能:
def expo(number, exponent):
if exponent == 0:
return 1
elif exponent % 2 == 0:
val = expo(number, exponent / 2)
return val * val
else:
return number * expo(number, exponent - 1)
我尝试根据指数计算并绘制计算次数的图表并得到以下结果: 图表: 指数:计算:
1:2、2:3、3:4、4:4、5:5、6:5、7:6、8:5、9:6、10:6、11:7、12:6 , 13:7, 14:7, 15:8, 16:6, 17:7, 18:7, 19:8, 20:7, 21:8, 22:8, 23:9, 24:7, 25 : 8, 26: 8, 27: 9, 28: 8, 29: 9, 30: 9
正如您所见,计算次数在波动,我认为 Big-O 表示法不会是线性的或二次的。我认为它会像一个多度多项式,具有类似的表示
我是对的还是我对 O(n) 表示法有错误的想法?
【问题讨论】:
-
这看起来像快速求幂算法,复杂度为 O(log(n)):en.wikipedia.org/wiki/Exponentiation_by_squaring
-
也许您应该以对数刻度绘制横坐标以获得一些见解。
-
@pLOPeGG 是的,我认为这是相同的算法,虽然我不明白复杂度是如何计算的,但它仍然回答了我的问题,谢谢
标签: python algorithm big-o complexity-theory