1.时间复杂度
时间复杂度被用于度量一个算法执行时间的长短。常见的算法时间复杂度有:常数阶O(1)、对数阶O(logn)、线性阶O(n)、线性对数阶O(n·logn)、平方阶O(n2)、立方阶O(n3)……k次方阶O(nk)和指数阶O(2n)等。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越来越低。也就是说时间复杂度从小到大依次为:O(1)<O(logn)<O(n)<O(n·logn)<O(n2)<O(n3)<…<O(2n)<O(n!)。通常情况下,在计算时间复杂度的时候,首先要分析算法中包含的基本操作,然后根据相应的语句结构确定每一个操作的执行次数,再利用上文给出的抽象方法确定T(n)的数量级(1,logn,n,n·logn,n2等)。接下来,令函数f(n)=该数量级,对T(n)/f(n)求极限,若结果为一个常数c,则该算法的时间复杂度为O(f(n))。
那么如何计算一个算法的时间复杂度?通常情况下,有以下几个简单的分析法则:1)对于简单的说明性语句、输入输出语句、赋值语句,可以近似认为其时间复杂度为O(1)。O(1)代表一个算法的运行时间为常数。2)对于顺序结构语句块,需要依次执行一系列语句,其时间复杂度遵循O记号下的“求和法则”。所谓“求和法则”指的是:如果算法的两个部分的时间复杂度分别为T1(n)=O(f(n))和T2(n)=O(g(n)),那么可以得到T1(n)+T2(n)=O(max(f(n),g(n))),特别地,如果T1(m)=O(f(m)),T2(n)=O(g(n)&#x