2算法的评判标致和评判方法
如何去评判一个算法的高效性、可行性并是正确的?
1.评价标准
算法评价(评估,评测)称为算法分析。
可以从以下几个方面:
1)算法的正确性
2)算法的有效性
3)操作界面
4)键壮性
5)易读性和易维护性
正确性:
能满足具体问题的需求,且对所有的合法的输入数据都正确。
一个正确的算法应当对所有合法的输入数据都能“计算”出正确的结果。
比如,只有对任意n个数据都能完成排序工作的算法才是一个正确的排序算法
评判算法的高效性可以从两个方面:
1. 算法的时间复杂性(time complexity)
算法对时间的需求
同一问题,算法执行时间越短,效率越高
2. 算法的空间复杂性(space complexity)
算法对空间的需求(存储空间)
同一问题,算法使用空间越少,效率越高
示例一:
设T(n)=n2+4n,有f(n)=n2,则:
n2 + 4n = O(n2)
证明:
因为存在c=2,n0=4,使对于一切n>n0,恒有
n2 +4n≤2 n2
注意: f(n)越小,越接近T(n)
示例二:
又例:算法A的时间耗用函数
T1(n)=20n2+100n
算法B的时间耗用函数
T2(n)=0.5n2-3n+18
于是 T1(n)=O(n2)
T2(n)=O(n2)
注意:因为还存在其他因素的影响,T1(n)=O(n2),只算出20n^2,,而100n,相对于20^2太小,所以O(t)只需保留最大即可。
平均情况和最坏情况
(1)为什么要区分两种情况
有些算法因分支等因素,对不同的输入数据(即使输入数据量都是n)耗用时间会有所不同,而且往往相差很大
为使评价更客观,更有说服力,通常需要分几种情况讨论算法的时间性能
在算法理论分析上,最常见的是分别计算出最坏情况下和平均情况下算法的时间复杂性(也称最坏性态和平均性态)
最坏情况:
具有相同输入数据量的不同输入数据
算法时间用量的最大值
用TW(n)表示
平均情况:
对于所有相同输入数据量的各种不同数据,
算法耗用时间的“平均值”
用TE(n)表示
比如:二分查找算法:
1.所要找的数值,在最后一个才找到,比较了log2n次。这是最坏情况。
2.所要找的数值,在第一个就找到,比较了1次。这是理想情况。
评判算法不可能就根据2、3次试验,要看看平均情况。以及效率问题、实用性等。