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

本篇接着上一篇“算法与算法设计”讲,欢迎回来!!!本篇一起学习算法的时空复杂度!!!


《数据结构》算法与算法设计icon-default.png?t=M276http://t.csdn.cn/5o6qC

第一次看的小伙伴,建议先看看上一篇文章,点击上面链接即可进入!忘记内容了的小伙伴也建议回去看看!!!

本章学习目录:

目录

一、算法分析的内容

 二、分析方法

三、算法的执行时间

四、计算算法频度T(n)


一、算法分析的内容

我们写的一个算法,要知道它是否性能良好时,那么我们就需要对它进行分析。

问题来了,我们该分析它什么?

我告诉你了,我们关键要分析的是算法占用的资源!!! 

什么资源?:(主要是两个)

  • CPU时间:时间性能分析
  • 内存空间:空间性能分析

对应的就是我们的两个复杂度:时间、空间

 二、分析方法

我们分析算法目的是为了改进算法的性能。

空间复杂度很多时候都是O(1),在这里我们重点讨论的是时间的复杂度!!!

有两种分析方法:事后分析统计法和事前估算统计法

  1. 事后分析统计法

编写相应的程序,然后统计其执行的时间。

缺点:

这种方法虽然是可行的,但面对很多时候,也那么适合使用!

主要有以下原因:导致不能用绝对的执行时间来比较

  • 编写算法的语言(Java、c\c++等等)
  • 执行程序的环境(不同的计算机、不同的状态等等)
  • 其他因素

2、事前估算统计法

撇开上述因素,认为算法的执行时间与问题的规模n的函数。

三、算法的执行时间

首先我们要知道,

算法=控制结构+原操作

算法的性能好坏正是这两者的综合的效果!

控制结构:包括

  • 顺序结构
  • 分支结构
  • 循环结构

原操作定义:固有的数据类型的操作,如+、-、*、/等等。

在一个算法中,执行原操作的次数越少,其执行时间也就越少,否则越多。

算法频度:算法中原操作的执行次数

而执行时间可以由算法频度来计量!!!

四、计算算法频度T(n)

算法的执行时间=原操作所需时间*T(n)

执行时间T(n)是问题规模n的某个函数f(n),记作:

T(n)=O(f(n))

由上图可知,常见的时间复杂度有:

O(1):常数阶       O(n):线性阶      O(n2):平方阶    O(n3):立方阶    O(log2n):对数阶

.........

O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<.......

好啦本篇就学习到这,下一篇内容将学习如何简单快速的计算算法的时间复杂度,这将会抓住“原操作”来讲!!!期待你的关注!

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来玥方长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值