01、数据结构与算法Python:什么是算法分析

算法分析的概念

程序和算法的区别

算法是对问题解决的分步描述。
程序是采用某种编程语言实现的算法

算法分析主要就是从计算资源消耗的角度来评判和比较算法

更高效利用计算资源,或者更少占用计算资源的算法就是好算法。

计算资源指标

一种是算法解决问题过程中需要的存储空间或内存

存储空间收到问题自身数据规模的变化影响要区分哪些存储空间是问题本身描述所需,哪些是算法占用不容易

另一种是算法的执行时间

可以对程序进行实际运行测试,获得真实的运行时间

运行时间检测

Python中有一个time模块,可以获取计算机系统当前时间

在算法开始前和结束后分别记录系统时间,即可得到运行时间

求和公式第一种算法

import time
def sum0fN2(n):
    start = time.time()
    theSum = 0
    for i in range(1, n+1):
        theSum = theSum + i
    end = time.time()
    return theSum, end - start
for i in range(5):
    print("Sum is %d required %10.7f seconds" % sum0fN2(100000))

输出结果:

Sum is 5000050000 required 0.0069959 seconds
Sum is 5000050000 required 0.0059962 seconds
Sum is 5000050000 required 0.0069962 seconds
Sum is 5000050000 required 0.0059960 seconds
Sum is 5000050000 required 0.0069959 seconds

求和公式第二种算法

def sum0fN3(n):
    start = time.time()
    theSum = (n*(n+1)) / 2
    end = time.time()
    return theSum, end - start

Sum is 5000050000 required 0.0000000 seconds
Sum is 5000050000 required 0.0000000 seconds
Sum is 5000050000 required 0.0000000 seconds
Sum is 5000050000 required 0.0000000 seconds
Sum is 5000050000 required 0.0000000 seconds

总结

  • 算法的运行时间比前种都短很多
  • 运行时间与累计对象n的大小没有关系(前种算法是倍数增长关系)
  • 新算法运行时间几乎与需要累计的数目无关

运行时间检测的分析

观察一下第一种迭代算法

包含了一个循环,可能会执行更多语句,这个循环运行次数跟累加值n有关系,n增加,循环次数也增加

运行时间的实际检测,有点问题

关于编程语言和运行环境

同一个算法,采用不同的编程语言编写,放在不同的机器上运行,得到的运行时间会不一样,有时候会大不一样:

比如把非迭代算法放在老旧机器上跑,甚至可能慢过新机器上的迭代算法

我们需要更好的方法来衡量算法运行时间

这个指标与具体的机器、程序、运行时段都无关

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: