程序的时间和空间复杂度
一、时间复杂度概念
时间复杂度是程序执行所耗费的时间,一般是通过机器进行测试,但通过理论分析也同样能够得出
两个概念:
(1)时间频度:一个算法中语句的执行次数,是一个具体的数值,通常用T(n)来表示,n代表问题的规模
(2)时间复杂度:随着n的不断变化,T(n)/f(n)逐渐趋近于一个常数,我们使用O(f(n))来表示时间复杂度
其实上面用到的就是一个等价无穷小的概念
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
二、时间复杂度计算
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数
三、程序举例
(1)O(1)的时间复杂度
这里要注意的是,不管程序有多少行语句,只要其没有涉及到可以变得n,那么他就是一个简答的程序,例如下面的程序
- int i = 1000;
- while(n != 0){
- i--;
- }
(2)O(n)的时间复杂度
程序前两行的时间频度是2,第4行的时间频度是n,第5行的时间频度是n,总时间频度是2n+2,时间复杂度是O(n)
- int a = 1
- int b = 2
- for(int i = 0; i < n; i++){
- a = a + b;
- b++;
- }
(3)O(log2n)的时间复杂度
程序第一行的频度是1,第三行的频度是f(n),则2^f(n)<=n, f(n)<=log2n
- int i = 1;
- while(i < n){
- i * = 2;
- }
(4)O(n2)的时间复杂度
因为O(2n2+n+1)=n2(去低阶项,去掉常数项,去掉高阶项的常参得到),所以T(n)= =O(n2);
- int sum = 0;
- for(int i = 0; i <= n; i++){
- for(int j = 0; j <= n; j++){
- sum++;
- }
- }
四、空间复杂度
程序的时间和空间复杂度相关推荐
- 如何判断程序的复杂程度:时间和空间复杂度
文章目录 如何判断程序的复杂程度:时间和空间复杂度 1. 时间复杂度: 如何判断一段代码的时间复杂度 小练习1:求和计算1~n的和 小练习2:求斐波那契数列 主定理 常用算法中的应用 2. 空间复杂度 ...
- 算法笔记(一)——简述时间、空间复杂度分析
前段时间通过小詹随笔分享的链接在极客时间购买了王争老师的<数据结构与算法之美>的课程,小詹学长果真是一个很靠谱的学长,凡是通过他的链接购买的课程,之后建有微信群,相互监督学习并分享学习笔记 ...
- 尾递归对时间与空间复杂度的影响(上)
以前我也在博客上简单谈过"尾递归"及其优化方式方面的话题.前几天有同学在写邮件向我提问,说是否所有的递归算法都能改写为尾递归,改写成尾递归之后,是否在时间和空间复杂度方面都能有所提 ...
- 排序算法的时间与空间复杂度分析
时间复杂度 时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算 ...
- 「算法与数据结构」时间与空间复杂度
写在前面 可能有些人会吐槽,学算法有什么用,顶多就是去面试大厂的时候能用上,大厂面试算法也只是强中筛强的一个敲门砖而已,我又不去面大厂,不用学它,真的是这样吗? 肯定不是,在计算机行业发展,不管是前端 ...
- Java时间和空间复杂度
文章目录 前言 一.如何衡量一个算法的好坏 二. 算法效率 三. 时间复杂度 3.1 时间复杂度的概念 3.2 大O的渐进表示法 3.3 推导大O阶方法 3.4 常见时间复杂度计算举例 四. 空间复杂 ...
- 时间和空间复杂度的计算方法
时间复杂度与空间复杂度都是针对算法而言的,我们知道数据+算法=程序,那么一个程序在运行过程中,必然要占用计算机的内存资源,而计算结果也需要时间: 那么我们可以这样理解: 时间复杂度 = 程序运行的时间 ...
- 计算机考研2020时间,2020计算机考研复习要点:时间与空间复杂度
2020考研初试的时间已经越来越近了,大家的专业课的复习也要抓紧了,报考计算机的小伙伴要考哪些知识呢?跟着天任启航一起来看看时间与空间复杂度的知识点吧! 首先我们来看一下数据结构的一些基本的概念 数据 ...
- 时间和空间复杂度计算
目录 本章目标 理解时间空间复杂度 计算时间复杂度 计算空间复杂度 计算练习 1.1常见时间复杂度计算举例 例1 例2 例3 例4 例5 1.2常见空间复杂度的计算 例1 例2 例3 本章目标 1.什 ...
- a*算法的时间复杂度_数据结构与算法系列——时间、空间复杂度
数据结构和算法本质就是帮我们用最快的时间和最少的空间来执行我们的代码.所以,执行效率是衡量一个算法的非常重要的指标.那如何来计算你的算法代码的执行效率呢?这就需要时间.空间复杂度来分析了. 有人可能会 ...
最新文章
- boos里的AHCI RAID_安徒恩Raid删除,安徒恩讨伐战上线,详细攻略快速看,成为新的摸金圣地...
- 如何在Javascript中访问对象的第一个属性?
- Python - MySQL数据库操作
- SAP 调用外部系统
- 马云最怕的事还是来了,央行对借呗动真格!
- edge robert matlab,哪位熟悉matlab的大神路过瞄一眼哈
- java 插入mysql 日期_Java日期-插入数据库
- 15大统计数据描绘网络安全行业市场蓝图
- 性能飙升160%!阿里云发布第七代ECS、云原生数据库PolarDB-X等重磅新品
- Top 10 Security Issue Solution
- 【Music】Never took the time
- 浅谈PageHelper插件分页实现原理及大数据量下SQL查询效率问题解决
- 超级HOOK技术无需分析基址
- 传统IT架构下面临的挑战?
- Linux 命令 大结
- 机器人零力拖动技术路线
- Intellij Idea Database schemas显示
- 《python(廖雪峰课程)》学习笔记
- 简单个人静态HTML网页设计作品 基于HTML+CSS+JavaScript仿小米手机网站 html静态在线购物商城网页制作
- STM32系列 (一)开发环境的搭建
热门文章
- md格式的文档转化成pdf格式
- C语言将十进制输出二进制、八进制、十六进制的方法总结
- php汉字转换拼音的类 做了修改用mb_convert_encoding代替iconv实现编码转换
- 浏览器主页被修改的解决方案
- Chrome主页被强制修改为百度解决办法
- zabbix 5.0所有依赖包_最详细的 Zabbix 使用教程
- CSS拓展选择器 组合选择器 后代选择器 交集选择器 伪类选择器
- 怎么释放mysql连接_数据库连接释放问题
- 【Python PIL】用PIL绘制中国象棋棋盘
- 一种新型的EC编码,LRC码,基于RS码的改进,特点介于RS和副本之间。