欢迎来到天天文库
浏览记录
ID:11117873
大小:80.00 KB
页数:16页
时间:2018-07-10
《本科毕业设计论文--算法分析与设计背包问题的算法设计策略对比与分析.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、算法设计与分析论文题目0-1背包问题的算法设计策略对比与分析专业班级学号姓名引言对于计算机科学来说,算法(Algorithm)的概念是至关重要的。算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的
2、确切的计算序列,并且这样的步骤和序列可以解决一类问题。算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。一个算法应该具有以下五个重要的特征:有穷性:一个算法必须保证执行有限步之后结束;确切性:算法的每一步骤必须有确切的定义;输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。计算机科学家尼克
3、劳斯-沃思曾著过一本著名的书《数据结构十算法=程序》,可见算法在计算机科学界与计算机应用界的地位。1算法复杂性分析的方法介绍算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。不言而喻,对于任意给定的问题,设计出复杂性尽可能地的算法是我们在设计算法是追
4、求的一个重要目标;另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则。因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值。关于算法的复杂性,有两个问题要弄清楚:用怎样的一个量来表达一个算法的复杂性;对于给定的一个算法,怎样具体计算它的复杂性。让我们从比较两对具体算法的效率开始。1.1比较两对算法的效率考虑问题1:已知不重复且已经按从小到大排好的m个整数的数组A[1..m](为简单起见。还设m=2k,k是一个确定的非负整数)。对于给定的整数c,
5、要求寻找一个下标i,使得A[i]=c;若找不到,则返回一个0。问题1的一个简单的算法是:从头到尾扫描数组A。照此,或者扫到A的第i个分量,经检测满足A[i]=c;或者扫到A的最后一个分量,经检测仍不满足A[i]=c。我们用一个函数Search来表达这个算法:FunctionSearch(c:integer):integer;VarJ:integer;BeginJ:=1;{初始化}{在还没有到达A的最后一个分量且等于c的分量还没有找到时,查找下一个分量并且进行检测}While(A[i]6、o j:=j+1;IfA[j]=cthensearch:=j{在数组A中找到等于c的分量,且此分量的下标为j}elseSearch:=0;{在数组中找不到等于c的分量}End;容易看出,在最坏的情况下,这个算法要检测A的所有m个分量才能判断在A中找不到等于c的分量。解决问题1的另一个算法利用到已知条件中A已排好序的性质。它首先拿A的中间分量A[m/2]与c比较,如果A[m/2]=c则解已找到。如果A[m/2]>c,则c只可能在A[1],A[2],..,A[m/2-1]之中,因而下一步只要在A[7、1],A[2],..,A[m/2-1]中继续查找;如果A[m/2]8、成两半,然后在其中一半继续查找的特征,我们称为二分查找算法。它可以用函数B_Search来表达:FunctionB_Search(c:integer):integer;VarL,U,I:integer;{U和L分别是要查找的数组的下标的上界和下界}Found:boolean;BeginL:=1;U:=m;{初始化数组下标的上下界}Found:=false;{当前要查找的范围是A[L]..A[U]。}{当等于c的分
6、o j:=j+1;IfA[j]=cthensearch:=j{在数组A中找到等于c的分量,且此分量的下标为j}elseSearch:=0;{在数组中找不到等于c的分量}End;容易看出,在最坏的情况下,这个算法要检测A的所有m个分量才能判断在A中找不到等于c的分量。解决问题1的另一个算法利用到已知条件中A已排好序的性质。它首先拿A的中间分量A[m/2]与c比较,如果A[m/2]=c则解已找到。如果A[m/2]>c,则c只可能在A[1],A[2],..,A[m/2-1]之中,因而下一步只要在A[
7、1],A[2],..,A[m/2-1]中继续查找;如果A[m/2]8、成两半,然后在其中一半继续查找的特征,我们称为二分查找算法。它可以用函数B_Search来表达:FunctionB_Search(c:integer):integer;VarL,U,I:integer;{U和L分别是要查找的数组的下标的上界和下界}Found:boolean;BeginL:=1;U:=m;{初始化数组下标的上下界}Found:=false;{当前要查找的范围是A[L]..A[U]。}{当等于c的分
8、成两半,然后在其中一半继续查找的特征,我们称为二分查找算法。它可以用函数B_Search来表达:FunctionB_Search(c:integer):integer;VarL,U,I:integer;{U和L分别是要查找的数组的下标的上界和下界}Found:boolean;BeginL:=1;U:=m;{初始化数组下标的上下界}Found:=false;{当前要查找的范围是A[L]..A[U]。}{当等于c的分
此文档下载收益归作者所有