




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法设计与分析什么是算法?算法的特征有哪些?根据我自己的理解,算法是解决问题的方法步骤。比如在解决高数问题的时候,可以分步骤进行解答,在编程的过程算法可以得到最好的体现。算法是一系列解决问题的清晰指令,因为我最近在考研复习,对于会的题目还有进行多次的巩固,但是一步步的写很浪费时间,所以我只是写出关键指令,比如化简通分,洛必达法则,上下同阶。这样可以提高效率。算法的指令也是同样的。能够对一定规范的输入,在有限时间内获得所要求的输出。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。若给定某一算法,一般如何对其分析与评价?一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资
2、源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。计算机的资源,最重要的是时间和空间(存储器)资源。算法的复杂性有时间复杂性和空间复杂性之分。 1.时间复杂性:例1:设一程序段如下(为讨论方便,每行前加一行号)(1) for i:=1 to n do(2) for j:=1 to n do(3) x:=x+1 . 试问在程序运行中各步执行的次数各为多少? 解答:行号 次数(频度)(1) n+1(2) n*(n+1)(3) n*n 可见,这段程序总的执行次数是:f(n)=2n2+2n+1。在这里,n可以表示问题的规模,当n趋向无穷大时,如果 f(n)的值很小,则算法
3、优。作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2)。2.空间复杂性:例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:算法1:for i:=1 to n do bi:=an-i+1; for i:=1 to n do ai:=bi;算法2:for i:=1 to n div 2 do begin t:=ai;ai:=an-i-1;an-i-1:=t end;算法1的时间复杂度为2n,空间复杂度为2n算法2的时间复杂度为3*n/2,空间复杂度为n+1显然算法2比算法1优,这两种算法的空间复
4、杂度可粗略地表示为S(n)=O(n)3、从下面算法策略中自选一组,结合某具体问题的求解来介绍算法思想,并加以总结、比较: 递归与分治、动态规划与贪心法、回溯法与分支限界法动态规划算法类似于分治法,基本思想也是将待求解问题分解成若干个子问题。化整为零,减少了运算量。贪心算法,是永不知足的求最优解,有点类似于我们所说的完美主义者。两者之间有相同点,总结来说某种程度上,动规是贪心的泛化,贪心是动规的特例贪心:A最优+B最优动态规划:(A+B)最优就单步而言贪心的A最优是前一步的结果,B最优需要遍历找到动态规划的A为前一步的可行解,需要选择一个B后再去找A动态规划算法之0-1背包问题:给定n种物品和一
5、个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1in。这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。用贪心算法解背包问题的基本步骤是,首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包。依此策略一直地
6、进行下去,直到背包装满为止。 具体代码如下:1. /4d2贪心算法背包问题2. #includestdafx.h3. #include4. usingnamespacestd;5. 6. constintN=3;7. 8. voidKnapsack(intn,floatM,floatv,floatw,floatx);9. 10. intmain()11. 12. floatM=50;/背包所能容纳的重量13. /这里给定的物品按单位价值减序排序14. floatw=0,10,20,30;/下标从1开始15. floatv=0,60,100,120;16. 17. floatxN+1;18. 1
7、9. cout背包所能容纳的重量为:Mendl;20. cout待装物品的重量和价值分别为:endl;21. for(inti=1;i=N;i+)22. 23. couti:(wi,vi)endl;24. 25. 26. Knapsack(N,M,v,w,x);27. 28. cout选择装下的物品比例如下:endl;29. for(inti=1;i=N;i+)30. 31. couti:xiendl;32. 33. 34. return0;35. 36. 37. voidKnapsack(intn,floatM,floatv,floatw,floatx)38. 39. /Sort(n,v,w
8、);/这里假定w,v已按要求排好序40. inti;41. for(i=1;i=n;i+)42. 43. xi=0;/初始化数组x44. 45. 46. floatc=M;47. for(i=1;ic)50. 51. break;52. 53. xi=1;54. c-=wi;55. 56. 57. /物品i只有部分被装下58. if(i= Wi ), fi-1,j fi,j表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。Pi表示第i件物品的价值。决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?题目描述:有编号分别为a,b,c,d,e的五件物品,它们的
9、重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?nameweightvalue12345678910a26066991212151515b23033669991011c65000666661011d54000666661010e460006666666这张表是至底向上,从左到右生成的。为了叙述方便,用e2单元格表示e行2列的单元格,这个单元格的意义是用来表示只有物品e时,有个承重为2的背包,那么这个背包的最大价值是0,因为e物品的重量是4,背包装不了。对于d2单元格,表示只有物品e,d时,承重为2的背包,所
10、能装入的最大价值,仍然是0,因为物品e,d都不是这个背包能装的。同理,c2=0,b2=3,a2=6。对于承重为8的背包,a8=15,是怎么得出的呢?根据01背包的状态转换方程,需要考察两个值,一个是fi-1,j,对于这个例子来说就是b8的值9,另一个是fi-1,j-Wi+Pi;在这里,fi-1,j表示我有一个承重为8的背包,当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值fi-1,j-Wi表示我有一个承重为6的背包(等于当前背包承重减去物品a的重量),当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值fi-1,j-Wi就是指单元格b6,值为9,Pi指的是a物品的价值,即6
11、由于fi-1,j-Wi+Pi = 9 + 6 = 15 大于fi-1,j = 9,所以物品a应该放入承重为8的背包以下是actionscript3 的代码1. publicfunctionget01PackageAnswer(bagItems:Array,bagSize:int):Array2. 3. varbagMatrix:Array=;4. vari:int;5. varitem:PackageItem;6. for(i=0;ibagItems.length;i+)7. 8. bagMatrixi=0;9. 10. for(i=1;i=bagSize;i+)11. 12. for(var
12、j:int=0;ji)16. 17. /i背包转不下item18. if(j=0)19. 20. bagMatrixji=0;21. 22. else23. 24. bagMatrixji=bagMatrixj-1i;25. 26. 27. else28. 29. /将item装入背包后的价值总和30. varitemInBag:int;31. if(j=0)32. 33. bagMatrixji=item.value;34. continue;35. 36. else37. 38. itemInBag=bagMatrixj-1i-item.weight+item.value;39. 40.
13、bagMatrixji=(bagMatrixj-1iitemInBag?bagMatrixj-1i:itemInBag)41. 42. 43. 44. /findanswer45. varanswers:Array=;46. varcurSize:int=bagSize;47. for(i=bagItems.length-1;i=0;i-)48. 49. item=bagItemsiasPackageItem;50. if(curSize=0)51. 52. break;53. 54. if(i=0&curSize0)55. 56. answers.push();57. break;58. 59. if(bagMatrixicurSize-bagMatrixi-1curSize-item.weight=item.value)60. 61. answers.push();62. curSize-=item.weight;63. 64. 65. r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玛氏校招工作总结
- 2025年数学老师课堂教育方案
- 2025年学校暑期校本培训个人方案
- 2025年秋季幼儿园教研工作方案演讲稿
- 手术后病人的护理措施
- 2025年新生军训活动方案
- Excel在人力资源管理的应用1
- 避孕知识培训课件微盘
- 武汉大学《普通微生物学微生物学》2023-2024学年第二学期期末试卷
- 安徽蚌埠二中2024-2025学年高三下学期自测卷(三)线下考试物理试题含解析
- 古代汉语-形考任务1-3-国开-参考资料
- 盐源县县属国有企业招聘工作人员真题2024
- 工业废水处理技术作业指导书
- 2025年中国航天日知识竞赛考试题库300题(含答案)
- 体检中心质量控制指南
- 2024年四年级英语下册 Unit 6 What's Anne doing第2课时教学实录 湘少版
- T-CECC 029.1-2024 数据分类分级指南 第1部分:医疗健康
- 严守八项规定发言稿
- 2025年第六届中小学全国国家版图知识竞赛测试题库及答案
- 坊子实验小学《学情会商制度》
- 国际商务函电Unit-5-Quotations--offer-and-counter-offerPPT优秀课件
评论
0/150
提交评论