算法设计专业课程设计方案报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法设计和分析》 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)值很小,则算法优。作为初学者,我们能够用f(n)数量级O来粗略地判定算法 时间复杂性,如上例中时间复杂性可粗略地表示为T(n)=O(n2)。 2.空间复杂性: 例2:将一一维数组数据(n个)逆序存放到原数组中,下面是实现该问题两种算法: 算法1:for i:=1 to n do b[i]:=a[n-i+1]; for i:=1 to n do a[i]:=b[i]; 算法2:for i:=1 to n div 2 do begin t:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=t end; 算法1时间复杂度为2n,空间复杂度为2n 算法2时间复杂度为3*n/2,空间复杂度为n+1 显然算法2比算法1优,这两种算法空间复杂度可粗略地表示为S(n)=O(n) 3、从下面算法策略中自选一组,结合某具体问题求解来介绍算法思想,并加以总结、比较: 递归和分治、动态计划和贪心法、回溯法和分支限界法 动态计划算法类似于分治法,基础思想也是将待求解问题分解成若干个子问题。化整为零,降低了运算量。 贪心算法,是永不知足求最优解,有点类似于我们所说完美主义者。 二者之间有相同点,总结来说某种程度上,动规是贪心泛化,贪心是动规特例 贪心:A最优+B最优 动态计划:(A+B)最优 就单步而言 贪心A最优是前一步结果,B最优需要遍历找到 动态计划A为前一步可行解,需要选择一个B后再去找A 动态计划算法之0-1背包问题:给定n种物品和一个背包。物品i重量是Wi,其价值为Vi,背包容量为C。应怎样选择装入背包物品,使得装入背包中物品总价值最大? ?和0-1背包问题类似,所不一样是在选择物品i装入背包时,能够选择物品i一部分,而不一定要全部装入背包,1≤i≤n。 ?????这2类问题全部含有最优子结构性质,极为相同,但背包问题能够用贪心算法求解,而0-1背包问题却不能用贪心算法求解。用贪心算法解背包问题基础步骤是,首先计算每种物品单位重量价值Vi/Wi,然后,依贪心选择策略,将尽可能多单位重量价值最高物品装入背包。若将这种物品全部装入背包后,背包内物品总重量未超出C,则选择单位重量价值次高物品并尽可能多地装入背包。依此策略一直地进行下去,直到背包装满为止。 ???? 具体代码以下: //4d2?贪心算法?背包问题?? #include?stdafx.h?? #include?iostream??? using?namespace?std;??? ?? const?int?N?=?3;?? ?? void?Knapsack(int?n,float?M,float?v[],float?w[],float?x[]);?? ?? int?main()?? {?? ????float?M?=?50;//背包所能容纳重量?? ????//这里给定物品按单位价值减序排序?? ????float?w[]?=?{0,10,20,30};//下标从1开始?? ????float?v[]?=?{0,60,100,120};?? ?? ????float?x[N+1];?? ?? ????cout背包所能容纳重量为:Mendl;?? ????

文档评论(0)

159****1748 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档