算法与数据结构的关系十分的密切,在设计算法时先确定相应的数据结构,而在讨论某种数据结构时,也必然涉及相应的算法,下面就从和算法的特性、算法的描述、算法的性能分析三个方面来对算法进行介绍。
一、算法的特性
算法是对特定问题求解的一种描述,是指令的有限序列。其中,每一条指令表示一个或者多个操作。一个算法应该有下列特性。
①有穷性。一个算法必须在有穷步之后结束,即必须在有限时间内完成。
②确定性。算法的每一步必须有确切的定义,无二义性。对于相同的输入,算法执行时仅有唯一的一条路径。
③可行性。算法的每一步都是可以通过已经实现的基本运算的有限次执行得以实现。
④输入。一个算法具有一个或者多个输入,这些输入取自特殊的数据对象集合。
⑤输出。一个算法具有一个或多个输出,这些输出之间存在着某些特定的关系,
算法的含义与程序十分的相似,但又有区别。一个程序不一定满足有穷性。
例如操作系统,只有整个操作系统不遭到破坏,它将永远的不会停止,即使没有作业需要处理,它仍然处于动态等待中。因此,操作系统不是算法,另一方面,程序中的指令必须是机器可执行的,而算法的指令则无此限制。算法时对程序的解,而程序则是算法在计算机上特定的实现,若用程序设计语言来描述一个算法,则它是一个程序。
算法与数据结构相辅相成。解决某一特定类型问题的算法可以选择不同的数据结构,并且选择恰当与否直接影响算法的效率,反之,一种数据结构的优劣由各种算法执行来体现的。
要设计一个好的算法,通常要考虑以下的要求。
①正确。算法的执行结果应当满足预选规定的功能和性能要求
②可读。一个算法应当理清思路、层次分明、简单明了、易读易懂、
③健壮。当输入不合法数据时,应能进行适当处理,从而不引起严重的效果。
④高效。有效使用存储空间和具有较高的时间效率。
算法描述
算法可以使用不同的方法来描述。常见的方法有自然语言、传统流程图、N-S结构图、伪代码和程序设计语言等
1、用自然语言描述
自然语言就是人们日常生活中,可以用中文、英文等。用自然语言描述的算法通俗易懂,但是篇幅较长,表达上往往不够严谨,容易引起理解上的歧义,所以除非简单的问题,一般不适用这种方法。