算法与程序设计以及数据结构紧密相关,是解决一个问题的完整的步骤描叙,是解决问题的策略,规则,方法,算法的描叙形式有多种,像传统的流程图,结构化流程图,以及计算机语言等。
算法概念
程序 = 数据结构 + 算法,是由N.Wirth(沃斯)提出来的,数据结构指的是数据与数据之间的逻辑关系,算法指的是解决特定问题的步骤和方法。
算法特征
有穷性
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
确切性
算法的每一步骤必须有确切的定义;
输入项
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定义了初始条件;
输出项
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
可行性
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
算法优劣判断标准
正确性
正确性是指所写的算法能满足具体问题的要求,即对任何合法的输入,算法都会得出正确的结果。
可读性
可读性是指算法被写好以后,该算法被理解的难易程度。一个算法可读性的好坏十分重要,如果一个算法比较抽象,难于理解,那么这个算法就不易交流和推广,对于修改、扩展、维护都十分不利。所以在写算法的时候,要尽量将该算法写得简明易懂。
健壮性
一个程序完成后,运行该程序的用户对程序的理解因人而异,并不能保证每一个人都能按照要求进行输入,健壮性就是指当输入的数据非法时,算法也会做出相应的判断,而不会因为输入的错误造成程序瘫痪。
时间复杂度与空间复杂度
时间复杂度,简单地说就是算法运行所需要的时间,一个程序在计算机中运行时间的长短与很多因素相关。而空间复杂度是指执行这个算法所需要的内存空间。时间和空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。