云计算百科
云计算领域专业知识百科平台

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

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

  • 前言
  • 一,算法效率
    • 1.1 如何衡量一个算法的好坏
    • 1.2 算法的复杂度
  • 二,时间复杂度
    • 2.1 时间复杂度的概念
    • 2.2 大O渐进表示法
  • 三,空间复杂度
    • 3.1 空间复杂度的概念
    • 3.2 大O渐进表示法
  • 四,常见时间复杂度和空间复杂度

在这里插入图片描述

前言

嗨,我是firdawn,本章将简单介绍,算法的时间复杂度和空间复杂度的概念,如何用大O渐进表示法估算,以及它们的计算,下面的图是本章的思维导图,那么,让我们开始吧! ​​​本章的思维导图

一,算法效率

1.1 如何衡量一个算法的好坏

现在有一个使用递归方式实现斐波那契数列的函数如下图1.1-1,函数的算法非常简洁,但是,简洁的算法就一定是好的算法吗?我们使用函数时会发现,当n只是大于等于50时,这个函数输出结果时,我们就需要等待很久的时间,所以,简洁的算法不一定的好的算法。那么我们应该如何衡量算法的好与坏呢? 图1.1-1

1.2 算法的复杂度

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般 是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。

时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。 不过,由于计算机行业的迅速发展,单位存储容量的设备价格已经十分廉价,所以一般来说,空间对于我们来说是相对富足的,我们如今已经不需要特别关注一个算法的空间复杂度,而是更在意一个算法的时间复杂度。

二,时间复杂度

2.1 时间复杂度的概念

算法的时间复杂度是一个函数,它定量描述了算法执行消耗的时间。不过,算法执行消耗的具体时间是无法计算出来的,因为这不仅与你的代码质量有关,而且与运行程序的系统以及设备种类等诸多因素有关。而一个算法所花费的时间与语句的执行次数成正比,所以,我们一般 用算法中的基本操作的执行次数,表示算法的时间复杂度

我们用一些例题来解释时间复杂度的概念。第一题: 下图1.2-1为使用循环计算斐波那契数列的函数,他的时间复杂度是多少呢? 图1.2-1 当n<=2时,图1.2-1的算法中,函数不进入循环,算法只执行一次,但当n很大时,算法会执行n-2次,那么该算法的时间复杂度是多少呢?其实呀,我们在计算算法的时间复杂度时,采用的是保守的估计,也就是使用该算法的最大执行次数作为该算法的时间复杂度。所以它的时间复杂度是:n-2

第二题: 计算Func4的时间复杂度,题目为图2.1-2。 图2.1-2 图2.1-2中,函数执行了100次,所以它的时间复杂度为:100

第三题: 计算Func5的时间复杂度,题目为图2.1-3。 图2.1-3 图2.1-3中,函数最快执行n次,最慢执行 (n*(n+1))/2 次,时间复杂度计算的是保守次数,所以该函数的时间复杂度为: (n*(n+1))/2

第四题: 计算Func6的时间复杂度,题目为图2.1-4。 图2.1-4 图2.1-4中,函数最好执行1次,最坏执行log2n

2.2 大O渐进表示法

大O符号(Big O notation):是用于描述函数渐进行为的数学符号 推导大O阶方法: 1、用常数1取代运行时间中的所有加法常数。 2、在修改后的运行次数函数中,只保留最高阶项。 3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

需要注意的是,有些算法的时间复杂度存在最好、平均和最坏情况: 最坏情况:任意输入规模的最大运行次数(上界) 平均情况:任意输入规模的期望运行次数 最好情况:任意输入规模的最小运行次数(下界) 例如:在一个长度为N数组中搜索一个数据x 最好情况:1次找到 最坏情况:N次找到 平均情况:N/2次找到 在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)

三,空间复杂度

3.1 空间复杂度的概念

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。

3.2 大O渐进表示法

空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。 注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因 此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。

让我们使用一些例子来解释时间复杂度。题目一: 图2.1-3中,函数的空间复杂度是多少呢?答:图2.1-3中使用了常数个额外空间,所以空间复杂度为O(1)

**题目二:**在图3.2-1中,函数的空间复杂度是多少呢? 图3.2-1 在图3.2-1中,函数动态开辟了n个空间,空间复杂度为O(N)

四,常见时间复杂度和空间复杂度

一般算法常见的复杂度如下: 一般算法常见的复杂度

赞(0)
未经允许不得转载:网硕互联帮助中心 » 算法的时间复杂度和空间复杂度
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!