c++时间复杂度详解

news2024/11/21 2:23:06

1.基本概念

   在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。

2.具体操作

     我们首先来看一段程序:

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		//~~~~~~~~~~
	}
	return 0;
} 

  这段代码的时间复杂度是多少呢?上面也说了,就是他循环的次数。而程序中的for循环 的运行次数是n次。所以这段程序的时间复杂度为O(n)  

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=3;i<n;i++){
		//~~~~~~~~~~
	}
	return 0;
} 

那这段代码的时间复杂度是多少呢?难不成是O(n-3)?可能很多人都会有这样的疑问。其实在运算时间复杂度的过程中,会把程序里面的影响时间复杂度的数(不是变量!!!)全变成0。所以程序就变成了:

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){//3变为0
		//~~~~~~~~~~
	}
	return 0;
} ​
​

所以结果还是O(n)。

 还有下面几段程序:

#include<iostream>
using namespace std;
int main(){
    int a;
    cin>>a;
    cout<<a;
    return 0;
}

O(1) ,因为程序只运行了一遍

#include<iostream>
using namespace std;
int main() {
    int n;
	cin>>n;
	for(int i=0;i<n;i++){
	    for(int j=0;j<n;j++){
	    	//~~~~~~~~~~~
		}
	} 
	return 0;
}

O(n^2),因为程序执行了n的平方次。

其他的都一样,不过要注意的是,时间复杂度一般都只用字母来表示,如果你发现你的时间复杂度有数字(除平方外),比如什么O(3+n),O(n-4)什么的。肯定是你没有把数字去掉。

3.进阶方法

   看完了基础的,我们来康康进阶的。

    

 

#include<iostream>
using namespace std;
int main() {
    int n,a[100];
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<n;i++){
	    for(int j=0;j<n;j++){
	    	//~~~~~~~~
		}
	} 
	return 0;
}
这个程序的时间复杂度是不是O(n^2+n)呢?其实不是。因为在计算时间复杂度的时候,我们往往只计算程序中最重要的部分。所以时间复杂度应为O(n^2)。
int binarySearch(int arr[], int left, int right, int target) {  
    while (left <= right) {  
        int mid = left + (right - left) / 2;  
  
        if (arr[mid] == target) {  
            return mid;  
        }  
        else if (arr[mid] < target) {  
            left = mid + 1;  
        }  
        else {  
            right = mid - 1;  
        }  
    }  
  
    return -1;  // 如果未找到目标值,则返回-1  
}  

这段代码的时间复杂度是多少呢?熟悉二分算法的人都知道,二分算法最慢的要运行2分之一n次。但我们不知道它属于那种情况,怎么办呢?原来,在计算时间复杂度的时候,普遍使用最不理想的运算次数。所以时间复杂度就是O(logn)

log是什么?log可以理解成没法去掉数字得出的小于n的循环次数就用logn来表示。

下面再看最后一段代码:

int factorial(int n) {  
    if (n == 0) {  
        return 1;  
    }  
    else {  
        return n * factorial(n - 1);  
    }  
}  

该来的总是来了,这个程序是递归,怎么算时间复杂度呢?其实很简单,只需要看这个函数被递归调用了几次就可以了。我们发现这个递归是这样的:

所以这个程序会运行n次,也就是O(n)了~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mybatis系列】Mybatis空值关联

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PDF.js实现按需分片加载pdf文件

pdf.js实现按需、分片加载pdf文件 1.服务端配置 分片加载的实现是基于 HTTP-RANGE&#xff0c;即服务端的文件接口必须实现了HTTP-RANGE。 服务端文件接口实现HTTP-RANGE&#xff0c;需要服务端添加如下响应头 [{key: "Accept-Ranges",value: "bytes"}…

用Growly Draw for Mac,释放您的创意绘画天赋!

在数字化时代&#xff0c;绘画已经不再局限于传统的纸笔之中。如今&#xff0c;我们可以借助强大的绘画应用软件&#xff0c;将创意化为独特的艺术作品。而Growly Draw for Mac就是一款让您能够快速释放创意、创作精美绘画作品的应用软件。 Growly Draw for Mac是一款专为Mac用…

Ezsql

靶场说明 靶机地址解释&#xff1a; 第一行&#xff1a;目标机器 WEB 服务地址 第二行&#xff1a;目标机器 SSH 地址以及端口 第三行&#xff1a;Check 服务访问地址。 http://99bdd2da-7d5e-4b5c-a7ee-79713b8ecabc.node5.buuoj.cn:8199bdd2da-7d5e-4b5c-a7ee-79713b8ecabc…

十、Three场景实现多个物体的合并

Three场景实现多个物体的合并 目的 产品需求是让物体的光柱墙包含一个多边形的区域,二而我的多边形只能使用原型,方向,多边形。那么再研究的时候就需要将这些多边形合并成为一个形状,那么就行实现了。 原先的图形 如上图,是两个mesh组成的。首先寻找mesh合并的方法。 第…

《TrollStore巨魔商店》TrollStore2安装使用教程支持IOS14.0-16.6.1

