性能测试
不同DSA性能有好坏优劣之分
To measure is to know.
If you can not measure it,
you can not improve it.
—— Lord Kelvin
1.引入理想、统一、分层次的尺度
2.运用该尺度,以测量DSA的性能
算法分析
两个方面:
- 正确性: 算法功能与问题要求一致? 数学证明?可不那么简单...
- 成本: 运行时间 + 所需存储空间如何度量?如何比较?
特定算法 + 不同实例
- 令TA(n) = 用算法A求解某一问题规模为n的实例,所需的计算成本讨论特定算法A(及其对应的问题)时,简记作T(n)
- 然而,这已定义仍有问题...
- 观察:同一问题等规模的不同实例,计算成本不尽相同,甚至有实质差别
- 例如:在平面上的n个点中,找到所成三角形面积最小的三个点以蛮力计算为例,最坏情况下需枚举所有C(n,3)中组合,但运气好的话...
特定问题 + 不同算法
- 同一问题通常有多种算法,如何评判其优劣?
- 实验统计是最直接的方法,但足以准确反映算法的真正效率?
- 不足够!
不同的算法,可能更适应于不同 *规模 *的输入
不同的算法,可能更适应于不同 类型的输入
同一算法,可能由不同程序猿、用不同程序语言、经不同编译器实现
同一算法,可能实现并运行于不同的体系结构、操作系统... - 为给出 客观的评判,需要抽象出一个理想的平台或模型不再依赖于上述种种具体的因素,从而直接而准确地描述,测量并评价算法
Turing Machine(图灵机模型)
- **Tape **
依次均匀地划分为单元格,各格有一字符,默认为 # - Alphabet字符的种类有限
- Head
总是对准某一单元格,并可读取和改写其中的字符,没经过一个节拍,可转向左侧或右侧的邻格 - State
TM总是处于有限种状态中某一种,每经过一个节拍,可(按照规则)转向另一种状态 - Transition Function:(q, c; d, L/R, p)
若当前状态为q且当前字符为c,则将当前字符改写为d;转向左侧/右侧的邻格;转入p状态一旦转入特定的状态'h',则停机