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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法设计与分析教案文档格式.docx

1、程序设计语言能由计算机执行抽象性差,对语言要求高算法需要验证将算法写成子函数#includeintCommonFactor(intm,intn)intr=m%n;while(r!=0)m=n;n=r;r=m%n;returnn;voidmain()coutCommonFactor(63,54)endl;伪代码算法语言伪代码(Pseudocode):介于自然语言和程序设计语言之间的方法,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。表达能力强,抽象性强,容易理解72=m%n;2.循环直到r等于0=n;=r;3.输出n;算法设计的一般过程1理解问题2预测所有可能的输入3.在精确

2、解和近似解间做选择4.确定适当的数据结构5算法设计技术6描述算法7跟踪算法8分析算法的效率9根据算法编写代码算法分析算法分析(AlgorithmAnalysis):对算法所需要的两种计算机资源时间和空间进行估算 时间复杂性(TimeComplexity) 空间复杂性(SpaceComplexity)算法分析的目的: 设计算法设计出复杂性尽可能低的算法 选择算法在多种算法中选择其中复杂性最低者时间复杂性分析的关键: 问题规模:输入量的多少; 基本语句:执行次数与整个算法的执行时间成正比的语句for(i=1;ii+)for(j=1;j0),则有T(n)=O(nm)且T(n)=(nm),因此,有T(

3、n)=(nm)。最好、最坏和平均情况在一维整型数组An中顺序查找与给定值k相等的元素(假设该数组中有且仅有一个元素值为k)intFind(intA,intn)for(i=0;n;if(Ai=k)break;returni;结论:如果问题规模相同,时间代价与输入数据有关,则需要分析最好情况、最坏情况、平均情况。 最好情况:出现概率较大时分析 最差情况:实时系统 平均情况:已知输入数据是如何分布的,通常假设等概率分布非递归算法的分析算法非递归算法、递归算法求数组最小值算法intArrayMin(inta,intn)min=a0;if(aiV(n-1,C),表明第n个物品被装入背包,前n-1个物品被

4、装入容量为C-wn的背包中;否则,第n个物品没有被装入背包,前n-1个物品被装入容量为C的背包中。依此类推,直到确定第1个物品是否被装入背包中为止。由此,得到如下函数: (式)设n个物品的重量存储在数组wn中,价值存储在数组vn中,背包容量为C,数组Vn+1C+1存放迭代结果,其中Vij表示前i个物品装入容量为j的背包中获得的最大价值,数组xn存储装入背包的物品,动态规划法求解0/1背包问题的算法如下:算法0/1背包问题intKnapSack(intn,intw,intv)i+)始化两个辅助数组lowcost和adjvex;=u0;输出顶点u0;复执行下列操作n-1次在lowcost中选取最短

5、边,取adjvex中对应的顶点序号k;输出顶点k和对应的权值;=U+k;调整数组lowcost和adjvex;设连通网中有n个顶点,则第一个进行初始化的循环语句需要执行n-1次,第二个循环共执行n-1次,内嵌两个循环,其一是在长度为n的数组中求最小值,需要执行n-1次,其二是调整辅助数组,需要执行n-1次,所以,Prim算法的时间复杂度为O(n2)。(2)最短边策略:设G=(V,E)是一个无向连通网,令T=(U,TE)是G的最小生成树。最短边策略从TE=开始,每一次贪心选择都是在边集E中选取最短边(u,v),如果边(u,v)加入集合TE中不产生回路,则将边(u,v)加入边集TE中,并将它在集合

6、E中删去。Kruskal算法就应用了这个贪心策略,它使生成树以一种随意的方式生长,先让森林中的树木随意生长,每生长一次就将两棵树合并,到最后合并成一棵树。算法Kruskal算法1.初始化:U=V;TE=;2.循环直到T中的连通分量个数为1在E中寻找最短边(u,v);如果顶点u、v位于T的两个不同连通分量,则将边(u,v)并入TE;将这两个连通分量合为一个;=E-(u,v);Kruskal算法为了提高每次贪心选择时查找最短边的效率,可以先将图G中的边按代价从小到大排序,则这个操作的时间复杂度为O(elog2e),其中e为无向连通网中边的个数。对于两个顶点是否属于同一个连通分量,可以用并查集的操作

7、将其时间性能提高到O(n),所以,Kruskal算法的时间性能是O(elog2e)。组合问题中的贪心法给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi,背包问题是如何选择装入背包的物品,使得装入背包中物品的总价值最大?设xi表示物品i装入背包的情况,根据问题的要求,有如下约束条件和目标函数:于是,背包问题归结为寻找一个满足约束条件式,并使目标函数式达到最大的解向量X=(x1,x2,xn)。至少有三种看似合理的贪心策略:(1)选择价值最大的物品,因为这可以尽可能快地增加背包的总价值。但是,虽然每一步选择获得了背包价值的极大增长,但背包容量却可能消耗得太快,使得装入背包的物品个数

8、减少,从而不能保证目标函数达到最大。(2)选择重量最轻的物品,因为这可以装入尽可能多的物品,从而增加背包的总价值。但是,虽然每一步选择使背包的容量消耗得慢了,但背包的价值却没能保证迅速增长,从而不能保证目标函数达到最大。(3)选择单位重量价值最大的物品,在背包价值增长和背包容量消耗两者之间寻找平衡。应用第三种贪心策略,每次从物品集合中选择单位重量价值最大的物品,如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量,然后我们就面临了一个最优子问题它同样是背包问题,只不过背包容量减少了,物品集合减少了。因此背包问题具有最优子结构性质。例如,有3个物品,其重量分别是20,30,10,

9、价值分别为60,120,50,背包的容量为50,应用三种贪心策略装入背包的物品和获得的价值如图所示。设背包容量为C,共有n个物品,物品重量存放在数组wn中,价值存放在数组vn中,问题的解存放在数组xn中。算法背包问题1改变数组w和v的排列顺序,使其按单位重量价值vi/wi降序排列;2将数组xn初始化为0;/初始化解向量3i=1;4循环直到(wiC)i=1;/将第i个物品放入背包=C-wi;+;i=C/wi;算法的时间主要消耗在将各种物品依其单位重量的价值从大到小排序。因此,其时间复杂性为O(nlog2n)。活动安排问题设有n个活动的集合E=1,2,n,其中每个活动都要求使用同一资源(如演讲会场

10、),而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si=fj)则算法的时间主要消耗在将各个活动按结束时间从小到大排序。因此,算法的时间复杂性为O(nlog2n)。intActiveManage(ints,intf,boola,intn)/各活动的起始时间和结束时间存储于数组s和f中且/按结束时间的非减序排列a1=1;j=1;count=1;for(i=2;if(si=fj)ai=1;j=i;count+;elseai=0;returncount;多机调度问题设有n个独立的作业1,2,n,由m台相同的机器M1,M2,Mm进行加工处理

11、,作业i所需的处理时间为ti(1in),每个作业均可在任何一台机器上加工处理,但不可间断、拆分。多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。贪心法求解多机调度问题的贪心策略是最长处理时间作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的处理时间。按照最长处理时间作业优先的贪心策略,当mn时,只要将机器i的0,ti)时间区间分配给作业i即可;当mn时,首先将n个作业依其所需的处理时间从大到小排序,然后依此顺序将作业分配给空闲的处理机。设7个独立作业1,2,3,4,5,6,7由3

