目录

1.什么是复杂度

2.什么是时间/空间复杂度

时间复杂度:

空间复杂度(Space Complexity):

3.常用的排序/算法复杂度比较


我们在做数据库相关的东西时,经常谈到一个概念叫复杂度,比如添加,删除,查找的复杂度。

在做算法相关的东西时,又常提到两个概念叫 时间复杂度、空间复杂度。

那这些复杂度都是什么呢?

1.什么是复杂度

计算机在处理大量数据的时候,我们查找速度快慢的性能优劣势的关键叫做复杂度(Order)
比如一个速度是y=n或y=2n,这个n表示数据量,y表示性能开销,那么这个复杂度标志为O(n).
O(1)表示,不会因为数量量增大而增加开销,性能最好

比如

我从任意排列的1-100之间查找一个数字,复杂度就是O(n)

而我从有序排列1-100之间查找一个数字,复杂度就是O(1)

复杂度为O(logn),logn指的是把n除以多少次2之后变为1。
实际上,这个时间复杂度是介于O(1)~O(n)之间

复杂度示例图

2.什么是时间/空间复杂度

算法复杂度分为时间复杂度和空间复杂度。

其作用:时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

时间和空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。

时间复杂度:

1:算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好地反映出算法的优劣与否;

2:算法执行时间需要依据该算法编制的程序在计算机上执行运行时所消耗的时间来度量,度量方法有两种,事后统计方法和事前分析估算方法,因为事后统计方法更多的依赖计算机的硬件,软件等环境因素,有时容易掩盖算法本身的优劣。因此常常采用事前分析估算的方法;

3:一个算法是由控制结构(顺序,分支,循环三种)和原操作(固有数据类型的操作)构成的,而算法时间取决于两者的综合效率;

4:一个算法花费的时间与算法中语句的执行次数成正比,执行次数越多,花费的时间就越多。一个算法中的执行次数称为语句频度或时间频度。记为T(n);

5:在时间频度中,n称为问题的规模,当n不断变化时,它所呈现出来的规律,我们称之为时间复杂度(其实在这中间引入了一个辅助函数f(n),但它与t(n)是同数量级函数,我们且先这样理解。)

6:在各种算法中,若算法中的语句执行次数为一个常数,则时间复杂度为o(1);同时,若不同算法的时间频度不一样,但他们的时间复杂度却可能是一样的,eg:T(n)=n^2+2n+4  与 T(n)=4n^2+n+8,他们的时间频度显然不一样,但他们的时间复杂度却是一样的,均为O(n^2),时间复杂度只关注最高数量级,且与之系数也没有关系。

7: 求解算法的时间复杂度的具体步骤是:
  ⑴ 找出算法中的基本语句;
  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
  ⑵ 计算基本语句的执行次数的数量级;
  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
  ⑶ 用大Ο记号表示算法的时间性能。
  将基本语句执行次数的数量级放入大Ο记号中。
  如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加

下面我来举一个简单例子:

