算法分析应该怎么做?
在许多情况下,分别运行两种算法来解决同一问题是不理想的,面对这一困难,我们只好求助于数学工具,虽然我们无法对一个尚未完全实现的程序进行比较,但是通过数学分析,我们可以理解程序性能的大致轮廓,并且可以估计改进后的程序的效果。
大部分算法都有影响运行时间的主要参数,这里是对求解问题规模的抽象度量,例如对于排序算法,它是要排序的元素数目。目的是通过简单的数学公式,尽可能地表达出程序的运行效率。
功能增长
对两种算法进行比较,我们不满足于简单地将其描述为“一种算法比另一种算法快”,而是希望能通过数学函数直观地了解两者的区别,特别是希望知道“一种算法比另一种算法快多少”。
有些功能在算法分析中是非常常见的:
…在一个程序中,如果大多数指令只运行一次或几次,与问题的大小无关,那么程序的运行时间是不变的。小高斯的算法是典型的常量时间。当问题规模增大时,程序的运行时间会变慢,因此可以认为程序的运行时间小于常数。尽管对数的底数影响函数值,但影响不大。考虑到计算机是进制的,所以它通常被取为底数值,这与数学(数学)略有不同。在适当的时候;在增加了一倍的时候,,只有微弱的增长;只有在增加了一倍的时候。若一种算法将一个大问题分解成几个小问题,每个小问题的运行时间都是常数,则我们认为该算法的运行时间是,典型的二分查找。该比率略高,当问题规模加倍时,运行时间比加倍时要短一些;当问题规模加倍时,程序运行时间会加倍。代价为 ntime的程序通常会处理程序的终止条件,例如,当判断一个数是否为质数时,边界值是质数的平方根,而非质数本身。通常称为线性时间,如果问题规模加倍,则程序运行时间也加倍。强制力达到的方法是线性时间,这类方法通常会有一个循环,结束于问题的规模。如果运行时间比问题大小增加一倍多一点,那么只需说明程序正在运行的时间。如果发生这种情况;如果 N=2048,不要把一个大问题分解成几个小问题,它们可以在一定的时间内运行,而要区分一下,是否需要合并这些小问题,如果合并,就是这样。大部分归并问题的运行时间可以简单地考虑。若问题的规模加倍,运行时间加倍;若问题的规模加倍,运行时间加倍。若问题的规模加倍,运行时间加倍;若问题的规模加倍,运行时间加倍。确实非常重要的增长假如;加倍努力,对于复杂问题,蛮力法一般都有这个尺度,这类算法一般不适用于实际问题。
让我们看看这些功能的增长曲线,如图1所示。