【2022统考真题】计算时间复杂度

目录

一、题目描述

二、思路分析

三、易错提醒

四、同级和嵌套的关系

一、题目描述

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

int sum = 0;
for (int i = 1; i < n; i *= 2)
    for (int j = 0; j < i; j++)
        sum++;

A. O(logn)

B. O(n)

C. O(nlogn)

D. O(n^2)

二、思路分析

首先我们先对外层循环进行分析:

外层每循环一次,i=i*2

即:i*2*2*2*2*2*...*2=n

每乘以一次2,代码执行一次;共乘了多少次2,就代表代码执行了多少次

设共执行了x次,所以:2^x=n

即x=logn

所以外层循环的时间复杂度为:O(logn)


接下来看内层循环:

我们发现,内层j的循环次数是基于外层i的值

由于j<i,每当外层循环迭代器一次,内层的循环次数就是i-1

因为i是呈指数的形式增长的

外层第一次执行循环:i=1=2^0

外层第二次执行循环:i=1=2^1

外层第三次执行循环:i=1=2^2

外层第四次执行循环:i=1=2^3

......

所以外层循环迭代器第k次的时候,i的值大概是2^(k-1)

所以外层循环第k次时,内层循环执行2^(k-1)-1次。

内层的总执行次数就是:1+2+4+8+......+2^(k-1)-1

这里求出的内层执行次数的总和,也就是内外层执行的次数

其实就是一个等比数列

等比数列求和公式有两种,当q!=1的时候,Sn=a1(1-q^n)/1-q  or  Sn=(a1-an*q)/1-q

因为k=logn

所以:

Sn= 1 * (1 - 2^(k-1))  / (1 - 2) = (2^k-1)  = 2^(logn-1) 

忽略掉1,则2^(logn-1) =n

时间复杂度为:O(n)

综上所B述:答案为B

三、易错提醒

  1. 为什么求出内层总循环次数就是求出总执行次数?
  2. 循环嵌套不该是内层循环次数*外层循环次数吗?
  3. 那外层明明也执行了,那不该把外层执行次数与内层执行次数相加吗?

这是我在写这道题碰壁的三个点。

个人见解如下:

3.1 内层总循环次数就是总执行次数的原因

在之前写代码,我们遇见过这种类型的代码:

int sum = 0;
for (int i = 0; i < n; i++)
{
	for (int j = 0; j < n; j++)
	{
		sum++;
	}
}

我们知道,它的时间复杂度是:O(n^2)

那为什么是O(n^2)呢?

那就结合图来进行详细分析一下:

所以说,内层总循环次数就是求出了总执行次数。


3.2 是否可以内外层简单相乘的情况

那为什么图1代码求的方式是外层*内层即可,而图2却不能外层*内层?也就是n*logn?

简单分析来看:

  1. 因为图1的代码循环终止条件是相互不关联的,都是为n,所以可以进行简单的相乘来进行。
  2. 而图2的代码终止条件是具有关联性的,内层的循环次数取决于外层i的值,所以要逐步分析出当外层执行一次,内层循环次数的变化,并把内层相加。


3.3 内外层执行次数是否需要相加

那外层明明也执行了,那不该把外层执行次数与内层执行次数相加吗?

结合图进行分析:

那为什么求时间复杂度求最深层语句即可,不需要加上最外层的执行次数?

因为当n取很大值的时候,cpu运行速度很快,那些较小的数值就可以忽略不计,只需要计算属于哪个量级即可。

当n很大时,图3的n^2远远大于n ,可以忽略n,所以时间复杂度为O(n^2)

图4的n远远大于logn,可以忽略logn,所以时间复杂度为O(n)

因为时间复杂度本质是计算算法的执行次数属于哪个量级!!!

故而,我们解决了以上的三个问题!

四、同级与嵌套的关系

同级关系相加    嵌套关系相乘

我们对比以下两段代码:

代码一

