算法的时间复杂度和空间复杂度

一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量

时间维度:是指执行当前算法所消耗的时间,我们通常用 “时间复杂度” 来描述。

空间维度:是指执行当前算法需要占用多少内存空间,我们通常用 “空间复杂度” 来描述。

1. 时间复杂度

我们先来看一个简单的例子

public class TimeCompare {public static void main(String[] args) {int num1=0;int num2=0;//计算1-1000的和-循环求和long start1 = System.currentTimeMillis();for(int i=1;i<=100000;i++){num1+=i;}long start2 = System.currentTimeMillis();//前n项和公式:(首项+末项)*项数/2long start3 = System.currentTimeMillis();num2=(1+100000)*100000/2;long start4 = System.currentTimeMillis();System.out.println("num1:"+num1+"  时间:"+(start2-start1)+"ms");System.out.println("num2:"+num2+"  时间:"+(start4-start3)+"ms");}
}

结果:

num1:705082704  时间:3ms
num2:705082704  时间:0ms

两种方法都可以算出前n项和,但是时间上面却是天壤之别

上面我们通过运行程序得到的时间并不能真正表示时间复杂度,因为程序的运行会受计算机和运行环境的影响

大O符号表示法:
我们一般用 “算法的渐进时间复杂度” 衡量时间复杂度 即:T(n) = O(f(n))

解释: f(n) 表示每行代码执行次数之和

举个栗子:

for(int i=0;i<n;i++){System.out.println("时间复杂度")}

时间复杂度为n,因为输出语句会执行n次

注意:我们求时间复杂度时,直接保留最高次的即可,并且最高次的系数可以省略,常数也可以省略

如:3n^2+2n+1我们会写为:T(n)=n^2

常见的时间复杂度量级有:

  • 常数阶O(1) 只要没有循环等复杂结构就是常数阶

  • 对数阶O(logN)

    //跳出循环需要 2^X=n 即 X=logN(2为底) 事件复杂度为:O(logN)
    int i = 1;
    while(i<n)
    {i = i * 2;
    }
    
  • 线性阶O(n) n次循环就是线性阶

  • 线性对数阶O(nlogN) n次对数阶

  • 平方阶O(n²)

  • 立方阶O(n³)

  • K次方阶O(n^k)

  • 指数阶(2^n)

从上到下时间复杂度依次变大,程序效率变低

2. 空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用

S(n) =O(fn)来定义。

空间复杂度常用的有:O(1)、O(n)、O(n^2)、O(n^3)…

例:

算法执行需要的临时空间不会随着某个变量n的变化而变化,

此时空间复杂度为常量:即S(n)=O(1)

//S(n)=O(1)
int i=0;
i++;
int j=0,k=1;
//空间复杂度为:S(n)=O(n)
int[] arr=new int[n];
for(int i=0;i<arr.length;i++){arr[i]=i;
}

空间复杂度再看只看占用空间(内存)大小-即声明的变量,和执行次数无关

【算法的时间复杂度和空间复杂度】-算法02相关推荐

  1. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  2. 关于算法的时间复杂度和空间复杂度的总结

    一.算法的概念   算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...

  3. 常用的排序算法的时间复杂度和空间复杂度 .

    常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...

  4. 各种常用排序算法的时间复杂度和空间复杂度

    https://blog.csdn.net/jiajing_guo/article/details/69388331 一.常用排序算法的时间复杂度和空间复杂度表格 二.特点 1.归并排序: (1)n大 ...

  5. 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度

    经常使用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 高速排序 O(n2) O(n*log2n) 不稳 ...

  6. python排序算法的时间复杂度_Python算法的时间复杂度和空间复杂度(实例解析)

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...

  7. 算法的时间复杂度与空间复杂度介绍

    本文主要介绍算法的时间复杂度和空间复杂度的相关知识. 1 概述 算法(Algorithm)是指用来操作数据.解决程序问题的方法. 对于同一个问题,使用不同的算法,也许最终得到的结果是相同的,但在执行该 ...

  8. 算法的时间复杂度和空间复杂度总结

    文章目录 前言 算法的时间复杂度和空间复杂度 1.定义 2.计算方法 3.示例 总结 一.什么是时间复杂度? 算法时间复杂度定义: 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进 ...

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

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

最新文章

  1. curl模拟post请求
  2. MDT2008部署之三LTI部署之二
  3. jquery上传图片
  4. unet训练自己的数据集_基于UNet网络实现的人像分割 | 附数据集
  5. SGU 248. Integer Linear Programming( 背包dp )
  6. html网页设如何置访问密码,利用JS给单页html加上简单访问密码,需要密码才能访问!...
  7. Chapter 14 Exercises Problems
  8. python编程(rq调度系统)
  9. SLAM精度测评(绘制比较相机轨迹)- EVO
  10. 如何重启 Windows 10 子系统(WSL) ubuntu
  11. python爬虫淘宝评论图片_淘宝上的图片是怎么被爬取的
  12. C语言符号意思(看了必懂系列)
  13. 如何配置 SSH 免密码登录
  14. Sams-Net: A Sliced Attention-based Neural Network for Music Source Separation论文笔记
  15. MATLAB图形计算器去广告,多功能科学图形计算器(Mathlab)
  16. 《蜡烛人》制作人高鸣:如何原汁原味的将主机游戏移植到手机平台
  17. 4、JSX 基本语法规则
  18. MySql中的like和in走不走索引
  19. mysql 表数据备份和恢复_mysql 数据备份与恢复
  20. Vegas如何刻录DVD?

热门文章

  1. 关于anaconda顺利安装之后,cmd提示conda不是内部命令的问题
  2. 李宏毅线性代数11: 正交(Orthogonality)
  3. Python数据可视化实战应用万字长文从入门到高端(建议收藏)
  4. 从无到有算法养成篇-利⽤栈思想解决问题
  5. MATLAB基本操作(一):MATLAB中变量的文件存储
  6. 虚拟鼠标代替安卓触屏_iQOO对比黑鲨2:那个虚拟按键设计更好?
  7. Python的__str__()方法
  8. 【机器学习算法-python实现】最大似然估计(Maximum Likelihood)
  9. 历经8年双11流量洗礼,淘宝开放平台如何攻克技术难关?--转
  10. java中的vo 、dto 、dao--转