算法与数据结构的关系非常紧密,在算法设计时总要先确定相应的数据结构,而在讨论某一种数据结构时也必然会涉及到相应的算法。
算法是解决特定问题求解步骤的描述
在计算机中表现为指令的有限序列
并且每条指令表示一个或多个操作
简而言之,算法是描述解决问题的方法
1.1算法特性
算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个运算。一个算法应该具有下列特性:
- (1)有穷性:一个算法必须在有穷步之后结束,即必须在有限时间内完成。
- (2)确定性:算法的每一步必须有确切的定义,无二义性,且在任何条件下算法只有唯一条执行路径,即对于相同的输入只能得出相同的输出。
- (3)可行性:算法的每一步都可以通过已经实现的基本运算的有限次执行得以实现。
- (4)输入
- (5)输出
算法的含义与程序十分相似,但又有区别。一个程序不一定满足有穷性。例如,对于运算系统,只要整个系统不遭破坏,它将永远不会停止,即使没有作业需要处理,它仍处于动态等待中因此,运算系统不是一个算法。另外,程序中的指令必须是机器可执行的,而算法中的指令则无此限制。算法代表了对问题的求解方法,而程序则是算法在计算机上的特定实现。一个算法若用程序设计语言来描述,就是一个程序。
算法与数据结构是相辅相成的。解决某一类特定 问题的算法可以选择不同的数据结构,选择恰当与否直接影响算法的效率。反之,一种 数据结构的优劣由各种算法的执行效果来体现在
——算法设计时通常需要考虑以下几个方面的要求。
(1)正确性:算法的执行结果应当满足预先规定的功能和性能要求。正确性要求表明算须满足实际需求,达到解决实际问题的目标。
(2) 可读性:一个算法应当思路清晰、层次分明、简单明了、易读易懂。一个可读性强去,其程序的可维护性、可扩展性都要好得多,因此,许多时候人们往往在一定程度上牺牲来提高可读性。
(3)健壮性:当输入不合法数据时,应能适当处理,不至于引起严重后果。健壮性要求算法要全面细致地考虑所有可能的边界情况,并对这些边界条件做出完备的处理,尽可能使没有意外的情况。
(4)高效性:有效使用存储空间和有较好的时间效率。高效性主要是指时间效率,即解同规模的问题时间尽可能短。
—— 一般来说,数据结构上的基本运算主要有以下几种。
(1)查找:寻找满足特定条件的数据元素所在的位置。
(2)读取:读出指定位置上数据元素的内容。
(3)插入:在指定位置添加新的数据元素。
(4)删除:删除指定位置上对应的数据元素。
(5)更新:修改某个数据元素的值。