TrollStore(巨魔商店) 简单的说就相当于一个永久的免费证书&#xff0c;它可以给你的iPhone和iPad安装任何你想要安装的App软件&#xff0c;而且不需要越狱,不用担心证书签名过期的问题&#xff0c;不需要个人签名和企业签名。 支持的版本&#xff1a; TrollStore安装和使用教…

Ubantu 安装vscode配置c/c++环境

文章目录 安装VSCode注意 snap包冲突 安装C/C编译环境注意 进程锁占用 配置C开发环境安装插件配置tasks.json配置c_cpp_properties.json 配置调试环境配置 launch.json 安装VSCode 方式一&#xff1a;ubantu 软件里面直接安装 方式二&#xff1a;官网下载deb安装包https://cod…

面试Java岗老喜欢盯着JVM问,有那么多项目要调优吗?

面试Java岗老喜欢盯着JVM问&#xff0c;有那么多项目要调优吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给…

C++ 编程需要什么样的开发环境?

C 编程需要什么样的开发环境&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#…

资本主义的市场竞争?IBM总监Jerry Chow 谈量子计算的未来

​ 人物介绍&#xff1a;Jerry M.Chow博士在耶鲁大学取得物理博士学位。担任IBM量子系统总监&#xff0c;其研究重点是面向容错量子计算的多量子比特系统。他主要为IBM的量子系统路线图制定战略&#xff0c;与硬件团队领导者一起设定目标研究领域&#xff0c;同时也确保最佳的客…

llvm pass

pass们组合在一起&#xff0c;处理IR 而最后的目标代码生成阶段&#xff0c;会生成另一种MIR&#xff08;Machine IR&#xff09; PassManager管理这些pass pass处理IR之后会改变分析的情况&#xff0c;这些关于IR的信息由 AnalysisManager处理 1、pass &#xff08;1&…

重磅!30余所985高校全面取消博士统考!

2024年博士招生&#xff0c;又有“双一流”高校取消统考。 近日&#xff0c;各大高校正在陆续发布《2024年博士研究生招生简章》&#xff0c;其中南昌大学的博士招生方式引起了广泛关注。据悉&#xff0c;南昌大学将全面实行“申请—考核”制选拔方式&#xff0c;适用于直接攻…

中级职称原来有这么多用处!

中级工程师职称是工程技术人员职称中的一个级别&#xff0c;其作用可能因行业、地区和具体情况而异。一般来说&#xff0c;中级工程师职称具有以下作用&#xff1a; 1. 职业发展&#xff1a;中级工程师职称是工程技术人员职业发展中的一个重要里程碑&#xff0c;它可以证明持证…

大众点评评论采集软件使用教程

导出字段&#xff1a; 店铺ID 评论ID 发布时间 人均消费 评分 详情链接 点赞数 浏览数 评论数 最后更新时间 发布平台 推荐 评论详情 原始评论 图片数 图片链接 用户等级 用户名称 用户头像 VIP 私

“核弹级“攻击队视角下的监管痛点解决方案

痛点分析及解决方案 一、辖区企业资产分散且不透明 - 传统的监管体系中&#xff0c;政府监管单位往往面临着辖区企业资产分散且不透明的问题。 - 企业无法梳理自身资产&#xff0c;上报的资产台账无法涵盖全部自身资产 - 监管单位精力有限&#xff0c;无法保证辖区企业资产台账…

Three.js 镜面反射Reflector 为MeshStandardMaterial增加Reflector能力

效果效果官方案例 区别&#xff1a;官方的案例更像一个镜子 没有纹理等属性 也没有透明度修改 根据源码进行修改为 MeshStandardMaterial实现反射 使用案例 createReflector() {const plane this.helper.create.plane(2, 2);this.helper.add(plane.mesh);plane.mesh.rotat…

QT DAY6作业

1.学生管理系统&#xff0c;基于QT的数据库中数据表的增删改查 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> //执行sql语句类 #include <QSqlRecord> //数据库记…

强化学习(二)多臂老虎机 “Multi-armed Bandits”——2

1、增量算法估计动作价值 由之前的内容可知&#xff0c;某一个动作被选择 n − 1 n-1 n−1 次后&#xff0c;该动作的价值估计值为 Q n ≐ R 1 R 2 ⋯ R n − 1 n − 1 Q_n\doteq\dfrac{R_1R_2\cdotsR_{n-1}}{n-1} Qn​≐n−1R1​R2​⋯Rn−1​​ 很明显&#xff0c;随着…

【AIGC-文本/图片生成视频系列-10】SparseCtrl:在文本生成视频的扩散模型中添加稀疏控制

目录 一. 项目概述 二. 方法详解 三. 应用结果 四.个人思考 由于扩散模型生成空间的不确定性&#xff0c;仅仅通过文本生成视频时&#xff0c;会导致模糊的视频帧生成。 今天解析的SparseCtrl&#xff0c;是一种有效解决上述问题的方案&#xff0c;通过带有附加编码器的时…

为啥4位单片机那么LOW,还没被淘汰?

我以为8位的51单片机已经够低端了&#xff0c;没想到竟然还有4位单片机&#xff01;它到底有什么优势&#xff1f;用在什么领域&#xff1f; 在刚开始学习单片机的时候&#xff0c;我一直以为用越高端的芯片就越牛逼。 而现实&#xff0c;公司做产品和我们单片机学习者&#xf…