算法的时间复杂度和空间复杂度-总结通常, 对于一个给定的算法,我们要做两项分析
第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、 数学归纳法等
而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度
算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否
因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的
算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量
而度量一个程序的执行时间通常有两种方法
一、事后统计的方法这种方法可行,但不是一个好的方法
该方法有两个缺陷:一是要想对设计的算法的运行性能进行评测,必须先依据算法编制相应的程序并实际运行;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优势
二、事前分析估算的方法因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣
因此人们常常采用事前分析估算的方法
在编写程序前,依据统计方法对算法进行估算
一个用高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素: (1)
算法采用的策略、方法;(2)
编译产生的代码质量;(3)
问题的输入规模;(4)
机器执行指令的速度
一个算法是由控制结构(顺序、分支和循环3 种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果
为了便于比较同一个问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作的重复执行的次数作为算法的时间量度
1、时间复杂度(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道
但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,