数据结构——算法

数据结构——算法

Author:Roser Han

Location:NUAA

概念

程 序 = 数 据 结 构 + 算 法 程序=数据结构+算法 =+

算法是用来解决实际问题的方法,而数据结构是将现实世界的问题抽象为计算机能够理解的形式。

算法的特性

有穷性

算法必须在有穷步骤之后结束,每一步必须在有穷时间内完成

确定性

算法的每条指令必须有明确的含义,对于相同的输入只能得到相同的输出。

且在任何条件下,算法都只有一条执行路径

可行性

算法中的所有操作都必须足够基本,即都可以通过已经实现的基本操作运算有限次来实现。

输入

作为算法加工对象的量值,通常体现为算法中的而一组变量。

有些输入量需要在算法执行过程中输入,而有的算法表边上没有输入,但实际上已经嵌入到算法中。

输入

与一组输入有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系就是算法的功能。

算法设计的原则

正确性

算法满足以特定规格说明方式给出的需求,对算法正确的理解可以有四个层次:

  • 程序中不含语法错误
  • 程序对于几组输入数据能够得到满足要求的结果
  • 程序对于精心选择的、典型的、苛刻的且带有刁难性的几组输入数据能够得到满足要求的结果
  • 程序对于一切合法的输入数据都能够得到满足要求的结果

这四个层次的要求是不断加强的,通常选择第三个层次作为标准。

可读性

算法首先是为了人的阅读与交流,因此算法首先应该易于人的理解,另外难读的程序容易隐藏较多错误而难以调试。

健壮性

当输入的数据非法时,算法应当恰当地作出反应或进行相应处理,而不是输出错误的结果,或者终端程序的执行,而是应该返回一个表示错误或错误性质的值

通常与正确性相呼应。

高效率与低存储量需求

通常指时间复杂度和空间复杂度。

算法效率的衡量方法和准则

通常有两种方法:

  • 事后统计法
  • 事前分析估算法

通常使用后者,前者必须执行程序,且其他因素可能掩盖算法本身。

与算法执行时间相关的因素

  • 算法选用的策略
  • 问题规模
  • 编写程序的语言
  • 编译程序产生的机器代码的质量
  • 计算机执行指令的速度

衡量方法

时间复杂度

算 法 = 控 制 结 构 + 原 操 作 算法=控制结构+原操作 =+

固有数据类型的操作看作原操作。
算 法 执 行 时 间 = Σ 原 操 作 的 执 行 次 数 × 原 操 作 的 执 行 时 间 算法执行时间=\Sigma原操作的执行次数\times 原操作的执行时间 =Σ×
可以看出算法执行时间与原操作执行次数之和成正比,因此可以直接用原操作的执行次数来作为衡量标准

通常在一个算法中选取一个执行次数最多的原操作作为基本操作,基本操作次数之和与算法执行时间成正比

空间复杂度

算法的存储量包括:

  • 输入数据所占空间
  • 程序本身所占空间
  • 辅助变量所占空间

如果输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占用的额外空间,即不考虑程序输入数据所占空间。

如果所需额外空间相对于输入数据量是常数(即问题规模是常数)。

若所需存储量依赖于特定输入,则按照最坏情况考虑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值