实验方法
- 用Java的StopWatch数据类型,记录从创建对象到算法完成所需的时间
- 程序在不同的计算机上运行时间之比通常是一个常数。我们可以用幂次法则,绘制标准图像和对数图像。标准图像X轴为问题规模(N),y轴为运行时间T(N)。而对数图像中,x轴就是lg(N),y轴是lg(T(N))。对数图像会是一条直线,等价于我们对数据符合公式T(N)=aN^b的猜想。
- 数学模型:一个程序运行的总时间主要和两点有关:1是每行语句执行的耗时,2是每条语句的频率。算出方程表达式之后取最高次数项。
More about 数学模型在算法分析中的应用
对于大多数程序,得到算法的运行的数学模型有如下步骤
- 确定input size,输入模型
- 找内循环
- 根据内循环的操作确定成本模型。比如3Sum中的成本模型就是数组的访问次数(访问数组元素的次数)。
- 对于给定的输入,判断这些操作的执行频率。
常见的增长数量级分类
以下为常见的算法分析方程形式,与微积分中求极限常见的方程相同。
- 一行语句 a+b = c为常熟级别(1)
- 二分查找为对数级别(logN)
- 遍历数组为线性级别(N)
- 分治法,归并排序就是线性对数级别(nlogn)
- 双层循环是平方级别,selecti