4、Ts2)的时间,其中Tc是计算条件表达式C需要的时间,而Ts1和Ts2分别是执行语句S1和S2需要的时间。规则(3)选择语句"Case A of a1:S1;a2:S2;…;am:Sm; end",需要max(Ts1,Ts2,…,Tsm)的时间,其中Tsii是执行语句Si所需要的时间,i=l,2,…,m。规则(4)访问一个数组的单个分量或一个记录的单个域,只需要1个单位时间。规则(5)执行一个for循环语句需要的时间等于执行该循环体所需要的时间乘上循环的次数。规则(6)执行一个while循环语句"whileCdoS"
6、语句只需要θ(logm)时间。在许多情况下,运用规则(5)和(6)常常须要借助具体算法的内涵来确定循环的次数,才不致使时间的估计过于保守。这里举一个例子。考察程序段: Size:=m;1i:=1;1whilei0 then1 begin 在1到Size的范围内任选一个数赋值给t;θ(1) Size:=Size-t;2 forj:=l to
7、t do S2θ(n) end; end; 程序在各行右端顶格处标注着执行相应各行所需要的时间。如果不对算法的内涵作较深入的考察,只看到1≤t≤Size≤m,就草率地估计while的内循环for的循环次数为Ο(m),那么,程序在最坏情况下的时间复杂性将被估计为Ο(n2+m·n2)。反之,如果对算法的内涵认真地分析,结果将两样。事实上,在while的循环体内t是动态的,size也是动态的,它们都取决while的循环参数i,即t=t(i)记为ti;size=size