算法分析与设计论文.pdf

算 法 设 计 与 分 析 论 文 题 目 0-1 背包问题的算法设计策略对比与分析 专 业 班 级 学 号 姓 名 引言 对于计算机科学来说,算法(Algorithm)的概念是至关重要的。算 法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入, 在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于 某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不 同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空 间复杂度与来衡量。 算法可以理解为有基本运算及规定的运算顺序所构成的完整的 解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且 这样的步骤和序列可以解决一类问题。算法可以使用自然语言、伪代 码、流程图等多种不同的方法来描述。 一个算法应该具有以下五个重要的特征: 有穷性:一个算法必须保证执行有限步之后结束; 确切性:算法的每一步骤必须有确切的定义; 输入:一个算法有 0 个或多个输入,以刻画运算对象的初始情况, 所谓 0 个输入是指算法本身定除了初始条件; 输出:一个算法有一个或多个输出,以反映对输入数据加工后的 结果。没有输出的算法是毫无意义的; 可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限 次运算后即可完成。 家尼克劳斯-沃思曾著过一本著名的书《数据结构十算法= 程序》, 可见算法在计算机科学界与计算机 用界的地位。 1 算法复杂性分析的方法介绍 算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。 一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的 多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所 需的资源越低,则该算法的复杂性越低。 计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算 法的复杂性有时间复杂性和空间复杂性之分。 不言而喻,对于任意给定的问题,设计出复杂性尽可能地的算法 是我们在设计算法是追求的一个重要目标;另一方面,当给定的问题 已有多种算法时,选择其中复杂性最低者,是我们在选用算法适 遵 循的一个重要准则。因此,算法的复杂性分析对算法的设计或选用有 着重要的指导意义和实用价值。 关于算法的复杂性,有两个 问题要弄清楚:用怎样的一个量来表 达一个算法的复杂性;对于给定的一个算法,怎样具体计算它的复杂 性。 让我们从比较两对具体算法的效率开始。 1.1 比较两对算法的效率 考虑问题 1 :已知不重复且已经按从小到大排好的 m 个整数的数 组 A[1..m] (为简单起见。还设 m=2 k ,k 是一个确定的非负整数)。对 于给定的整数 c,要求寻找一个下标 i,使得 A[i]=c ;若找不到,则返回 一个 0。 问题 1 的一个简单的算法是:从头到尾扫描数组 A 。照此,或者扫 到 A 的第 i 个分量,经检测满足 A[i]=c ;或者扫到 A 的最后一个分量, 经检测仍不满足 A[i]=c 。我们用一个函数 Search 来表达这个算法: Function Search (c:integer):integer; Var J:integer; Begin J:=1; {初始化} {在还没有到达 A 的最后一个分量且等于 c 的分量还没有找到时, 查找下一个分量并且进行检测} While (A[i]c)and(jm) do j:=j+1; If A[j]=c then search:=j {在数组A 中找到等于c 的分量,且此分 量的下标为j} else Search:=0; {在数组中找不到等于 c 的分量} End; 容易看出,在最坏的情况下,这个算法要检测 A 的所有 m 个分量 才能判断在 A 中找不到等于 c 的分量。 解决 问题 1

文档评论(0)

1亿VIP精品文档

相关文档