第1章 概述
【例1-1】分析以下程序段的时间复杂度。
for(i=0;i<n;i++)
for(j=0;j<m;j++)
A[i][j]=0;
解:该程序段的时间复杂度为O(m*n)。
【例1-2】分析以下程序段的时间复杂度。
i=s=0; ①
while(s<n)
{ i++; ②
s+=i; ③
}
解:语句①为赋值语句,其执行次数为1次,所以其时间复杂度为O(1)。语句②和语句③构成while循环语句的循环体,它们的执行次数由循环控制条件中s与n的值确定。假定循环重复执行x次后结束, 则语句②和语句③各重复执行了x次。其时间复杂度按线性累加规则为O(x)。此时s与n满足关系式:s≥n,而s=1+2+3+…+x。所以有:1+2+3+…+x≥n,可以推出:
x=
x与n之间满足x=f(),所以循环体的时间复杂度为O(),语句①与循环体由线性累加规则得到该程序段的时间复杂度为O()。
【例1-3】分析以下程序段的时间复杂度。
i=1; ①
while(i<=n)
i=2*i; ②
解:其中语句①的执行次数是1,设语句②的执行次数为f(n),则有:。
得:T(n)=O()
【例1-4】有如下递归函数fact(n),分析其时间复杂度。
fact(int n)
{ if(n<=1)
return(1); ①