基本概念

  • 算法:是解决某一特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示有一个或者多个操作。对于一个特定问题进行求解,可以使用不同的算法,或许最终结果是一样的,但在此过程中消耗的时间,占用的空间都有可能不同。
  • 算法的特征:输入输出,有穷性,确定性,可行性。
  • 算法的要求:正确性,可读性,健壮性,时间效率高和存储量低。
  • 时间复杂度:它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,记作T(n)=O(f(n)。
  • 平均时间复杂度:对算法的分析,一种方法是计算所有情况的平均值,这种时间复杂度的计算方法称为平均时间复杂度。
  • 最坏时间复杂度:另一种方法是计算最坏情况下的时间复杂度,这种方法称为最坏时间复杂度。一般在没有特殊说明的情况下,都是指最坏时间复杂度。

  • 空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。


时间复杂度和空间复杂度是评价一个算法效率的关键。

时间复杂度

时间复杂度主要思想是在这个算法中所有语句总的执行次数,用T(n)表示问题规模是n的函数,那么T(n)随着n的变化而变化。算法的时间复杂度记作T(n) = O(f(n))。其中f(n)是与问题规模有关的某个函数。

用大O()来体现时间复杂度的记法,就叫做大O记法。

当然f(n)越小,时间复杂度越小,运行时间短,算法越优。

推导大O阶的步骤

1、用常数1取代所有加法常数。

2、在修改后的运行次数函数中保留最高阶项。

3、如果最高阶项存在并且不是1,就把最高项的系数变成1。

概念都是比较的抽象,举个栗子来理解一下大O是如何计算出来的。

例:求1,2,3,…,n的总和。

第一种方法:从1开始一个一个的加法操作(for循环)

        int sum = 0;                //这条语句执行1次for(int i = 1;i<=n;i++){  //这条语句执行n次sum = sum+i;            //这条语句执行n次}System.out.println(sum);    //这条语句执行1次

这样算出来f(n)  = 1+n+n+1 = 2n+2

根据上面大O阶的步骤,也就是只关心f(n)式子中最高项数,并且它的项数变成1就ok,

那么T(n) = O(n);

第二种方法:使用等差数列公式

int sum = (1+n)*n/2; //只需执行1次

只需一步电脑就可以算出结果,T(n) = O(1)。

这两种实现的结果相同,但是实现过程不同,导致算法的时间效率不同,我们学习算法追求的就是第二种方法。

在例如说根据自己的程序计算出f(n) = 3n^2+n+1,那么T(n) = O(n^2)。

在例如看图第一列就是f(n),对应的T(n)是第二列。

空间复杂度

是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

在算法中,分析的是所需要的辅助单元的空间。

时间长可以换取使用空间小,空间大可以换来时间短。这就是算法设计过程中需要考虑应用场景来进行时间空间上的抉择。

时间复杂度和空间复杂度分析相关推荐

  1. 时间复杂度与空间复杂度分析

    作为开发人员,我们都希望在完成功能的基础上让代码运行的更快.更省空间,那如何衡量编写的代码是否更有效率,这就需要我们学会如何分析代码时间复杂度和空间复杂度. 什么是复杂度分析 执行时间和占用空间是代码 ...

  2. 算法时间复杂度、空间复杂度分析

    算法时间复杂度 在计算机程序编写前,依据统计方法对算法进行估算,经过总结,我们发现一个高级语言编写的程序程序在计算机上运行所消耗的时间取决于下列因素: 1.算法采用的策略和方案; ⒉编译产生的代码质量 ...

  3. 递归算法时间复杂度和空间复杂度分析与举例

    文章目录 前言 1.递归算法性能分析公式 1.1 时间复杂度计算公式 1.2 空间复杂度计算公式 1.3 例子 1.3.1 暴力算法 1.3.2 递归算法 1.3.3 优化递归算法 总结 前言 根据代 ...

  4. 时间复杂度和空间复杂度分析技巧

    一.算法效率度量 如何度量一个算法的执行效率/时间呢?可以利用计算机的计时功能,来度量算法执行效率高低.这种方法也叫事后统计法. 事后统计法有很大的局限性: 测试结果依赖环境:不同的处理器.不同的操作 ...

  5. c语言——直接插入排序实现(时间复杂度与空间复杂度分析)

    c语言--直接插入排序 插入排序就是将一个记录插入到已排好序的序列中,从而得到一个新的有序序列. 哪里有一个排好序的序列 那问题是我们要排序的是一个数组,哪里来一个排好序的序列呢?这时,我们可以把数组 ...

  6. Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析

    算法描述分析: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有 ...

  7. 时间复杂度、空间复杂度的分析--王争数据结构与算法学习笔记

    我们使用时间复杂度和空间复杂度来衡量算法代码的执行效率,那么为什么要这么麻烦需要自己去衡量一遍呢?把代码跑一遍,通过统计.监控,就能得到算法执行的时间和占用的内存大小.为什么还要做时间.空间复杂度分析 ...

  8. 分析时间复杂度和空间复杂度(一级)

    什么叫时间复杂度,并且告诉大家我们一般求时间最坏复杂度,下边我们该怎么求时间复杂度呢,没有必要去求他真实的计算次数,所以我们最后把这个问题简化了,怎么来简化?1. 找出算法中的基本语句,基本语句是哪个 ...

  9. 时间复杂度空间复杂度分析

    时间复杂度:   一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级.这里用"O"来表示数量级,给出算法的 ...

最新文章

  1. 【组队学习】【33期】3. 李宏毅机器学习(含深度学习)
  2. Nature发表新研究,用“光”加速人工智能 | AI日报
  3. 一大波物联网僵尸正在袭来,都有啥安全保护方法?
  4. Android MIPI转LVDS显示屏调试---DSI Tuner安装(1).docx
  5. linux rmp命令安装包在哪里_【MongoDB系列】Linux系统安装MongoDB
  6. 总分 Score Inflation
  7. c语言里有js的预编译环节吗,C语言第十一讲,预处理命令.
  8. java合并多个表格为一个_多个DataTable的合并成一个新表
  9. 网络中广播和多播的认识
  10. jQuery 为动态添加的元素绑定事件
  11. node下使用jquery
  12. php curl 错误码,php,_PHP curl 错误 :curl__errno()返回错误码6,php - phpStudy
  13. matlab中esp=1.0e-3,ESP系列杂谈(一): eFuse 简介
  14. snmp trap日志
  15. 使用wepe U盘重装Windows系统
  16. 机器学习和统计学和数据发掘_面向数据科学和机器学习程序员的5项最佳数学和统计学课程...
  17. Mac好用的截图工具:Snipaste
  18. 《Delphi 4 开发大全》作者、Delphi研发团队开发工程师:史蒂夫·特谢拉(Steve Teixeira)访谈
  19. LeetCode 刷题: Fizz Buzz
  20. [转载] 七龙珠第一部——第111话 龟仙人最后的魔封波

热门文章

  1. Swiper和SuperSlide
  2. 二开云豹直播带货6月新版本
  3. 正大膳食源以科技创新服务美好生活
  4. 山起于蛮荒而雄于乌郡,水生于远夷而洪于中州;日出于扶桑而盛于天朝,星布于苍穹而聚于中华。
  5. Android之okhttp_v3.4版本网络连接超时问题解决方案
  6. CentOS7.6安装ORACLE 12C RAC + DATAGUARD
  7. 解惑!PMI-ACP考试难度大吗?
  8. matlab定义函数
  9. SDUT-程序设计基础-实验2-选择结构
  10. PID调试软件(C#、模拟、仿真)