C++时间复杂度详解
一般时间复杂度的表现形式是大O表示法,即O( )。
大O表示法有以下4条法则:
1.括号中所有常数加数省略,如只有一个常数,记为1。如O(372+n)→O(n)、O(89)→O(1)。
2.括号中去掉所有常数乘数 如O(2n)→O(n)、O(3n+n+45*2)→O(4n+90)→O(4n)→O(n)。
3.括号中的数是整个代码每个操作次数的总和
4.括号中指数和底数都不能省略
用大O表示法出现较为频繁有以下8种,从快到慢排序为:
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)
即:
这里借鉴了一下CSDN苏禾呀的图片。
下面找几种常用的解释:
O(1) [常数阶]
int main() {int x;//1次cin>>x;//1次for(int i=1;i<=231;i++) x*=x;//231次(注意,出现循环不一定是O(n),而要根据操作次数来判断)cout<<x;//1次return 0//1次
}
上面的主函数时间复杂度为O(1+1+231+1+1),根据上面的计算法则,
O(1+1+231+1+1)
=O(235)
=O(1)
O(n) [线性阶]
int main() {int n; //1次cin>>n; //1次n*=1024; //1次for(int i=1;i<=n;i++)cout<<i<<endl; //n*1024次while(n--) {cout<<n<<endl; //n*1024次}return 0; //1次
}
上面的主函数时间复杂度为O(1+1+1+n*1024*2+1),根据上面的计算法则,
O(1+1+1+n*1024*2+1)
=O(1*4+2048*n)
=O(2048*n)
=O(n)
O(logn) [对数阶]
int main() {int i,n; //1次cin>>n; //1次while(i<n) {i*=2;//log n次cout<<"hello world!"; //log n次}return 0; //1次
}
上面的主函数时间复杂度为O(1+1+1+logn*2),根据上面的计算法则,
O(1+1+1+logn*2)
=O(logn*2)
=O(logn)
注意:
logn 表示求 2的几次方等于n,著名的二分折半查找的时间复杂度就是O(logn)。
O(n^2) [平方阶]
int main() {int n; //1次cin>>n; //1次for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++)cout<<"dhuheidhushgfgirfiowgrgougrugubo"; //n*n次}return 0; //1次
}
上面的主函数时间复杂度为O(1+1+1+n*n),根据上面的计算法则,
O(1+1+1+n*n)
=O(n*n)
=O(n^2)
在这里:
循环输出的操作次数为n^2次,因为外层循环操作了n次,而每一次外层循环时,又要做n次内层循环,根据乘法原理,得到总操作数为n*n。
另
在遇到if-else 时,其操作次数应以较多次数为结果。
例如:
int main() {int n,k;cin>>n>>k;if(k==1) {for(int i=1;i<=n;i++) cout<<i<<endl; //n次}else cout<<"hello!"; //1次return 0;
}
在上面的选择语句一条分支为n,一条分支为1。O(n)>O(1),所以选择语句的时间复杂度为O(n)。
文章到这里就结束了,求点赞,求关注!
C++时间复杂度详解相关推荐
- 数据结构与算法之时间复杂度详解
数据结构与算法之时间复杂度详解 目录 排序算法的介绍和分类 算法的时间复杂度概念 常见的时间复杂度解析 平均时间复杂度和最坏时间复杂度 空间复杂度介绍 1. 排序算法的介绍和分类 排序算法的介绍 排序 ...
- 冒泡排序、选择排序、插入排序算法及时间复杂度详解
冒泡.选择.插入排序算法及其时间复杂度详解 冒泡排序 选择排序 插入排序 冒泡排序 流程: 把0到N个元素中的最大值放在N位置 把0到N-1个元素中的最大值放在N-1位置 把0到N-2个元素中的最大值 ...
- pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现
递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...
- 快速排序和二分查找时间复杂度详解
因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4...m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结 ...
- 算法的时间复杂度详解
算法的时间复杂度是衡量一个算法效率的基本方法.在阅读其他算法教程书的时候,对于算法的时间复杂度的讲解不免有些生涩,难以理解.进而无法在实际应用中很好的对算法进行衡量. <大话数据结构>一书 ...
- 建堆的时间复杂度详解
接上之前堆的博客,里面我曾提过建堆的时间复杂度是O(N),那么是为什么呢?下面进行推导 按照最坏情况,该堆是满二叉树,如上图 又依据公式: 黑色框圈住的代表的是每层有的节点的个数 第一层有2^(1-1 ...
- 时间复杂度详解+例题分析
目录 导语简言 1.what-什么是时间复杂度 2.How-如何表示时间复杂度--大O表示法 概念 表达式推导 3.example-例题解析 导语简言 1.算法时间复杂度:算法执行时间与算法的语句执行 ...
- 数据结构<1>时间复杂度详解和leetcode例题
文章目录 什么是时间复杂度和空间复杂度 前言(算法效率) 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言(算法效率) 算法效率分析分为两种:第一种是时间效率,第二种是 ...
- 空间复杂度(超详解+例题)
全文目录 引言 空间复杂度 例题 test1 test2(冒泡排序) test3(求阶乘) test4(斐波那契数列) 总结 引言 在上一篇文章中,我们提到判断一个算法的好坏的标准是时间复杂度与空间复 ...
最新文章
- PTA 基础编程题目集 7-14 求整数段和 C语言
- 从零开始单排学设计模式「策略模式」黑铁 II
- 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
- 未定义标识符 stringc/c++(20)_20款丰田酷路泽5700绝版现车最后促销
- VMware ubuntu 虚拟机只剩下lo回环网卡,上不了网(无法上网、无法连接网络)(环回)
- php: eclipse 编辑 php
- 洛谷 P3320: bzoj 3991: LOJ 2182: [SDOI2015]寻宝游戏
- path、classpath理解
- 网络常见的 9 大命令
- Android开发之OpenCV实战:开发环境的搭建(身份证号码识别为例)
- html带圈的数字号码,html – 带有数字的CSS圈子
- magisk小问题解答
- 石英晶振的电路组成与设计
- 如何快速实现告警短信的通知方式?
- 宾州州立大学计算机排名,宾州州立大学帕克分校排名
- CSS 边框四个角效果
- alibaba.jym.item.external.goods.batch.offsale( 交易猫外部商家批量下架商品接口 )
- 辅导作业很“崩溃”?猿辅导教你三招告别怒吼式教育
- 哪款分体式蓝牙耳机最好用?分体式蓝牙耳机推荐!
- (Verilog)单周期CPU设计