以前对这方面是一知半解,终于在一次大众点评的笔试中受到刺激。
步入正题:什么样的算法才是高效的算法?想必所有的人都这么想过:用最少的钱,花做最短的时间,买到最多的东西。同样,用最少的内存空间,花最短的时间解决问题的算法就是。因此我们考虑用时间和空间来衡量一个算法的效率。
首先我们来考虑如何利用时间来衡量算法效率。比较容易想到的方法时,可以利用计算机计时的功能,来计算不同算法的效率。在此基础上衍生了几种方法:
事后统计方法:通过设计好的测试程序和数据,利用计算机的计时功能对实现不同的算法的程序运行,通过比较运行时间来确定算法效率的高低。
咋眼一看,感觉好简单啊。但是问题来了:首先必须必须根据算法编写好程序,通常这会花掉很多时间。对于有些糟糕的算法,这无疑是中时间上的浪费。其次,这种方法受环境影响太大,主要是硬件环境和软件环境。我们很难模拟两种完全一样的运行环境。最后,测试算法的数据设计比较麻烦。尤其是在需要的测试据 的模很大的时候,显得非常麻烦。
总之,这种事后统计的方法太过于麻烦,因此不考虑。
事前分析估算法:在编制程序之前,依据统计方法进行估算。
统计发现用高级语言编写的程序运行时所消耗的时间主要受这几方面影响:
- 算法采用的策略,这是算法好坏的根本。
- 编译产生的代码质量
- 问题输入规模
- 机器硬件环境,主要是执行指令速度。
抛开硬件和软件等因素,单纯的懂算法来考虑,我们发现,一个程序的好坏依赖于算法策略和输入规模。
程序运行所耗费的时间主要是用来执行指令,因此,