如何衡量算法复杂度?
内存(Memory)
时间(Time)
指令的数量(NumberofSteps)
特定操作的数量
磁盘访问数量
网络包数量
渐进复杂度(AsymptoticComplexity)
为什么要进行算法分析?
预测算法所需的资源
计算时间(CPU消耗)
内存空间(RAM消耗)
通信时间(带宽消耗)
预测算法的运行时间
在给定输入规模时,所执行的基本操作数量。
或者称为算法复杂度(AlgorithmComplexity)
算法的运行时间与什么相关?
取决于输入的数据。(例如:如果数据已经是排好序的,时间消耗可能会减少。)
取决于输入数据的规模。(例如:6和6*109)
取决于运行时间的上限。(因为运行时间的上限是对使用者的承诺。)
算法分析的种类:
最坏情况(WorstCase):任意输入规模的最大运行时间。(Usually)
平均情况(AverageCase):任意输入规模的期待运行时间。(Sometimes)
最佳情况(BestCase):通常最佳情况不会出现。(Bogus)
例如,在一个长度为n的列表中顺序搜索指定的值,则
最坏情况:n次比较
平均情况:n/2次比较
最佳情况:1次比较
而实际中,我们一般仅考量算法在最坏情况下的运行情况,也就是对于规模为n的任何输入,算法的最长运行时间。这样做的理由是:
一个算法的最坏情况运行时间是在任何输入下运行时间的一个上界(UpperBound)。
对于某些算法,最坏情况出现的较为频繁。
大体上看,平均情况通常与最坏情况一样差。
算法分析要保持大局观(BigIdea),其基本思路:
忽略掉那些依赖于机器的常量。
关注运行时间的增长趋势。
结束语:以上就是关于进行算法复杂度分析的全部内容,更多内容请关注学步园。