数据结构学习(二)

一、算法是什么?

  算法是指令的集合,是为了解决特定问题而规定的一系列操作。
  它是明确定义了可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。
一个算法通常来说具有以下五个特征:
1.输入
2.输出
3.确定性
4.穷举性
5.可行性

简单来说看,算法就是计算机解题的过程。
在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。

评价算法优劣的依据:复杂度(时间复杂度/空间复杂度)
程序:执行时间/所占空间

二、算法的时间复杂度(Time Complexity)

2.1    时间频度:

一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机测试才知道。但是我们不可能对每个算法都上机测试(不同计算机的执行效率不同)
一个算法花费的时间与算法中的语句执行次数成正比。
也就是说, 语句执行次数越多,花费时间越多。
一个算法中的语句执行次数称为语法频度或者时间频度,表示为T(n) ,n表示问题的规模

2.2   时间复杂度:

有时候我们想知道时间的问题规模,而并非具体的执行次数,此时引入时间复杂度。
一般情况下,算法中基本操作重复执行的次数是问题规模的n的某个函数,用T(n)表示,若有某个辅助函数f(n) ,使得当n趋近于无穷大的时候,T(n)/f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
T(n)=O(f(n))
或者说:时间复杂度就是时间频度去掉低阶项和首项常数。
注意:时间频度与时间复杂度是不同的,时间频度不同但时间复杂度可能相同。

2.3   最坏时间复杂度和平均时间复杂度:

最坏情况下的时间复杂度称为最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。
这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。在最坏情况下的时间复杂度为T(n)=O(n),它表示对于任何输入实例,该算法的运行时间不可能大于O(n).

平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。鉴于平均复杂度。
第一,难计算
第二,有很多算法的平均情况和最差情况的复杂度是一样的。
所以一般讨论最坏的时间复杂度

2.4    时间复杂度计算:

根本没有必要计算时间时间频度,即使计算处理还要忽略常量、低次幂和最高次幂的系数,所以可以采用如下简单方法:
1.找出算法中的基本语句
  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
2.计算基本语句的执行次数的数量级
  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且注意力集中在最重要的一点上:增长率
3.用大0记号表示算法的时间性能
  将基本语句执行次数的数量级放入大O记号中。

在这里插入图片描述

三、算法空间复杂度

3.1、空间复杂度

算法的存储量包括:
1.程序本身所占的空间
2.输入数据所占的空间
3.辅助变量所占的空间
输入数据所占的空间取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间

空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度,一般也作为问题规模n的函数,以数量级形式给出,记作:
S(n)=O(g(n))

由于算法中临时变量的个数与问题规模n无关,所以空间复杂度均为S(n)=O(1)

注意:
1.空间复杂度相对于时间复杂度分析要少
2.对于递归算法来说,代码一般都比较简短,算法本身所占用的存储空间较少,但运行时将可能需要交多的临时工作单元

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值