定义
一个语句的频度指的是该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),这是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。
记为T(n) =O(f(n))
加法规则:T(n,m) = T1(n) + T2(n) = O (max ( f(n),g(m) )
乘法规则:T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))
时间复杂度比较:
图形表示:
简单循环的快速判断(列表法)
【第一题】
输出
结果
虽然这种一眼就可以看出时间复杂度T(n)等于O(n),可是应该还有小伙伴不知道求解过程,下面我们来说一说步骤。
①当t循环0次(没有开始循环时),i=0的;当t循环第一次结束,i=1…所以很容易看出,t=i的关系。
②找边界的话,在循环结束条件可以看出,边界是i=n。
③联立两个方程,可解出时间复杂度为O(n)。
输出
结果
解法:
输出
结果
解法:
【2014考研真题】
输出
结果
这题是嵌套循环,观察可知,内外层循环相互独立,可分开求解。
当然,并不是全部都是用于用列表法,有些程序用列表法反而更难求解,就如下面这道。
这道题适合用类推,我们可以看出sum增加是有规律的。
当i=1时,sum=0+1;当i=2时,sum=0+1+2…
可以类推出sum=(0+1+2+3+...+i)=(1+i)*i/2
,根据循环次数可知,(1+t)*t/2<n
,所以时间复杂度为O(n的二分之一次方)。
PS:先整理着这些例题,有时间再分享多种不同题型!