从一个实例(整数幂指数)进行算法时间复杂度的分析

算法的时间复杂度在于基本步骤(basic steps)的考量。

复杂度notation描述
常量(Constant) O(1) 基本操作的数量为常数,与输入数据的规模无关
n=10^6 ⇒ 1-2 operations
对数(Logarithmic) O(logn) 操作的数量为 log2n
n=10^6 ⇒ 30 operations
线性(Linear) O(n) 操作的数量与输入数据的规模成正比
n=10^6 ⇒ 5000 operations
平方(Quadratic) O(n2)
立方(Cubic) O(n3)
指数(exponential) O(2n)
O(kn)
O(n!)
增长非常恐怖

计算整数幂指数的三种思路

f(n)=an

  • 遍历相乘

    def exp1(a, n):
        r = 1
        while n:
            r *= a
            n -= 1
        return r

    其基本步骤为(一次迭代):判断(while) + 乘法 + 减法 == 3
    所以整个循环下来的时间复杂度为: 3n+2O(n)

  • 递归版

    def exp2(a, n):
        if n == 1:
            return a
        else:
            return a*exp2(a, n-1)

    递归版本的时间复杂度为仍然采用递归形式进行及分析。 t(n) :标识当前,则 t(n)=3+t(n1) ,其中3表示:一次判断,一次乘法,一次减法。

    t(n)=3+t(n1)t(n)=3k+t(nk)t(n)=3(n1)+t(1)=3(n1)+2

  • 递归改进版

    f(a,n)=an=(a2)n/2=f(a2,n/2),a×(a2)(n1)/2=a×f(a2,n12),n is evenn is odd

    def exp3(a, n):
        if n == 1:
            return a
        return exp3(a**2, n//2) if n%2 == 0 a*exp3(a**2, n//2)

    n 为偶数时,t(n)=6+t(n/2)
    n 为奇数时,t(n)=6+t(n1)=6+6+t(n12)
    所以大致可得: t(n)=12+t(n/2)=12×log2n+t(1)
    时间复杂度为: logn

References

[1] 算法复杂度分析

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值