数据结构——算法
Author:Roser Han
Location:NUAA
文章目录
概念
程 序 = 数 据 结 构 + 算 法 程序=数据结构+算法 程序=数据结构+算法
算法是用来解决实际问题的方法,而数据结构是将现实世界的问题抽象为计算机能够理解的形式。
算法的特性
有穷性
算法必须在有穷步骤之后结束,每一步必须在有穷时间内完成。
确定性
算法的每条指令必须有明确的含义,对于相同的输入只能得到相同的输出。。
且在任何条件下,算法都只有一条执行路径。
可行性
算法中的所有操作都必须足够基本,即都可以通过已经实现的基本操作运算有限次来实现。
输入
作为算法加工对象的量值,通常体现为算法中的而一组变量。
有些输入量需要在算法执行过程中输入,而有的算法表边上没有输入,但实际上已经嵌入到算法中。
输入
与一组输入有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系就是算法的功能。
算法设计的原则
正确性
算法满足以特定规格说明方式给出的需求,对算法正确的理解可以有四个层次:
- 程序中不含语法错误
- 程序对于几组输入数据能够得到满足要求的结果
- 程序对于精心选择的、典型的、苛刻的且带有刁难性的几组输入数据能够得到满足要求的结果
- 程序对于一切合法的输入数据都能够得到满足要求的结果
这四个层次的要求是不断加强的,通常选择第三个层次作为标准。
可读性
算法首先是为了人的阅读与交流,因此算法首先应该易于人的理解,另外难读的程序容易隐藏较多错误而难以调试。
健壮性
当输入的数据非法时,算法应当恰当地作出反应或进行相应处理,而不是输出错误的结果,或者终端程序的执行,而是应该返回一个表示错误或错误性质的值。
通常与正确性相呼应。
高效率与低存储量需求
通常指时间复杂度和空间复杂度。
算法效率的衡量方法和准则
通常有两种方法:
- 事后统计法
- 事前分析估算法
通常使用后者,前者必须执行程序,且其他因素可能掩盖算法本身。
与算法执行时间相关的因素
- 算法选用的策略
- 问题规模
- 编写程序的语言
- 编译程序产生的机器代码的质量
- 计算机执行指令的速度
衡量方法
时间复杂度
算 法 = 控 制 结 构 + 原 操 作 算法=控制结构+原操作 算法=控制结构+原操作
固有数据类型的操作看作原操作。
算
法
执
行
时
间
=
Σ
原
操
作
的
执
行
次
数
×
原
操
作
的
执
行
时
间
算法执行时间=\Sigma原操作的执行次数\times 原操作的执行时间
算法执行时间=Σ原操作的执行次数×原操作的执行时间
可以看出算法执行时间与原操作执行次数之和成正比,因此可以直接用原操作的执行次数来作为衡量标准。
通常在一个算法中选取一个执行次数最多的原操作作为基本操作,基本操作次数之和与算法执行时间成正比。
空间复杂度
算法的存储量包括:
- 输入数据所占空间
- 程序本身所占空间
- 辅助变量所占空间
如果输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占用的额外空间,即不考虑程序输入数据所占空间。
如果所需额外空间相对于输入数据量是常数(即问题规模是常数)。
若所需存储量依赖于特定输入,则按照最坏情况考虑。