//嵌套
int n = 10;
int sum = 0;
for (int i = 0; i < n; i++)
{
	for (int j = 0; j < n; j++)
	{
		sum++;
	}
}

代码二

//同级
int n = 10;
int sum = 0;
for (int i = 0; i < n; i++)
{
		sum++;
}
for (int j = 0; j < n; j++)
{
	sum++;
}
cout << sum << endl;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/897110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题

一、项目简介 使用过ABP框架的童鞋应该知道它也自带了一款免费的Blazor UI主题&#xff0c;它的页面是长这样的&#xff1a; 个人感觉不太美观&#xff0c;于是网上搜了很多Blazor开源组件库&#xff0c;发现有一款样式非常不错的组件库&#xff0c;名叫&#xff1a;Radzen&am…

iEnglish「速成」板块上线,快速提升英语能力

10月17日&#xff0c;iEnglish智能升级版正式推出了「速成」板块&#xff0c;这一创新举措不仅是AI教育深度融合的体现&#xff0c;还为用户提供了更为高效的个性化学习体验。 据悉&#xff0c;「速成」板块旨在通过个性化的学习模式和多元化的练习方式&#xff0c;帮助用户实…

SSD |(九)ECC原理 | LDPC

文章目录 &#x1f4da;信号和噪声&#x1f4da;通信系统模型&#x1f4da;纠错编码的基本思想&#x1f407;编码距离&#x1f407;线性纠错码的基石——奇偶校验&#x1f407;校验矩阵H和生成矩阵G &#x1f4da;LDPC原理简介&#x1f407;LDPC是什么&#x1f407;Tanner图 &a…

scrapy案例——当当网的爬取一

项目名称&#xff1a;当当网的爬取一——爬取青春文学的书籍数据 案例需求&#xff1a; 1.使用scrapy爬虫技术爬取当当网中青春文学的书籍数据&#xff0c;包括&#xff08;标题、现价、定价、作者、出版日期、出版社、书本详情和书本图片url&#xff09; 2.将获取到的数据保…

免费开源的微信开发框架

近年来&#xff0c;随着人工智能技术的快速发展&#xff0c;聊天机器人在各个领域得到了广泛的应用。在社交媒体中&#xff0c;自动回复成为了一个流行的功能&#xff0c;让用户可以方便地与机器人进行互动。gewe框架&#xff0c;一个开源的微信聊天机器人框架&#xff0c;实现…

高刚性重切削数控走心机

高刚性重切削数控走心机&#xff0c;作为现代精密加工领域的佼佼者&#xff0c;以其卓越的性能和广泛的应用领域&#xff0c;赢得了众多行业的青睐。下面&#xff0c;我将从多个方面为您详细解析这种数控走心机。 ‌一、定义与特点‌ ‌定义‌&#xff1a;高刚性重切削数控走心…

【Java 并发编程】单例模式

前言 单例模式是一种十分常用但却相对而言比较简单的单例模式。虽然它简单但是包含了关于线程安全、内存模型、类加载机制等一些比较核心的知识点。本章会介绍单例模式的设计思想&#xff0c;会去讲解了几种常见的单例实现方式&#xff0c;如饿汉式、懒汉式、双重检锁、静态内部…

C++和OpenGL实现3D游戏编程【连载16】——详解三维坐标转二维屏幕坐标(向量和矩阵操作实战)

&#x1f525;C和OpenGL实现3D游戏编程【目录】 1、本节课要实现的内容 在上一课我们了解了着色器&#xff0c;了解了部分核心模式编程内容&#xff0c;从中接触到了线性代数中向量和矩阵相关知识&#xff0c;我们已经能够感受到向量和矩阵在OpenGL编程中的重要性。特别是后期…

Linux——传输层协议

目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…

MySQL数据库的高可用

一、MHA工作原理 1、MHA的工作原理 1、MHA利用 select 1 as value 指令判断master服务器的健康性&#xff0c;一旦master宕机&#xff0c;MHA从宕机崩溃idmaster保存二进制日志事件&#xff08;binlog events&#xff09; 2、识别含有最新更新的slave 3、应用差异的中继日志&a…

