非递归程序时间复杂度计算
单层时间复杂度计算#
一、设执行次数为 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 )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现