ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:383.92KB ,
资源ID:19840609      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19840609.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法与设计报告分析Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法与设计报告分析Word格式.docx

1、可计算问题、有限的、可忍耐算法设计:自动化、自动程序设计、公式发现、公式挖掘、知识发现算法验证:设计表示(语言)确认分析测试程序1.2算法分析数学模型:1.串行算法,冯诺依曼机2.均匀存贮,存贮空间足够大3.基本运算时间确定基本概念:1.问题规模:与参数有关2.频率计数不分析算法具体执行时间,分析问题复杂性:问题规模增大时的规律根据复杂性,将算法分为两类: 1.多项式时间算法P:C,n,n,nn,n2(理论上可行,实际上也可行)2.指数时间算法NP:2n,n!,nn(理论上可行,实际上不可行)O(l)O(n) O(n) O(nn) O(n2) O(n3)O(2n) O(n!) O(nn)解决方

2、法:降低算法设计复杂度分析算法时间与问题规模:确定f(n)=O(g(n)上界和f(n)=(g(n)下界1.3小结老师首先带领我们回顾了本科阶段的算法基础相关知识,对于没有系统学习过算法知识的我来说,更是一种知识入门,使我对这门课程有一些初步的了解。然后在对算法进行分析时,不分析算法具体的执行时间,而是分析问题的复杂性(问题规模增大时的规律)。根据算法的特点可以将要求解的问题分为两类:离散型和连续型。离散型问题需要讨论问题的规模,如果是多项式时间复杂度则称为P问题;如果是指数时间复杂度则称为NP问题。对于连续型问题,需要讨论算法的收敛性。第二章 分治法2.1一般方法在求解问题时,为了将问题简化,

3、将实际问题转变为数学问题,将数学问题转变为代数问题,将代数问题转变为解方程问题,将解方程问题转变为解线性方程组问题。求解问题的技术:1.化难为易的校正技术:例如求f(x)=a-x2=0;2.化粗为精的松弛技术:直接法,间接法,例如求圆的面积(割圆法)3.化大为小的缩减技术:f(n)=n*f(n-1),f(1)=1问题性质不变分治法的思想:将整个问题分为若干个小问题分而治之,问题的性质不变。它的求解可用一个递归过程来表示。2.2二分检索已知一个按非降次序排列的元素表a1,a2,an,要求判定某给定元素x是否在该表中出现。问题规模O(n)2.3归并分类(排序)Procedure mergesort

4、(low,high) if lowhigh then mid |(low+high)/2 call mergesort(low,mid) call mergesort(mid+1,high) call mergesort(low,mid,high) end if问题规模O(nn)2.4快速分类 反复对产生的文件进行划分2.5斯特拉森矩阵乘法问题规模O(n3)2.6小结分治法是一种用空间换时间的技术,通过将大规模的问题划分为小规模问题进行求解来降低求解难度,采用分治技术,问题首先必须能够分解,而且分解后,问题的性质并没有发生变化。采用分治技术的目的只是并行算法设计,降低算法时间复杂度。在本章老师

5、主要讲解了分治法的基本递归求解,二分检索、归并分类、快速分类、斯特拉森矩阵乘法以及它们的时间复杂度的求解。第三章 贪心法3.1一般方法概念:有n个输入,问题的解是这n个输入的一个子集,子集满足一组条件(约束条件),子集可能有很多,满足条件的子集叫做可行解,根据问题,人们设计一个函数,通过函数极值的计算,找到一个最优的可行解,叫做最优解。离散优化问题连续函数优化问题的分类:1.函数优化问题:f(x):高维、非线性、不连续、没有明确的解析式;这类问题的求解方法有:解方程法、迭代法(最速下降法、共轭方向法、牛顿迭代法等)、随机优化(演化计算)等。2.模型参数优化:此类问题的求解方法一般是:根据所给问

6、题或者曲线,然后预测方程,对预测方程中的参数进行优化求解。3.模型发现问题:自动程序设计,一般是输入散点,要求给出拟合曲线。解决方法有基因表达式程序设计等。优化问题分类:1.有约束优化与无约束优化2.线性优化与非线性优化3.静态优化与动态优化(实时性)4.确定性优化与随机优化5.单目标优化与多目标优化(矛盾或不协调的)贪心算法是一种分级处理方法,它根据问题性质找到一种度量标准3.2背包问题部分背包问题的数学模型为:假设背包容量为m,有n件物品,每种物品i的重量为wi,其效益值为pi,问如何装包,在背包的容量范围内装出的值最多。xi0,1 0/1背包问题xi0,1 部分背包问题老师以书上的题目为

7、例,根据按效益值由大到小的装、按质量由小到大的装和按单位质量效益值由大到小的装(pi/wi)三种方法来寻找最优解。经过计算可知按单位质量效益值由大到小的装包获得的结果最好。3.3最小生成树问题设G=(V,E)是一个无向连通图,如果G的生成子图T=(V,E)是一棵树,则称T是G的一棵生成树。根据边成本由小到大排序,找到最优的生成树。3.4小结贪心算法适用于求解从给定的n个输入中找到一个满足约束条件的子集的问题。满足约束条件的子集称为可行解,满足目标函数的可行解称为最优解。用贪心算法求解问题的关键在于找出求解问题的量度标准。本章老师主要讲了贪心算法的适用领域,详细讲解了背包问题及最小生成树的算法及

8、其时间复杂度的求解。为了便于学生理解,老师联系自己曾经做过的毕业设计的凸多边形问题,讲述了是如何对问题进行分析和寻找解决方案的,而且讲解了为何贪心算法无法用于求解凸多边形问题,使同学们更好的领悟和体会贪心法的应用范围。第四章 动态规划4.1一般方法求解优化问题的方法:1.多阶段决策:可以把问题分成若干阶段2.最优性原理:无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列(找到一个递推关系式)。4.2多段图问题多段图G=(V,E),求源点s到汇点t的最短路径设cost(i,j)表示从源点到第i个阶段的j点的最短路径:设Bcost(i,j)表示从第i

9、个阶段的j点到汇点的最短路径:4.3每对结点之间的最短路径单源最短路径问题O(n2)任意两点间最短路径问题O(n3)设Ak代表i,j两个结点间考虑了1-k结点时最短路径,A0(i,j)就是成本矩阵A0(i,j)=C(i,j)An(i,j)=min An-1(i,j), An-1(i,n)+ An-1(n,j)Ak(i,j)=min Ak-1(i,j), Ak-1(i,k)+ Ak-1(k,j)4.4最优二分检索树设a1 a2 a3 an,n个符号a1 a2 a3 an P(1) P(2) P(3) P(n)E0 E1 E2 E3 En-1 EnQ(0) Q(1) Q(2) Q(3) Q(n-1

10、) Q(n)检索成本的计算方法:表示的是单倍成本/单倍的概率之和总成本:比较运算n次耗时C(i,j)代表构造的二分检索树最优成本 a1 a2 anE0 E1 E2 En-1 Enai+1 ai+2 ajEi Ei+1 Ei+2 Ej-1 Ej4.5矩阵连乘问题:,假设r0=10,r1=30,r2=70,r3=1,r4=200,求最小计算量。矩阵连乘问题满足以下公式:,根据分析,得到递推公式:D(i,j)表示最优的次数据此得到结果:210002400440012100810021400034.6 0/1背包问题设fj(x)表示将第1至j件物品装入容量为x的包所获得的最大效益值。fj-1(x)表示

11、前面已装满的情况下的效益值,fj(x-wj)+Pj表示将第j件物品装进去后的效益值,两者取最大者为最终结果。老师以书上题目为例,为大家讲解整个求解过程,题目为:n=3,(w1,w2,w3)=(2,3,4),(p1,p2,p3)=(1,2,5),M=6。部分背包问题同样的n件物品,xix|0x1,部分背包情况下获得的效益值为P1,0/1背包情况下获得的效益值为P2,部分背包情况下减去小数部分的效益值为P3,三者满足关系P1P2P3。4.7 TSP问题有n个城市,城市之间距离用C(i,j)表示,从编号为1 的城市经过其他的n-1个城市一次且一次,回到城市1,路径最短。图中任意两点间最短路径O(n3

12、)静态TSP:C(n,n)不变(O(n!)动态TSP:Ct(n,n)随时间变化,实时(动态)多目标TSP:C(n,n),Cij=a1,a2,速度快、成本低设g(i,S)代表从i点出发经过S中的(S是城市编号的集合)所有城市后回到1的最大路径,最终求:老师以书上题目为例,利用上面给出公式,计算得出结果。4.8子集和数问题:设有n个正整数a1,a2,an,求和为M的一个子集。4.9调度问题:1.相同处理机的调度设有t1,t2,tn有相同的设备两台,让你给出调度模式调度这n个任务2.流水线调度问题两个设备的流水线调度问题:P问题(排序问题)三个设备的流水线调度问题:NP问题S=t1,t2,tn,g(

13、S,0)可得递推公式:(ai,t都结束才可以调度bi)根据问题所要求的解的不同,可以将这些问题分为三类:1.求解整数规划类问题。要求自变量为整数,即最终结果是要求给出整数解集合的一个选择。例如:多段图问题和0/1背包问题。2.求解最优结构。要求最终结果是给出一棵最优二分树的结构。最优二分检索树和矩阵连乘问题。3.序列优化问题。要求最终结果是找出最优的一个排列。TSP问题和调度问题。4.10小结动态规划方法一般用来求解优化问题。使用该方法求解的问题主要有两个特点:多阶段决策,可以把问题分为若干个阶段;满足最优性原理,当前状态和决策只和它前一阶段的状态有关,和前一阶段的状态和决策如何得到无关。用动

14、态规划求解问题,关键在于找到求解问题的一个递推关系式。本章内容很多,同时又很重要,老师详细的为我们讲解了如何利用动态规划技术求解多段图问题、任意两点间最短路径问题、最优二分检索树、矩阵连乘问题、0/1背包问题、TSP问题和调度问题,并详细讲解了如何构造与使用递推关系式来解决这些问题。对于每一个问题,老师都通过讲解书上的实例来加深我们对算法理解和认识,也让我们更清楚如何利用算法解决相关问题。用动态规划技术解决矩阵连乘问题是老师课外拓展的内容。老师还向我们简单介绍了子集和数问题,它与0/1背包问题、TSP问题、3-Sat问题都属于NP问题,想要求解它们,就要找到合适的方法将它们化简为P问题。另外,

15、对于本章用动态规划解决的几类问题,老师也带我们进行了归类总结,更加深了我们对动态规划技术的印象。第五章 基本检索与周游方法5.1一般方法1.树的检索二叉树检索(先根、中根、后根)以下图为例:宽度优先:深度优先:5.2双连通分图和深度优先检索双连通、单连通、关节点识别关节点:根节点有几个儿子叶子节点肯定不是关节点中间节点:从它每个儿子出发往下走,能经过边到达它的祖先节点。计算每一个节点的深度优先数DFN(x),最低深度优先数L(x)。5.3对策树(博弈树)每个节点,状态评估函数E(x)max-min过程max(f)A;min(f)B截断:如果一个求最小值位置的值被判断为小于或等于它父亲的值,那么

16、可以停止生成这个求最小值位置的其余儿子的值。截断:如果一个求最大值位置的值被判断为大于或等于它父亲的值,那么可以停止生成这个求最大值位置的其余儿子的值。-截断:对于任一结点x,设B是该结点父亲的B值且D=-B,那么如果x的值判断为大于或等于D,则可以停止生成x的其他儿子。老师以书上题目为例,通过一种假想的博弈游戏,为我们讲解了-截断的使用方法。5.4小结基本检索与周游方法一般是针对树、图这样的数据结构。对数据结构的操作即为算法的设计与分析。老师首先带领大家回顾了树的搜索策略和图的周游策略。老师通过一个实例详细讲解了如何将一个已有的图变为一个双连通图;详细讲解了决策树问题,决策树要求非常有限的结

17、点和层数;对于有限次博弈游戏所有可能的实际战例或者有限步之内的战例可以用一颗决策树表示,每一个结点表示一种战例,而对于一些博弈游戏(例如:国际象棋)来说,构造的决策树相当大,因此我们只需要构造有限步骤的决策树,并且用一些剪枝策略减去对自己不利的部分,这里老师详细讲解了-剪枝算法。第六章 回溯法6.1一般方法在本章内容开始时,老师将问题的求解技术进行了总结:对于连续问题,有连续性、容易判断大小,可以利用搜索技术、领域变换规则进行求解;对于离散问题(子集和数),通过初始状态引导出最终状态,需要的方法更复杂。离散问题连续问题问题子集和数x2-2=0问题状态(0,0,0,0)(1)求解方法贪心算法(量

18、度标准)动态规划(递推关系式)通过构造解空间树直接法(数学分析)通过领域变换(迭代法)根据问题的性质和规范函数要求,找出限界函数、问题的上下界深度优先+限界函数=回溯法宽度优先+限界函数=分枝限界法1.问题描述:求一个n元组(x1,x2,xn),xiSi,|Si|= ni。2.问题状态:一个元组,要求的参数的集合有两种表示方法:元组长度固定:(0,0,0,0);元组长度不定:(a1),(a1,a4);3.解空间树(状态空间树):用树的结构表示4.解状态:与表示方法有关5.答案状态6.2 0/1背包问题老师以书上题目为例,P=(11,21,31,33,43,53,55,65),w=(1,11,2

19、1,23,33,43,45,55)。下图为回溯法求解0/1背包问题所生成的树:6.3小结回溯法一般用于求解n元组问题。求解方法有两种:部分解和完全解。所需要的求解结构为状态空间树结构,将回溯过程用树的形式表达。老师以0/1背包问题为例讲解了如何利用回溯法求解问题,并讲解了树结点的得出,以及剪枝(限界函数)的策略。在回溯状态空间树结构中加入限界函数,可以尽可能少的检索树结构结点,尽快找到解结点。第七章 分枝-限界法7.1一般方法(x1,x2,xn),xiSi状态及状态转移深度优先宽度优先计算:基于规则的一组符号变换过程7.2 LC分枝-限界求解老师以书上题目为例,通过0/1背包问题和TSP问题,

20、为我们讲解了LC分枝-限界方法:对于0/1背包问题,我们利用两个函数来为成本函数c(x)限界,前者为将包装满时的成本估计函数,后者为舍弃分数尾时的上界函数,使它们对于每个结点x,都满足以下式子:利用这两个函数,可以获得最优的结果。对于TSP问题,同样是利用两个函数限界,结合成本矩阵和归约矩阵获得最终的结果。搜索方法(状态转移方法)确定性方法:1.解析法:非线性方程组求解直接法:基于梯度、grad导数间接法:变成线性方程组、迭代2.规划:整数规划:0/1背包 动态规划:多段图3.枚举法(遍历)4.剪枝法基于状态树概念:-截断、限界函数随机性方法:盲目搜索:概率算法导向搜索:演化算法、禁忌搜索7.

21、3小结分枝-限界方法是利用广度优先的方法来构造状态空间树。老师首先以0/1背包问题为例讲解如何通过分枝-限界法构造一个状态空间树,计算每个结点的上界和下界,以及如何生成新结点。然后又以TSP问题为例讲解了如何利用分枝-限界法,结合构造状态空间树、成本矩阵和归约矩阵,找到解决TSP问题的一个最优组合排列。比较动态规划方法与分枝-限界法解决TSP问题的效果,虽然两种方法计算复杂度的最坏情况是一样的,但是对于许多具体实例而言,分枝-限界算法要比动态规划技术所用的时间少得多。第八章 程序设计因为本人曾在完成毕业设计时了解过有关TSP问题的求解方法,因此,当老师布置本课程的程序设计题目时,我选择了利用动

22、态规划技术求解TSP问题。根据动态规划算法需要求g(i,S)。以4个城市为例,需要求出g(i,S),i取值从1到3,S取值为,1,2,3,1,2,1,3,2,3,1,2,3,也就是集合1,2,3的所有子集合,而所有的子集合可以用二进制数表示。如果数在集合中,为二进制1,否则为0,数字大的在高位,如1,2,3表示成111,也就是7。3表示成100,也就是4。这样可以把集合映射成数组的下表,同时通过C语言的位操作来完成判断元素是否在集合中等操作,所以算法的过程就是计算二维表(n * 2(n-1)的过程。源代码如下:#include stdlib.hstring.hmath.h#define MAX

23、COST 99999int min(int first,int second) return first second? first:second;int main(int argc,char *argv) int nCity=0; printf(please enter the number of cities:n); scanf(%d,&nCity); int *cost = (int *)malloc( sizeof(int *) * nCity ) ; for(int i=0; i nCity; i+) costi=(int *)malloc( sizeof(int) * ( (int

24、)pow(2.0,nCity-1) ) ); memset(costi,0,sizeof(int) * ( (int)pow(2.0,nCity-1) ); int *distance = (int *)malloc( sizeof(int *) * nCity) ; distancei=(int *)malloc( sizeof(int) * nCity );please enter the distance between cities: for(int i = 0; for(int j = 0; j j+) scanf(distanceij); /初始化g(i,) for(int i =

25、 1; costi0 = distancei0; ( 1 (nCity - 1) - 1; for(int j = 1; if( ( ( 1 (j -1) ) = 0 )/判断i是否在S中,防止重复 /求出S中包含的元素和元素的个数 int counter = 0; int *set = (int *)malloc( sizeof(int) * nCity ); for(int k = 0 ; k k) & 1) = 1) setcounter = k+1; counter+; int mincost = MAXCOST; for(int k = 0; counter; /求出除去i,j后集合

26、中元素映射到数组的下标,根据g(i,S)=min( c(i,j) + g(j,S-J) int nCitytoSet = 0; for(int l = 0; l l+) if(setl != setk) nCitytoSet += (1(setl-1); mincost = min( mincost , (distance j setk + cost setk nCitytoSet) ); costji = mincost; /根据g(i,S)=min( c(i,j) + g(j,S-J),算出经过g(0,1,2,3,.N-1),也就是经过节点0返回节点0的最小代价 int mincost = MAXCOST; nCity ;i+) int nCitytoSet = 0; for(int l = 1; if(l != i) nCitytoSet += (1(l-1); mincost = min( mincost , (distance 0 i + costinCitytoSet) ); cost0( 1 (nCity -1) - 1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1