前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解2022年408考研真题第1题

解2022年408考研真题第1题

作者头像
老齐
发布2023-03-02 16:52:04
4240
发布2023-03-02 16:52:04
举报
文章被收录于专栏:老齐教室老齐教室

解2022年408考研真题第1题

2022年408考研真题第1题,考察了时间复杂度的计算方法。题目内容如下:

下列程序段的时间复杂度是( )。

代码语言:javascript
复制
sum = 0;
for (i = 1; i < n; i *= 2) 
    for (j = 0; j < i; j++) 
        sum++;

A.

O(\log{n})

B.

O(n)

C.

O(n\log{n})

D.

O(n^2)

对于这个题目,一种比较简单的解法是设

n

2

的倍数,即找一个特例,如令

n=2^m

,则

m=\log_2n

。从而确定基本语句 sum++ 的频度。

这种求解方法,能够得到正确答案,但仅仅停留在解决本题的应试技巧上,如果题目的条件更换了,外层循环不再是 i *= 2 ,就不能以

2

的倍数特例了。更何况,我认为,在复习阶段,应该尽可能掌握最基本的方法,而不是将重点放在某些技巧上,因为技巧都是针对特殊现象的,只有基本方法才具有普遍适用性。掌握了基本方法,就不用担心试题的变化了;掌握了基本方法,试题再变化,也是“万变不离其宗”。

那么,针对这个题目,从基本方法角度出发,应该如何求解?

在网上,也能搜索到试图通过基本方法求解的文章(例如某乎网站),很可惜,该文章求解过程的计算有错误,且阐述语焉不详,思路跳跃。

下面,本文尝试给出一种方法,请大家欣赏,如果其中有误,敬请指正。

根据分析时间复杂度的方法,解题步骤如下:

第一步:基本语句是 sum++

第二步:基本语句处于嵌套循环中,内层循环与外层循环的变量相关,用下表列出外层循环和内层循环变量及基本语句循环次数(即内层循环次数)

因为 i < n , 即

2^{r-1}\lt n

,所以

r\lt\log_2n+1

又因为

r

是非负整数,所以

r=\lfloor\log_2n+1\rfloor=\lfloor\log_2n\rfloor+1

(向下取整)。

第三步:基本语句频度。由上表可知,基本语句频度为:

\begin{split} f(n)=2^0+2^1+2^2+\cdots+2^{r-1}=2^r-1 \end{split}

又因为

r=\lfloor\log_2n\rfloor+1

,所以:

\begin{split} f(n)&=2^{\lfloor\log_2n\rfloor+1}-1 \\&\le2^{\log_2n+1}-1 \\&=2n-1 \end{split}

第四步:得到时间复杂度:

T(n)=O(n)

本题答案:B

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解2022年408考研真题第1题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档