for(i=1;i<=n;i++)
{a++};
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a++;
}
}
第一个for循环的时间复杂度为o(n),第二个for循环时间复杂度为o(n^2),则整个算法的时间复杂度为o(n^2+n)。
o(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,时间复杂度就为o(1)。

空间复杂度(Space Complexity):

1:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度;

2:一个算法在计算机上占用的内存包括:程序代码所占用的空间,输入输出数据所占用的空间,辅助变量所占用的空间这三个方面,程序代码所占用的空间取决于算法本身的长短,输入输出数据所占用的空间取决于要解决的问题,是通过参数表调用函数传递而来,只有辅助变量是算法运行过程中临时占用的存储空间,与空间复杂度相关;

3:通常来说,只要算法不涉及到动态分配的空间,以及递归、栈所需的空间,空间复杂度通常为0(1);

4: 对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。

3.常用的排序/算法复杂度比较

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

排序法

最差时间分析

平均时间复杂度

稳定度

空间复杂度

冒泡排序

O(n2)

O(n2)

稳定

O(1)

插入排序

O(n2)

O(n2)

稳定

O(1)

选择排序

O(n2)

O(n2)

稳定

O(1)

二叉树排序

O(n2)

O(n*log2n)

不一顶

O(n)

快速排序

O(n2)

O(n*log2n)

不稳定

O(log2n)~O(n)

堆排序

O(n*log2n)

O(n*log2n)

不稳定

O(1)

希尔排序

O

O

不稳定

O(1)

查找算法时间复杂度

查找

平均时间复杂度

查找条件

算法描述

顺序查找

O(n)

无序或有序队列

按顺序比较每个元素,直到找到关键字为止

二分查找(折半查找)

O(logn)

有序数组

查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 如果在某一步骤数组为空,则代表找不到。

二叉排序树查找

O(logn)

二叉排序树

在二叉查找树b中查找x的过程为:

1. 若b是空树,则搜索失败

2. 若x等于b的根节点的数据域之值,则查找成功;

3. 若x小于b的根节点的数据域之值,则搜索左子树

4. 查找右子树。

哈希表法(散列表)

O(1)

先创建哈希表(散列表)

根据键值方式(Key value)进行查找,通过散列函数,定位数据元素。

分块查找

O(logn)

无序或有序队列

将n个数据元素"按块有序"划分为m块(m ≤ n)。

每一块中的结点不必有序,但块与块之间必须"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……。然后使用二分查找及顺序查找。

时间/空间复杂度及常用算法的复杂度比较相关推荐

  1. 算法的复杂度解析(时间复杂度和空间复杂度)

    时间复杂度与空间复杂度 1.算法的复杂度: 2.时间复杂度: 1.大O表示法: 2.大O推导方法: 3.一些常见的大O运行时间: 3.空间复杂度: 4.个别特殊举例: 1.斐波那契数列的时间和空间复杂 ...

  2. 算法设计与分析课程的时间空间复杂度

    算法设计与分析课程的时间空间复杂度: 总结 算法 时间复杂度 空间复杂度 说明 Hanoi $ O(2^n) $ $ O(n) $ 递归使用 会场安排问题 \(O(nlogn)\) \(O(n)\) ...

  3. 数据结构与算法的时间空间复杂度

    提到数据结构与算法就不得不提时间复杂度和空间复杂度,本人看大部分文章介绍都比较晦涩难懂,就想着用简单的代码示例快速让你理解数据结构与算法的时间空间复杂度. 首先,时间复杂度表示的是使用某个数据结构或者 ...

  4. 排序算法 之四 分类、时间/空间复杂度、如何选择

    写在前面   现在网上关于排序算法的文档不计其数,为什么要写这篇文章呢?主要是因为一些算法虽然在平时有用到,但是从来没有细细整理过,没有个统一.整体的认识.写这篇文章一来是进行一下总结,二来趁机再系统 ...

  5. Algorithm Master Road:算法的时间/空间复杂度

    很多同学都觉得算法很难,难以入门,难以理解,更难以掌握和运用,其实归根溯源,我们可以把所有的问题都通过枚举法来解决,但是受困于「时间」和「空间」的因素,有的时候并不能枚举所有的情况,所以需要通过精妙的 ...

  6. 【数据结构起航】:衡量算法的好坏--时间空间复杂度

    时间复杂度和空间复杂度 文章目录 时间复杂度和空间复杂度 1.算法效率 1.1算法复杂度 1.2复杂度在OJ里的应用 2.时间复杂度 2.1时间复杂度的概率 2.2大O渐进表示法 推导大O阶方法: 2 ...

  7. 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序

    简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景: 顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直 ...

  8. 冰与火之歌:「时间」与「空间」复杂度

    算法(Algorithm)是指用来操作数据.解决程序问题的一组方法.对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,比如排序就有前面的十大经典排序和几种奇葩排序,虽然结果相同,但在过程中消 ...

  9. python常用代码_Python常用算法学习(3)(原理+代码)——最全总结

    1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...

最新文章

  1. 【linux】shell中整数运算的加、减、乘、除
  2. Redis进阶-核心数据结构进阶实战
  3. SAP S/4HANA extensibility扩展原理介绍
  4. 关于用户空间和内核空间
  5. c语言编辑输出后汉字乱码,为什么这个程序会输出汉字乱码
  6. php分解质因数,用PHP如何实现将一个整数分解为质因数的积?
  7. Page.ClientScript.RegisterArrayDeclaration
  8. template 标签
  9. 小程序组件的使用(一)创建组件
  10. Windows下安装MongoDB
  11. 缺少网卡固件导致的网络服务异常,Can‘t load firmware file bnx2x/bnx2x-e2-7.13.15.0.fw
  12. objective-c 汇编语言,Objective-C和C的区别?
  13. canvas 加载图片
  14. 数值计算之 梯度向量和梯度矩阵,雅可比矩阵,海森矩阵
  15. Denoise_bayerdomain
  16. 最全的LBS手机定位技术说明
  17. Debian搭建PPTP
  18. 解锁用户 修改用户登录尝试次数无限
  19. ROS智能车定位导航仿真(已实现)
  20. OLED显示与LCD相比的优缺点都有哪些

热门文章

  1. c# uwp html源码,调试 UWP 应用中的 HTML 和 CSS - Visual Studio | Microsoft Docs
  2. Spark Streaming揭秘 Day14 State状态管理
  3. Win32 Api函数
  4. 用java写一个工作日API
  5. Peer pressure in extortion game can resolve social dilemma(博弈论+机制设计) 论文阅读笔记
  6. 腾讯云商标注册入口链接大全
  7. 个人所得税专项抵扣:Apsara Clouder云计算专项技能认证考试题目和答案【保姆级别教程】
  8. 【代码审计】Cscms_v4.1 任意文件删除漏洞实例
  9. php后台闪退,详解Cscms V4程序网站后台登陆出现闪退
  10. 最新发布:2020年项目管理PMP认证考试时间