怎样对一个程序进行算法分析?其时间复杂度怎么算?

算法的复杂性 斜体样式
算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。

计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。
对于任意给定的问题,设计出复杂性尽可能低的算法是我们在设计算法时追求的一个重要目标;另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则。因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值。
简言之,在算法学习过程中,我们必须首先学会对算法的分析,以确定或判断算法的优劣。

1.时间复杂性:

    例1:设一程序段如下(为讨论方便,每行前加一行号)
      (1) for i:=1 to n do
      (2) for j:=1 to n do
      (3) x:=x+1  ......  
     试问在程序运行中各步执行的次数各为多少?  
      解答:行号 次数(频度)
      (1)   n+1
      (2)   n*(n+1)
      (3)   n*n  
      可见,这段程序总的执行次数是:f(n)=2n2+2n+1。在这里,n可以表示问题的规模,当n趋向无穷大时,如果   f(n)的值很小,则算法优。作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2)。

2.空间复杂性:

    例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:
    算法1:
    for i:=1 to n do       
    b[i]:=a[n-i+1];     
    for i:=1 to n do       
    a[i]:=b[i];
    
    算法2:
    for i:=1 to n div 2 do        
    begin       
    t:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=t        
    end;
      
     算法1的时间复杂度为2n,空间复杂度为2n
     算法2的时间复杂度为3*n/2,空间复杂度为n+1
      显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

玄衫路人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值