算法及其复杂度度量简介

1,算法:
1.1 所谓算法,是指基于特定的计算模型,旨在解决某一信息处理问题而设计的一个指令序列。
1.2 一般地,算法还应必须具备以下要素:
输入与输出;基本操作、确定性与可行性;有穷性与正确性;退化与鲁棒性;重用性
对退化与鲁棒性说明:
比如其中之一就是,除一般性情况外,实用的算法还应能够处理各种极端的输入实例。以排序问题为例,极端情况下待排序序列的长度可能不是正数(参数n = 0甚至n < 0),或者反过来长度达到或者超过系统支持的最大值(n = INT_MAX),或者A[]中的元素不见得互异甚至全体相等,以上种种都属于所谓的退化(degeneracy)情况。算法所谓的鲁棒性(robustness),就是要求能够尽可能充分地应对此类情况。
1.3 算法效率
可计算性;难解性;计算效率;数据结构
对数据结构说明:
无论是算法的初始输入、中间结果还是最终输出,在计算机中都可以数据的形式表示。对于数据的存储、组织、转移及变换等操作,不同计算模型和平台环境所支持的具体形式不尽相同,其执行效率将直接影响和决定算法的整体效率。数据结构这一学科正是以“数据”这一信息的表现形式为研究对象,旨在建立支持高效算法的数据信息处理策略、技巧与方法。要做到根据实际应用需求自如地设计、实现和选用适当的数据结构,必须首先对算法设计的技巧以及相应数据结构的特性了然于心。
2,复杂度度量
2.1 时间复杂度:
从保守估计的角度出发,在规模为n的所有输入中选择执行时间最长者作为T(n),并以T(n)度量该算法的时间复杂度。
2.2 渐进复杂度:
小规模问题所需的处理时间本来就相对更少,故此时不同算法的实际效率差异并不明显;而在处理更大规模的问题时,效率的些许差异都将对实际执行效果产生巨大的影响。这种着眼长远、更为注重时间复杂度的总体变化趋势和增长速度的策略与方法,即所谓的渐进分析(asymptotic analysis)。
大O记号:在大O记号的意义下,函数各项正的常系数可以忽略并等同于1。多项式中的低次项均可忽略,只需保留最高次项。可以看出,大O记号的这些性质的确体现了对函数总体渐进增长趋势的关注和刻画。
最坏、最好与平均情况:“最坏情况复杂度”是人们最为关注且使用最多的,在一些特殊的场合甚至成为唯一的指标。比如控制核电站运转、管理神经外科手术室现场的系统而言,从最好或平均角度评判算法的响应速度都不具有任何意义,在最坏情况下的响应速度才是唯一的指标。
在这里插入图片描述
以上主要的这三种渐进复杂度记号之间的联系与区别。
2.3 空间复杂度
除了执行时间的长短,算法所需存储空间的多少也是衡量其性能的一个重要方面,此即所谓的空间复杂度(space complexity)。实际上,以上针对时间复杂度所引入的几种渐进记号,也适用于对空间复杂度的度量,其原理及方法基本相同。

需要注意的是,为了更为客观地评价算法性能的优劣,除非特别申明,空间复杂度通常并不计入原始输入本身所占用的空间,对于同一问题,这一指标对任何算法都是相同的。反之,其它(如转储、中转、索引、映射、缓冲等)各个方面所消耗的空间,则都应计入。

另外,很多时候我们都是更多地甚至仅仅关注于算法的时间复杂度,而不必对空间复杂度做专门的考查。这种因为就渐进复杂度的意义而言,在任一算法的任何一次运行过程中所消耗的存储空间,都不会多于其间所执行基本操作的累计次数。

实际上根据定义,每次基本操作所涉及的存储空间,都不会超过常数规模;纵然每次基本操作所占用或访问的存储空间都是新开辟的,整个算法所需的空间总量,也不过与基本操作的次数同阶。从这个意义上说,时间复杂度本身就是空间复杂度的一个天然的上界。当然,对空间复杂度的分析也有其自身的意义,尤其在对空间效率非常在乎的应用场合中,或当问题的输入规模极为庞大时,由时间复杂度所确立的平凡上界已经难以令人满意。这类情况下,人们将更为精细地考查不同算法的空间效率,并尽力在此方面不断优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值