首页 > 编程语言 >非递归程序时间复杂度计算

非递归程序时间复杂度计算

时间:2022-11-08 19:16:21浏览次数:43  
标签:... 执行 递归 int 公式 复杂度 程序 例题

单层时间复杂度计算

一、设执行次数为 t 次

二、列出每次执行变量 i 的值,如:for(int i = 0; i < n; ++i) { ... }

三、找到执行第 t 次 i 的值,即 i = f( t )(公式一)

四、列出程序执行结束的条件 (公式二)

五、根据公式一和公式二解得 t

例题1:
for(int i = 0; i < n; i += 2){
	print...
}

解题:

① 设执行次数为 t 次

② i 的值变化为:0 2 4 6 8 10 12...

③ i = f( t ):i = 2*t (公式一)

④ 结束条件: i = n + K(K为常数,即误差值可省略)(公式二)

⑤ 根据公式一、公式二可求出结果 t = i / 2,即 O( n )

例题2
for(int i = 1; i <= n; i *= 2){
	print...
}

解题:

时间复杂度: log2n

例题3:
for(int i = 1; (i + 1)(i + 1) < n; ++i){
	print...
}

解题:

时间复杂度:n1/2

双层时间复杂度计算

一、根据单层循环公式求出外侧执行次数 t

二、列出外层每次循环执行时,内层执行次数

三、抽象数据为图形

四、计算图形面积

例题1
for(int i = 1; i <= n; ++i){
	for(int j = 0; j < i; ++j){
		print...
	}
}

① 解得外层循环次数为 n

② 外层循环执行时内层执行次数:1 2 3 4 5 6 7 ...

③ 抽象数据为一个直角三角形

双层时间复杂度计算

③ 计算面积为:n * ( n + 1 ) / 2 ==> O ( n2)

例题2
for(int i = 0; i < n; ++i){
	for(int j = 0; j < n; ++j){
		print...
	}
}

③ 抽象数据为正方形

④ n * n ==> O ( n2 )

例题3
for(int i = 0; i < n; i+=2){
	for(int j = 1 j <= n; j*=2){
		print...
	}
}

① 外层执行 n / 2次

② 内层每次循环执行:log2n次

③ 抽象数据为矩形

④ n / 2 * log2n ===>O ( n * log2n )

标签:...,执行,递归,int,公式,复杂度,程序,例题
From: https://www.cnblogs.com/L-TT/p/16870812.html

相关文章