评估算法的性能

我们要想去度量一个算法的性能,有多种方法,比如度量算法的运行时间,统计指令,度量算法所使用的内存等方法,下面我们一个一个的来解读一下

1.度量算法的运行时间

度量算法的运行时间的一种方法是,利用计算机自带的一个计时器,来获取一个循环所执行的运行时间,我们通过连续几个循环的执行时间从而找出每一个循环之间数字和时间的关系,比如每一次循环的时间都会以指数级增长等。我们来看看下面的python代码,这一段代码设计了多次循环,并利用计算机本身的时钟进行计时,每一个循环之间的时间关系是怎样的呢?

import time
problemSize=100000
for count in range(10):
    start=time.time()
    work=1
    for x in range(problemSize):
        work+=1
        work-=1
    elapsed=time.time()-start
    print("%12d%16.3f"%(problemSize,elapsed))
    problemSize*=2

这段Python代码的运行结果为:

      100000           0.015
      200000           0.028
      400000           0.052
      800000           0.101
     1600000           0.205
     3200000           0.419
     6400000           0.862
    12800000           1.699
    25600000           4.483
    51200000           6.667

我们可以看到,基本上当问题的大小翻倍的时候,运行的时间也会进行翻倍,利用这个规律再计算之后下一个循环的运行时间就没有什么难度了,当然后面当问题的大小太大的时候,可能不会以这个规律进行运算,但是对规模较小的情况下还是适用的。

2.统计指令

用于估算算法的另一种艺术,用于统计不同问题规模所需要执行的指令的个数,这种方式比度量算法运行时间可能会更加精确一些,但是我们需要记住,这个统计是用于统计高级语言当中的指令个数而不是低级语言(机器语言)当中的指令个数。在分析算法的时候,我们分为两类指令来分别进行统计:
1.不管问题的规模有多大,都执行相同次数的指令

2.根据问题的规模,执行不同次数的指令

我们来看下下面的循环针对不同数据集内部的循环会迭代多少次:

import time
problemSize=1000
for count in range(5):
    number=0
    work=1
    for i in range(problemSize):
        for k in range(problemSize):
            number+=1
            work+=1
            work-=1
    print("%12d%15d"%(problemSize,number))
    problemSize*=2

最后得到的结果是:

        1000        1000000
        2000        4000000
        4000       16000000
        8000       64000000
       16000      256000000

从结果当中可以看出迭代的次数是问题规模的平方

3.度量算法所使用的内存

这样的算法也是可以用于度量算法的性能的,我们将会后面的章节进行解说。

转载于:https://www.cnblogs.com/geeksongs/p/11278702.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值