算法复杂度与性能的解释与计算方法

  • 时间复杂度
    • 时间复杂度的简介
    • 时间复杂度的计算方法
  • 空间复杂度
    • 空间复杂度的简介
    • 空间复杂度的计算方法
  • 其他指标
    • 排序算法的稳定性

算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。)

时间复杂度

时间复杂度的简介

在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。

时间复杂度的计算方法

为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元运行的时间都是相同的。因此,总运行时间和算法的操作单元数量最多相差一个常量系数。
相同大小的不同输入值仍可能造成算法的运行时间不同,因此我们通常使用算法的最坏情况复杂度,记为T(n),定义为任何大小的输入n所需的最大运行时间。另一种较少使用的方法是平均情况复杂度,通常有特别指定才会使用。时间复杂度可以用函数T(n) 的自然特性加以分类,举例来说,有着T(n) =O(n) 的算法被称作“线性时间算法”;而T(n) =O(M^n) 和M= O(T(n)) ,其中M≥n> 1 的算法被称作“指数时间算法”。
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。
时间频度
一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

空间复杂度

空间复杂度的简介

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。

空间复杂度的计算方法

类似于时间复杂度的讨论,一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常简称为空间复杂度。空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是通过参数表由调用函数传递而来的,它不随本算法的不同而改变。存储算法本身所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。算法在运行过程中临时占用的存储空间随算法的不同而异,有的算法只需要占用少量的临时工作单元,而且不随问题规模的大小而改变,我们称这种算法是“就地"进行的,是节省存储的算法,有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如快速排序和归并排序算法就属于这种情况。

其他指标

排序算法的稳定性

算法稳定性指的是在一组待排序记录中,如果存在任意两个相等的记录R和S,且在待排序记录中R在S前,如果在排序后R依然在S前,即它们的前后位置在排序前后不发生改变,则称为排序算法为稳定的。

算法复杂度与性能的解释与计算方法相关推荐

  1. 二分法算法复杂度简化_让我们简化算法的复杂性!

    二分法算法复杂度简化 by Shruti Tanwar 通过Shruti Tanwar 让我们简化算法的复杂性! (Let's simplify algorithm complexities!) It ...

  2. 数据结构-----算法复杂度(大O表示法)

    为什么要先聊这个算法复杂度呢? 首先,我们先聊聊算法."老衲"经常听别人说起算法,但还是不太明白算法是什么. 先拽一大段概念: 算法(Algorithm)是指解题方案的准确而完整的 ...

  3. .NET平台BigO算法复杂度备忘

    之前一篇文章提到BIG O算法复杂度的备忘录, 今天这个是.NET 平台下集合类相关的Big O 算法复杂度 今天先到这儿,希望对您有参考作用, 您可能感兴趣的文章: 数据结构与算法 Big O 备忘 ...

  4. 鸿蒙系统对手机性能的提升,鸿蒙OS手机版再爆新特性,流畅度和性能大幅提升,用户评价很高...

    原标题:鸿蒙OS手机版再爆新特性,流畅度和性能大幅提升,用户评价很高 不受限制地影响真好,但凡是都要有一个循序渐进的过程.华为自从公布鸿蒙OS手机版之后,用户都迫不及待地想体验.如今它真的来了,而且体 ...

  5. 计算之魂算法复杂度的相关概念

    大O概念 算法的规范化和量化度量 图灵提出了计算机的数学模型,冯·诺依曼确定了计算机通用的系统结构,高德纳则奠定了计算机算法的基础. 在计算机科学中,更多的时候是需要顶层设计的,而不是从经验出发归纳总 ...

  6. 数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据

    全文链接:http://tecdat.cn/?p=32092 我们一般把一件事情发生,对另一件事情也会产生影响的关系叫做关联.而关联分析就是在大量数据中发现项集之间有趣的关联和相关联系(形如" ...

  7. 算法复杂度(时间频度,时间复杂度介绍计算,空间复杂度)

    算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 事后统计的方法(直接运行看花了多长时间) 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序:二是所得 ...

  8. 网络流问题以及EK算法复杂度分析

    网络流问题以及EK算法复杂度分析 一.网络流算法 通过一个例子引入网络流问题. 现有一个自来水厂要往家里通水,自来水厂用Vs表示,家用Vt表示.从自来水厂到家之间连接了很多水管,并且中途经过很多转接点 ...

  9. 汉诺塔递归的空间复杂度_【干货】Java算法复杂度

    同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 算法复杂度分为时间复杂度和空间复杂度.其作用: 时间复杂度是度量算法执行的时间长短 ...

最新文章

  1. 什么样 信号_深圳停止商务公寓用地审批释放着什么样的信号,会引起房价下跌吗...
  2. 【1024程序员节】都有什么?现场亲历者告诉你...
  3. 惠普前总裁孙振耀指点职业规划
  4. [转]计算机学习道路
  5. use regular expression instead of ABAP function module to parse attachment
  6. ASP.NET Core Web Api之JWT(一)
  7. 错过血亏!深入学习Redis集群搭建方案及实现原理
  8. php++数据库备份,php实现数据库备份
  9. 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建
  10. 数据结构之--series,DataFrame.use python and pandas for data mining
  11. 70个python毕设项目_这10个Python项目很有趣!
  12. 抖音源码有什么奥秘?抖音为什么能推动短视频开发的热度
  13. zer0pts CTF 2022 VishwaCTF 2022
  14. win10运行安装软件程序提示“为了对电脑进行保护,已经阻止此应用” 有效解决方法记录
  15. 如何将Word转PDF?来看这几个方法
  16. R语言Circos图可视化
  17. 联想服务器linux系统raid驱动,ThinkSystem服务器RAID 530/930系列阵列卡驱动及安装RHEL7.3要点说明...
  18. 纪中暑假培训 :Date:7 终章-剑之魂
  19. 展望 2017年商业智能BI发展的趋势分析
  20. 淘宝订单接口|订单插旗备注,淘宝开放平台最稳定的店铺订单接口

热门文章

  1. 堡垒机(跳板机)是什么?
  2. 牛客刷题笔记--(数组专项练习1-77)
  3. python中换行的转义符_Python中的转义符\
  4. myTags 定制原位杂交探针,可用于染色体绘制,染色体索引,基因表达的时空模式,Scaffold序列组装和遗传图谱,多色荧光原位杂交(FISH)研究
  5. Mybatis使用C3P0连接池
  6. MySQL基础之查询数据
  7. VN仓库迁移(将一个仓库从一台机器上上转移到另一台机器上)
  8. JAVA程序设计: 俄罗斯套娃信封问题(LeetCode:354)
  9. 2021微软暑期实习机试,负进制转换,十进制转-2进制
  10. 小学生算术能力测试系统(改进)