时间复杂度与空间复杂度总结
时间复杂度:
时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。 当我们面前有多个算法时,我们可以通过计算时间复杂度,判断出哪一个算法在具体执行时花费时间最多和最少。
常见的时间复杂度有: 常数阶O(1), 对数阶O(log2 n), 线性阶O(n), 线性对数阶O(n log2 n), 平方阶O(n^2), 立方阶O(n^3) k次方阶O(n^K), 指数阶O(2^n)。
随着n的不断增大,时间复杂度不断增大,算法花费时间越多。
计算方法
①选取相对增长最高的项 ②最高项系数是都化为1 ③若是常数的话用O(1)表示 如f(n)=2*n^3+2n+100则O(n)= n^3。 通常我们计算时间复杂度都是计算最坏情况
时间复杂度的计算:
(1)如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。
1 int x=1;
2 while (x <10)
3 {
4 x++;
5 }
该算法执行次数是10,是一个常数,用时间复杂度表示是O(1)。
(2)当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。
1 for (i = 0; i < n; i++)
2 {
3 for (j = 0; j < n; j++)
4 {
5 ;
6 }
7 }
该算法for循环,最外层循环每执行一次,内层循环都要执行n次,执行次数是根据n所决定的,时间复杂度是O(n^2)。
(3)循环不仅与n有关,还与执行循环所满足的判断条件有关。
1 int i=0;
2 while (i < n && arr[i]!=1)
3 {
4 i++;
5 }
在此循环,如果arr[i]不等于1的话,时间复杂度是O(n)。如果arr[i]等于1的话,则循环不能执行,时间复杂度是0。
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。
计算方法:
①忽略常数,用O(1)表示 ②递归算法的空间复杂度=递归深度N*每次递归所要的辅助空间 ③对于单线程来说,递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。
空间复杂度的计算:
1 int a;
2 int b;
3 int c;
4 printf("%d %d %d n",a,b,c);
它的空间复杂度O(n)=O(1);
1 int fun(int n,)
2 {
3 int k=10;
4 if(n==k)
5 return n;
6 else
7 return fun(++n);
8 }
递归实现,调用fun函数,每次都创建1个变量k。调用n次,空间复杂度O(n*1)=O(n)。
时间复杂度与空间复杂度总结:
- linux查看系统信息
- 从马尔科夫链到吉布斯采样与PageRank
- 关于eventfd,epoll,线程间通信小记
- RNA-seq 检测变异之 GATK 最佳实践流程
- [Python]Matplotlib绘图基础
- Find命令-Linux系统搜索利器
- PHP 代码规范简洁之道
- Linux申请大页内存(mmap)
- perl模块安装大全
- linux lsof命令查看文件占用进程
- 从黑暗走向光明:Python包安装进阶之路
- Centos7.2/7.3集群安装Kubernetes 1.8.4 + Dashboard
- PsySH——PHP交互式控制台
- 如何将 Text, XML, CSV 数据文件导入 MySQL
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python操作redis数据库
- pytest 测试框架学习(1):初识
- 爬虫工程师也应该会的 NodeJS 知识(三)- 快速抛弃 execjs
- 八皇后问题Python实现
- 进击吧!Pythonista(6/100)
- 进击吧!Pythonista(9/100)
- 数据结构基础(一)数组,矩阵
- pytest 测试框架学习(3):pytest.approx
- pytest 测试框架学习(4):pytest.fail
- SpringBoot 开发秘籍 - 启动时配置校验
- pytest 测试框架学习(5):pytest.skip
- pytest 测试框架学习(6):pytest.importorskip
- Java 自定义注解及使用场景
- pytest 测试框架学习(8):pytest.exit
- Linux傻瓜式四步完美安装Python3.7