bcprov-jdk15on-1.52.0.jar has unsigned entries - org/bouncycastle/LICENSE

报错界面如上图 解决办法&#xff1a; 1.修改引用jar包&#xff0c;将build.gradle里面的依赖为 implementation org.bouncycastle:bcprov-jdk15on:1.52 2.到maven上下载最新的bcprov-jdk15on-1.52.0.jar,替换文件夹中原有的jar包

C/C++每日一练:实现一个环形队列

队列&#xff08;queue&#xff09; 队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09; 的数据结构&#xff0c;类似于排队的场景。最先进入队列的元素最先被处理&#xff0c;而后加入的元素则排在队列的末尾。 常见的队列操作&#xff1a; 入队…

第二届中国楚域品牌文化创新发展大会暨楚域尚品发布会在汉圆满落幕

10 月 19 日&#xff0c;“第二届中国楚域品牌文化创新发展大会暨楚域尚品发布会”在武汉市光谷九通海源大酒店隆重举行。本次大会由中国商业文化研究会传承创新工作委员会、楚域品牌文化传承创新工作委员会、华夏品牌文化创新发展大会组委会主办&#xff0c;湖北省企业文化促进…

python爬虫简易入门示例

版本环境 win11python 3.12.4 目标&#xff1a;爬取https://gitee.com/explore的列表内容&#xff0c;并写入txt文本 效果 开始 1.安装依赖 pip install requests beautifulsoup42.编写代码&#xff0c;如下&#xff0c;详见注释 import requests from bs4 import Beauti…

【PFGA】二选一数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 verilog FPGA 实验 一、实验原理 二、实验过程 三、实验结果 代码 module mux21(input s,input a,input b,output reg y); always(s or a or b) beginif (~s) beginy<a;end else beginy<…

ollama+ollama-webu在windos上部署的教程

ollamaollama-webu在windos上部署的教程 一、需要准备的环境和代码二、开始部署1. 修改系统变量&#xff1a; 常见问题 首先介绍一下ollama&#xff1a; Ollama 是一种为快速大规模语言模型推理所设计的框架和平台。它旨在帮助用户通过高效的方式运行和管理大型语言模型&#x…

使用AITemplate和AMD GPU的高效图像生成:结合Stable Diffusion模型

Efficient image generation with Stable Diffusion models and AITemplate using AMD GPUs 2024年1月24日&#xff0c;作者是[Douglas Jia] Stable Diffusion 已成为图像生成领域的突破性进展&#xff0c;帮助用户将文本描述转化为引人入胜的视觉输出。 Stable Diffusion 的…

SAP_通用模块-MASS批量操作技巧(二)

业务背景&#xff1a; 前两天写了一篇关于MASS批量操作的文档&#xff0c;当时测试批量扩充物料视图的时候失败了&#xff0c;就没记录进去&#xff0c;然后手头上刚好有一个需求&#xff0c;就是物料已经有基本视图等相关信息的情况下&#xff0c;需要扩充相关的物料视图。方法…

光纤光学——弱导光纤与线偏振模

一、基本思想 弱导光纤&#xff1a;n1≈ n2 , k0n1 ≈ k0n2&#xff0c;亦即&#xff1a; k0n1 ≈ k0 n2 ≈ 光线与纤轴的夹角小&#xff1b;芯区对光场的限制较弱&#xff1b; 消逝场在包层中延伸较远。 弱导光纤场的特点&#xff1a; HEι1,m模式与EHι-1,m色散曲线相近…

1024程序员节·城市聚会·西安,它来了

活动名称 CSDN 1024程序员节城市聚会西安 活动主题 智能进化&#xff1a; 开发者在AI时代的工作与生活变革 活动背景 CSDN一年一度的1024程序员节城市聚会&#xff08;西安站&#xff09;是一场专为程序员打造的盛会。这个活动旨在为西安的开发者们提供一个交流技术、分享…