数据结构——算法

目录

一、算法的定义

二、算法的特性

三、算法性能分析

四、算法的时间效率分析

五、算法的空间效率分析


一、算法的定义

什么是算法呢?算法是描述解决问题的方法。算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公元825年(相当于我们中国的唐朝时期)所写的《印度 数字算术》中。

如今普遍认可的对算法的定义是: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并旦每条指令表示一个或多个操作。

二、算法的特性

算法具有五个基本特性:输入、输出、有穷性、确定性和可行性。

  • 输入:算法具有零个或多个输入。所谓的零个输入是指算法本身有初始条件
  • 输出:算法有一个或多个输出。算法是一定需要输出的,不需要输出你用这个算法干吗?输出的形式可以是打印输出,也可以是返回一个或多个值等。
  • 有穷性:一个算法总是在执行有限个步骤之后终止。现实中经常会写出死循环的代码,这就是不满足有穷性。
  • 确定性:算法的每一步骤都具有确定的含义,不会出现二义性。
  • 可行性:算法的每一步都必须是可行的,并且每个计算步骤都能在有限时间内完成。

三、算法性能分析

  • 正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案。
  • 可读性:算法设计的另一目的是为了便于阅读、理解和交流。可读性高有助于人们理解算法,晦涩难懂的算法往往隐含错误,不易被发现并且难于调试和修改。 
  • 稳健性:一个好的算法还应该能对输入数据不台法的情况做适当的处理。当输入数据不合法时算法也能做出相关处理,而不是产生异常或莫名旦妙的结果。
  • 高效率和低存储量:衡量一个算法的高效率通常指的是时间效率,即算法执行的时间;算法的低存储量指算法在执行过程中所需要的最大存储空间。时间效率和空间效率是衡量算法优势的两个主要指标,二者的复杂度都与问题的规模有关。

四、算法的时间效率分析

算法的时间效率是指算法执行时间的长短。影响算法执行时间的因素:计算机的硬件系统、软件系统、问题规模(工作量)。

基本操作频度——作为算法执行时间的度量。一个算法中基本操作的频度,通常是问题规模  n 的某个函数,该函数记为 T(n)。实际上,要准确计算出算法中基本操作的频度是非常困难的,而且也不是很必要。对于某个算法,通常关心的是:当问题规模 n 增长时,算法的执行时间是如何增长的?也就是说只需估计出算法执行时间的增长率的数量级即可。因此,常用算法的渐近时间复杂度来作为衡量算法时间效率度量。

算法时间复杂度——如果算法的问题规模为 n ,基本操作的频度为 T(n) ,若有某个辅助函数 f(n),并存在正常数 c n0 使得当 nn0 时,T(n)≤c(f(n)),则记作:T(n) = O ( f (n ) ) 表示:随问题规模  的增大,算法执行时间的增长率和  f(n) 的增长率相同。称 O( f (n ) ) 为算法的 渐近时间复杂度,简称为时间复杂度。这种记法称为大O 记法。

※说明:大 O 记法表示算法的时间复杂度时,其要求精度很低,只是粗略估计出执行时间的增长率的数量级。所以,并不需要将所有基本操作的执行次数全部计算出,只需计算起决定性因素的基本操作的执行次数即可;且可用基本语句(或语句组)来代替基本操作,因为一个语句可以分解成有限的几个操作。

求解算法时间复杂度简单方法:(1)首先,找出算法中的基本语句。(2)然后,计算基本语句的频度 T(n) 3)最后用大Ο记法表示算法的时间性能。(4)如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体。(5)如果算法中包含并列的循环且每个循环的问题规模不同时,则将并列循环的时间复杂度相加;而若每个并列循环的问题规模相同时,则只取数量级最高的时间复杂度。

算法的时间复杂度是衡量算法好坏的一个重要指标,其数量级越低,则算法的时间效率就越高。

常见的时间复杂度

  • 常数阶 O(1),即算法的执行时间是一个常数,不依赖于问题规模 n;
  • 线性阶 O(n);
  • 多项式阶,如平方阶 O(n2)、立方阶 O(n3)、 O(n1/2) 等;
  • 对数阶,如 O( log2n )、O( log3n) 等;
  • 线性对数阶,如 O( n log2n ) 等;
  • 指数阶,如 O( 2n ) 等。

常用的时间复杂度所耗费的时间从小到大依次是:

五、算法的空间效率分析

算法的空间效率是指算法在计算机上运行时所需存储空间的大小。算法在运行时上所占用的存储空间有三个方面:(1)算法本身所占存储空间。(2)算法的输入与输出数据所占存储空间。(3)算法运行过程中为了解决问题所需要占用的辅助存储空间。  

算法的渐进空间复杂度——类似算法的渐进时间复杂度,通常用算法的渐进空间复杂度(简称空间复杂度)作为算法算法空间效率的度量。算法的空间复杂度用大 O 记法表示为:S(n ) = Of (n) )

表示:随着问题规模 n 的增大,算法运行时所需辅助存储空间的增长率的数量级为f(n)。若算法运行时所占的存储空间与问题规模无关(为常量),称这种算法为原地工作,空间复杂度用O(1)表示。

算法的时间复杂度和空间复杂度合称为算法的复杂度

         算法的时间复杂度和空间复杂度往往是相互影响的两个方面。要提高算法的时间效率,则往往就需要增加空间的额外开销;同样,若欲节省算法的空间时,则可能就需以耗费更多的计算时间为代价。因此,在设计算法时,应综合考虑算法的各项性能,并有所侧重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值