12、台机器M1,M2,M3加工处理,各作业所需的处理时间分别为2,14,4,16,6,5,3。贪心法产生的作业调度如下:算法多机调度问题1将数组tn由大到小排序,对应的作业序号存储在数组pn中;2将数组dm初始化为0;3for(i=1;=m;i=pi;/将m个作业分配给m个机器i=ti;(i=m+1;=数组dm中最小值对应的下标;/j为最先空闲的机器序号j=Sj+pi;/将作业i分配给最先空闲的机器jj=dj+ti;/机器j将在dj后空闲在算法中,操作“数组dm中最小值对应的下标”如果采用蛮力法查找,则算法的时间性能为:通常情况下mn,则算法的时间复杂性为O(nm)。第8章回溯法问题的解空间复杂问

13、题常常有很多的可能解,这些可能解构成了问题的解空间。解空间也就是进行穷举的搜索空间,所以,解空间中应该包括所有的可能解。确定正确的解空间很重要,如果没有确定正确的解空间就开始搜索,可能会增加很多重复解,或者根本就搜索不到正确的解。例如:桌子上有6根火柴棒,要求以这6根火柴棒为边搭建4个等边三角形。对于任何一个问题,可能解的表示方式和它相应的解释隐含了解空间及其大小。例如,对于有n个物品的0/1背包问题,其可能解的表示方式可以有以下两种:(1)可能解由一个不等长向量组成,当物品i(1in)装入背包时,解向量中包含分量i,否则,解向量中不包含分量i,当n=3时,其解空间是:(),(1),(2),(3),(1,2),(1,3),(2,3),(1,2,3)(2)可能解由一个等长向量x1,x2,xn组成,其中xi=1

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

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