算法简介

算法定义

曾获图灵奖的著名计算科学家D.knuth对算法做过一个为学术界广泛接受的描述性定义。

一个算法(Algorithm)是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。

算法的规则必须满足以下5个特性:

  • ① 有穷性:对于任意一组合法的输入值,算法在执行有穷步骤之后一定能结束。即算法的操作步骤为有限个,且每步都能在有限时间内完成。
  • ② 确定性:对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径。
  • ③ 可行性:算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之。
  • ④ 有输入:算法有零个或多个输入数据。输入数据是算法的加工对象,既可以由算法指定,也可以在算法执行过程中通过输入得到。
  • ⑤ 有输出:算法有一个或多个输出数据。输出数据是一组与输入有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。

有穷性可行性是算法最重要的两个特征。

算法的设计目标

算法设计应满足以下5个目标:

  • ① 正确性:算法应确切地满足应用问题的需求,这是算法设计的基本目标。
  • ② 健壮性:即使输入数据不合适,算法也能做出适当处理,不会导致不可控结果。
  • ③ 高时间效率:算法的执行时间越短,时间效率越高。
  • ④ 高空间效率:算法执行时占用的存储空间越少,空间效率越高。
  • ⑤ 可读性:算法表达思路清晰,简洁明了,易于理解。

如果一个操作有多个算法,显然应该选择执行时间短和存储空间占用少的算法。但是,执行时间短和存储空间占用少有时是矛盾的,往往不可兼得,此时,算法的时间效率通常是首要考虑因素。

算法的描述

算法是对问题求解过程的描述,它精确地指出怎样从给定的输入信息得到要求的输出信息,其中操作步骤的语义明确,操作序列的长度有限。
用自然语言或伪码描述算法能够抽象地描述算法设计思想,但是计算机无法执行。因此,数据结构和算法实现需要借助程序设计语言,将算法表达成基于一种程序设计语言的可执行程序。

算法与数据结构

算法建立在数据结构之上,对数据结构的操作需要用算法来描述
例如,线性表和树都有遍历、插入、删除、查找、排序等操作。通过研究算法,能够更深刻地理解数据结构的操作。
算法设计依赖于数据的逻辑结构,算法实现依赖于数据的存储结构。
例如,线性表的插入和删除操作,采用顺序存储结构,由于数据元素是相邻存储的,所以插入前和删除后都必须移动一些元素;采用链式存储结构,插入或删除一个元素,只需改变相关结点的链接关系,不需移动元素。线性表(a0,a1,…,an-1)两种存储结构的插入操作如图1.6所示,插入x作为第i个元素,其中length表示数组容量。

实现一种抽象数据类型,需要选择合适的存储结构,使得以下两方面的综合性能最佳:

  • 对数据的操作所花费的时间短;
  • 占用的存储空间少。

对线性表而言,当不需要频繁进行插入和删除操作时,可采用顺序存储结构;当插入和删除操作很频繁时,可采用链式存储结构。

后记

算法的简介略微枯燥甚至感觉难以理解,不过先只要有个印象,不需要死记硬背

你可能感兴趣的:(算法,算法和数据结构的关系,什么是算法,数据结构)