随笔 - 7  文章 - 0  评论 - 0  阅读 - 1501

根据伪代码计算时间复杂度O(n)

计算一段代码的时间复杂度, 就是求O(f(n))的过程,就是求 执行次数与规模n的一个不等式的过程
例子:

结合图-2,我们主要来分析第二行这个外循环语句:

第一次执行,i=1执行一次循环体,i更新为2
第二次执行,i=2执行一次循环体,i更新为4
第三次执行,i=4执行一次循环体,i更新为8
第四次执行,i=8执行一次循环体,i更新为16
...
我们设在第x次执行,那么此时输入的i = 2^(t-1) ,执行完本次循环,i会更新成2^x

我们这里可以指定第t次迭代作为最后一次i的迭代,就是说i=2^t ,不再满足进入循环的条件,即i=2^t >= n
那该i迭代的次数就是t(如果单次循环执行次数都为1的普通语句的话)
*需要明晰的是,我们这的次数t是 循环体执行的最大次数,在该次数的执行完毕后,下一次的输入i值不满足循环条件,从此终止循环,循环判断语句则是执行t+1次
其实本题就是找 "第几次迭代-i的值-规模n" 的关系,找到之后就明了了

容易看出,每个单个内循环的执行次数就是i,如此可得

发现图-3的t与我们所说的t相差一,这是因为所设的t不一样的缘故,我的t是迭代次数,而图中答案里意思是"循环体迭代t+1次",我是从1开始计数,而答案里是从0开始计数,按照我们所设的t,求出来的结果
T=2^t-1,根据所求的两个不等式,得出n+1=<T<2n+1,结果仍然是O(n),所以都一样的

巩固练习:

还是选择从0开始计数,这样更像计算机专业
解答:

最后O(n)=nlog2n
(错误较多,等待后期勘误)

两个easy题目答案分析:
图中第零次 指的是未进循环的初值 的情况,这样写可读性更高.

posted on   VoidHan21  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示