数据结构与算法

首先我们来了解一下程序的定义

程序的定义: 程序=数据结构+算法

程序是为解决实际问题而存在的,而解决问题,当然要使用到数据结构以及数据结构的算法。

比如:腾讯QQ,腾讯QQ上经常会有显示可能认识的好友,这种就是使用到了图这中数据结构(最短路径),但是光有数据结构还不行,要实现这种功能还需要在图结构的基础萨汗设计出一种算法。算法就是特定问题求解步骤的描述。

数据结构的定义:

一般情况下,用计算机解决一个具体问题是,首先要从具体问题抽象出一个适当的数学模型(数据结构),然后设计一个解决此数学模型的算法。

数据结构:首先要研究对象的数据元素之间的关系,平时所说的数据结构是一种逻辑结构,而在程序运行时必须把这些逻辑结构转为物理结构。

常见逻辑结构数据:集合结构(两个函数中分别定义的局部变量,两这没有关系,就好比数学里的相离),线性结构,树形结构,图形结构。

物理结构:顺序存储,链式存储。

数据元素:组成数据的基本单位。

数据项:一个数据元素由若干数据项组成。

数据对象:性质相同的数据元素的集合。

 

算法的定义:

算法是1特定问题求解1步骤的描述。

算法是独立存在的一种解决问题的方法和思想。

成为一个算法需要满足的条件:

算法必须满足的条件:

  1. 输入:算法具有0个或者多个输入;
  2. 至少有1个或者多个输出;
  3. 有穷行:算法在执行有限的步骤之后会自动结束而不会进行死循环状态;
  4. 确定性:算法中的每一步都有意义,不会出现二义性;
  5. 可行性:算法中的每一步都必须可行;

 

判断一个算法的好坏:

  1. 正确性:对于合法输入能够得到满足的结果,算法能够处理非法处理,并得到合理结果;

算法对于边界数据和压力数据都能够得到满足的结果;

  1. 可读性:算法要方便阅读,理解和交流;
  2. 健壮性:算法不应该产生莫名其妙的结果,一会正确,一会又是其它结果;
  3. 高性价比:利用最少时间和资源得到满足要求的结果,可以通过时间复杂度和空间复杂度来判定;

 

时间复杂度与空间复杂度:

一般判定一种算法的效率可以采用事后统计法和事前分析法估算;

事后统计法缺点:

必须编写相应的测试程序,严重依赖硬件和运行时的环境,算法的数据采集相当的困难。

事前分析估算:

主要取决于问题的规模。

1、时间复杂度

公式: T(n) = O( f(n) );    其中f(n)是问题规模n的函数,也就是执行某个操作的次数。

在没有特殊说明的情况下,我们所分析的时间复杂度都是指最坏的时间复杂度

常见时间复杂度:

执行次数函数

非正式术语

12

O(1)

常数阶

2n+2

O(n)

线性阶

2n2+2n+3

O(n2)

平方阶

2log2n+2

O(logn)

对数阶

2n+2nlog2n+2

O(nlogn)

nlogn阶

2n3+2n

O(n3)

立方阶

2n

O(2n)

指数阶

此外还有O(n!)等

各个时间复杂度的关系:

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

2、空间复杂度

公式: S(n) = O( f(n) )   其中f(n)是在问题规模为n时所占用的内存空间大小;

    大O表示法同样也适合空间复杂度,这里就不在重复说明了。

  3.时间复杂度与空间复杂度的策略

    多算情况下,算法的执行时所用的时间更令人关注;

    如果有必要,可以增加空间复杂度来降低时间复杂度;

    同理,也可以添加时间复杂度来降低空间复杂度,例如像51单片机,嵌入式设备,内存资源是很珍贵的,就可以通过增加时间复杂度来降低空间复杂度;

    因此,我们在实现算法的时候,需要分析具体问题对执行时间和空间的要求;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值