时间复杂度计算分为以下三个步骤(推导大O阶):

1.用常数1取代运行时间中的所有加法常数
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶。

下面给大家看几个例子:

(1)常数阶O(1):

int sum = 0,n = 100;/*执行一次*/
sum = (1+n)*n/2;/*执行一次*/
printf("%d",sum);/*执行一次*/

这段代码的运行次数是3,根据我们推导大O阶的方法,第一步把常数项3改为1;然后第二步保留最高项,但是它没有最高项,所以这个算法的时间复杂度为O(1)。
另外,对于分支结构而言,无论是真是假,执行次数都是恒定的,不会随着n的变化而变化,它的时间复杂度也是O(1)。

(2)线性阶O(n):

int i;
for(i = 0;i<n;i++){/*时间复杂度为O(1)的程序步骤序列*/
}

这个算法的运行次数为n,第一步我们将其常数项变为1,但是它没有常数项,故跳过;第二步只保留最高项n;第三步去除最高项的系数,这个最高项的系数本身就是1;所以这个的时间复杂度就为O(n)。

(3)对数阶O(logn):

int count = 1;
while(count<n)
{count = count*2;/*时间复杂度为O(1)的程序步骤序列*/
}

同样的,我们首先要计算出这个算法总共需要的运行次数,当count=1时,while里面会执行:
count = 1* 2 = 2
count = 2* 2 = 4
count = 4* 2 = 8
count = 8* 2 = 16
……
设总共执行了t次
所以2^(t-1)*2 = n
t = log_2 n

(4)平方阶O(n^2):

int i,j;
for(i = 0;i<n;i++){for(j = 0;j<n;j++){/*时间复杂度为O(1)的程序步骤序列*/
}
}

循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。

int i,j;
for(i = 0;i<n;i++){for(j = i;j<n;j++){/*时间复杂度为O(1)的程序步骤序列*/
}
}

当i = 0时,里面循环执行了n次;
当i = 1时,里面循环执行了(n-1)次;
当i = 2时,里面循环执行了(n-2)次;
……
当i = n-1时,里面循环执行了(n-(n-1))次
所以总的执行次数为n+(n-1)+……+(n-(n-1))=(n^2)/2+n/2
同样的,第一步将常数项变为1,此式没有;
第二步只保留最高项,即(n^2)/2;
第三步去除这个项的系数,所以它的时间复杂度为O(n^2)。

时间复杂度的计算,你,学会了吗?

时间复杂度的计算详解相关推荐

  1. 时间复杂度怎么算详解

    时间复杂度怎么算详解 我们假设计算机运行一行基础代码需要执行一次运算. int aFunc(void) {printf("Hello, World!\n"); // 需要执行 1 ...

  2. 音视频开发(28)---流媒体并发量与宽带、码率计算详解

    流媒体并发量与宽带.码率计算详解 码率计算公式     基本的算法是:[码率](kbps)=[文件大小](字节)X8/[时间](秒)*1000     音频文件专用算法:[比特率](kbps)=[量化 ...

  3. Java stream流式计算详解

    Java stream流式计算详解 1. Stream概述 1.1 Stream简介 1.2 Stream分类 2. Stream操作 2.1 Stream创建 2.2 Stream无状态操作 2.3 ...

  4. 看门狗配置以及计算详解

    独立看门狗配置及计算详解_stand_young的博客-CSDN博客https://blog.csdn.net/weixin_44612435/article/details/113500920

  5. 使用GPU进行神经网络计算详解

    Pytorch学习笔记(六):使用GPU的简单LeNet网络模型中也提到了如何实现GPU上的运算,虽然不详细,但是也足够. 总结:(如果对于总结知识已经比较熟悉,那么下面的详解可以不用看) 默认CPU ...

  6. flink大数据处理流式计算详解

    flink大数据处理 文章目录 flink大数据处理 二.WebUI可视化界面(测试用) 三.Flink部署 3.1 JobManager 3.2 TaskManager 3.3 并行度的调整配置 3 ...

  7. 【数据结构入门】算法的时间复杂度和空间复杂度详解

    文章目录 (1)算法效率 (2)时间复杂度的计算 1)什么是时间复杂度 2)大O渐进表示法(估算) 3)时间复杂度计算实例 4)总结 5)一些思考 (3)空间复杂度的计算 (4)常见复杂度对比 本篇前 ...

  8. Java——时间复杂度、空间复杂度详解

    复杂度 算法效率 时间复杂度 什么是时间复杂度 推导大 O 阶的方法 算法情况 计算冒泡排序的时间复杂度 计算二分查找的时间复杂度 计算阶乘递归的时间复杂度 计算斐波那契递归的时间复杂度 空间复杂度 ...

  9. 时间复杂度和空间复杂度详解带例题(精)

    算法 算法(Algorithm)是指用来操作数据.解决程序问题的一组方法.对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别. 那么我们应该如何去衡 ...

最新文章

  1. vue 去除路由时候的#
  2. 服务 TCP 断线错误分析
  3. GDIPlus灰度化图像
  4. My.Ioc 代码示例——避免循环依赖
  5. 查询使用NoLock
  6. 04---Net基础加强
  7. atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游
  8. 怎么将PDF文件在线转换成JPG图片
  9. 关于office2016和visio2016无法共存的问题
  10. greensock下载_使用GreenSock完成我们的可拖动的画布外菜单
  11. 树莓派Pico 开机自动运行程序
  12. 计算机网络 理解拥塞控制
  13. 如何查看计算机关闭原因,电脑总是自动重启关机怎么样查找原因
  14. 使用Git提交代码时出现Author identity unknow
  15. Mac VScode 常用快捷键
  16. 【每日最爱一句】2013.07.18
  17. JS盒子点击时跟随鼠标移动
  18. # Windows下关于安装Geany编辑器过程中的一点小发现(可能对初次安装的人有用)
  19. 生活中软件易用性的例子_多用“举出例子”“比如说”,来进行生活中的语言交流...
  20. CCF-201409-5-拼图

热门文章

  1. 散列表、散列函数和散列冲突以及应用场景(一文看懂)
  2. 虚拟机CentOS无网络连接
  3. vue中使用数组方法push
  4. dw1000 PA和LNA控制
  5. el-form 清除表单验证结果
  6. ArrayList.toArray()
  7. matlab取矩阵元素的模,Matlab矩阵元素提取
  8. word图文混排复制到wangEditor图片不显示
  9. Hive秒数转成时分秒
  10. 拉格朗日乘数法和KKT条件的直观解释