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

单层时间复杂度计算#

一、设执行次数为 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 )

作者:L-TT

出处:https://www.cnblogs.com/L-TT/p/16870812.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   浪兮一  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示