《数据结构与算法》之算法简介

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

一个算法应该具有以下五个重要的特征:

输入项 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件
输出项 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的
有穷性 算法的有穷性是指算法必须能在执行有限个步骤之后终止
确切性 算法每个步骤都应被精确定义,同样的输入只能有一种输出
可行性 算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)

算法的设计原则:

1、正确性:首先,算法应当满足以特定的“规则说明”方式给出的需求。其次,对算法是否“正确”的理解可以有以下四个层次:

     (1)程序语法错误。

     (2)程序对于几组输入数据能够得出满足需要的结果。

     (3)程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果。

     (4)程序对于一切合法的输入数据都能得到满足要求的结果。

       PS:通常以第 (3) 层意义的正确性作为衡量一个算法是否合格的标准。

2、可读性:算法为了人的阅读与交流,其次才是计算机执行。因此算法应该易于人的理解;另一方面,晦涩难懂的程序易于隐藏较多的错误而难以调试。

3、健壮性:当输入的数据非法时,算法应当恰当的做出反应或进行相应处理,而不是产生莫名其妙的输出结果。并且,处理出错的方法不应是中断程序执行,而是应当返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。

4、高效率与低存储量需求:通常算法效率值得是算法执行时间;存储量是指算法执行过程中所需要的最大存储空间,两者都与问题的规模有关。

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。

时间复杂度

算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做T(n)=Ο(f(n))。 因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。

空间复杂度 算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
正确性 算法的正确性是评价一个算法优劣的最重要的标准。
可读性 算法的可读性是指一个算法可供人们阅读的容易程度。
健壮性 健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性

算法的分类

算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。

算法可以宏泛的分为三类:

一,有限的,确定性算法。 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。

二,有限的,非确定算法。 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。

三,无限的算法。 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。

下面例举一些算法方法:

递推法、递归法、穷举法、贪心算法、分治法、动态规划法、迭代法、分支界限法、回溯法。

 

猜你喜欢

转载自blog.csdn.net/manbulaiyinhepan/article/details/83831428