算法分析
算法的时间复杂度分析
事后分析估算方法:这种统计方法主要是通过设计好的测试程序和测试数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低,但这种方法有很大的缺陷:必须依据算法实现编制好的测试程序,通常需要花费大量的时间和精力,测试完了如果发现测试的是非常糟糕的算法,那么之前所做的事情就全部白费了,并且不同的测试环境(硬件设备)的差别导致测试的结果差异也很大。
事前分析估算方法:在计算机程序编写前,根据统计方法对算法进行估算,经过总结,一个高级语言编写的程序在计算机上运行所消耗的时间取决于下列因素:
- 算法采用的策略与方案;
- 编译产生的代码质量;
- 问题的输入规模(输入量的多少)
- 机器执行指令的速度
由此可见,抛开与计算机硬件、软件有关因素,一个程序运行的时间依赖于算法的好坏与问题的输入规模。如果算法固定,那么算法的执行时间就只和问题的输入规模有关系了。
我们研究算法复杂度,侧重的是当输入规模不断增大时,算法的增长量的一个抽象,而不是精确地定位需要执行多少次,因为如果是这样的话,我们又得考虑回编译器优化等问题,容易主次颠倒。我们分析一个算法的运行时间,最重要的就是把核心操作的次数和输入规模关联起来。