一般时间复杂度的表现形式是大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. 数据结构与算法之时间复杂度详解

    数据结构与算法之时间复杂度详解 目录 排序算法的介绍和分类 算法的时间复杂度概念 常见的时间复杂度解析 平均时间复杂度和最坏时间复杂度 空间复杂度介绍 1. 排序算法的介绍和分类 排序算法的介绍 排序 ...

  2. 冒泡排序、选择排序、插入排序算法及时间复杂度详解

    冒泡.选择.插入排序算法及其时间复杂度详解 冒泡排序 选择排序 插入排序 冒泡排序 流程: 把0到N个元素中的最大值放在N位置 把0到N-1个元素中的最大值放在N-1位置 把0到N-2个元素中的最大值 ...

  3. pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现

    递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...

  4. 快速排序和二分查找时间复杂度详解

    因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4...m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结 ...

  5. 算法的时间复杂度详解

    算法的时间复杂度是衡量一个算法效率的基本方法.在阅读其他算法教程书的时候,对于算法的时间复杂度的讲解不免有些生涩,难以理解.进而无法在实际应用中很好的对算法进行衡量. <大话数据结构>一书 ...

  6. 建堆的时间复杂度详解

    接上之前堆的博客,里面我曾提过建堆的时间复杂度是O(N),那么是为什么呢?下面进行推导 按照最坏情况,该堆是满二叉树,如上图 又依据公式: 黑色框圈住的代表的是每层有的节点的个数 第一层有2^(1-1 ...

  7. 时间复杂度详解+例题分析

    目录 导语简言 1.what-什么是时间复杂度 2.How-如何表示时间复杂度--大O表示法 概念 表达式推导 3.example-例题解析 导语简言 1.算法时间复杂度:算法执行时间与算法的语句执行 ...

  8. 数据结构<1>时间复杂度详解和leetcode例题

    文章目录 什么是时间复杂度和空间复杂度 前言(算法效率) 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言(算法效率) 算法效率分析分为两种:第一种是时间效率,第二种是 ...

  9. 空间复杂度(超详解+例题)

    全文目录 引言 空间复杂度 例题 test1 test2(冒泡排序) test3(求阶乘) test4(斐波那契数列) 总结 引言 在上一篇文章中,我们提到判断一个算法的好坏的标准是时间复杂度与空间复 ...

最新文章

  1. PTA 基础编程题目集 7-14 求整数段和 C语言
  2. 从零开始单排学设计模式「策略模式」黑铁 II
  3. 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
  4. 未定义标识符 stringc/c++(20)_20款丰田酷路泽5700绝版现车最后促销
  5. VMware ubuntu 虚拟机只剩下lo回环网卡,上不了网(无法上网、无法连接网络)(环回)
  6. php: eclipse 编辑 php
  7. 洛谷 P3320: bzoj 3991: LOJ 2182: [SDOI2015]寻宝游戏
  8. path、classpath理解
  9. 网络常见的 9 大命令
  10. Android开发之OpenCV实战:开发环境的搭建(身份证号码识别为例)
  11. html带圈的数字号码,html – 带有数字的CSS圈子
  12. magisk小问题解答
  13. 石英晶振的电路组成与设计
  14. 如何快速实现告警短信的通知方式?
  15. 宾州州立大学计算机排名,宾州州立大学帕克分校排名
  16. CSS 边框四个角效果
  17. alibaba.jym.item.external.goods.batch.offsale( 交易猫外部商家批量下架商品接口 )
  18. 辅导作业很“崩溃”?猿辅导教你三招告别怒吼式教育
  19. 哪款分体式蓝牙耳机最好用?分体式蓝牙耳机推荐!
  20. (Verilog)单周期CPU设计

热门文章

  1. 什么是超链接:下划线、样式、字体颜色、代码怎么做?
  2. 转发器、网桥、路由器和网关的区别如下:
  3. android中dalvik虚拟机参数
  4. 儿童学计算机编程好处,儿童编程课学了有好处吗?4大优势家长要知道
  5. Windows 10 企业版 LTSC安装 Microsoft Store
  6. word文档合并单元格在什么地方
  7. Rstudio必用快捷键
  8. Apache中RewriteRule和RewriteCond规则参数的详细介绍
  9. 元宇宙:从数字孪生到数字共生
  10. GNN、GCN、GAT关系