分析:
第一步:找出基本操作,确定规模n。
1)找基本操作。基本操作即以求时间复杂度为目的的前提下,重复执行次数和算法的执行时间成正比的操作。通俗地说,这种操作组成了算法,当它们都执行完的时候算法也结束了,多数情况下取最深层循环内的语句所描述的操作作为基本操作,显然题目中++j;与i+=2;这两行都可以作为基本操作。
2)确定规模。由循环条件i<n可知,循环执行的次数(基本操作执行的次数)和参数n有关,因此参数n就是我们所说的规模n。
第二步:计算出n的函数f(n)。
显然,n确定以后,循环的结束与否和i有关。i的初值为1,每次自增2,假设i自增m次后循环结束,则i最后的值为1+2m,因此有1+2m+K=n(其中K为一个常数,因为在循环结束时i的值稍大于n,为了方便表述和进一步计算,用K将1+2m修正成n,因为K为常数,所以这样做不会影响最终时间复杂度的计算),解得m=(n-1-K)/2,即f(n)=(n-1-K)/2,可以发现其中增长最快的项为n/2,因此时间复杂度T(n)=O(n)。
【例1-2】 分析以下算法的时间复杂度。(www.daowen.com)
分析:
++x;处于最内层循环,因此取++x;作为基本操作。显然n为规模,可以算出++x;的执行次数为f(n)=n(n-1)/2,变化最快的项为n2/2,因此时间复杂度为T(n)=O(n2)。
【例1-3】 分析以下算法的时间复杂度。
分析:
显然n为规模,基本操作为++i;和s=s+i;,i与s都从0开始,假设循环执行m次结束,则有s1=1,s2=1+2=3,s3=1+2+3=6,…,sm=m(m+1)/2(其中sm为执行到第m次的时候s的值),则有m(m+1)/2+K=n(K为起修正作用的常数),由求根公式得
即
由此可知时间复杂度为
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。