算法的设计问答题整理.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、问答题(30分)。 1.什么是最坏情况时间复杂性?什么是平均情况时间复杂性? 2.什么是递归算法?什么是递归函数? 递归算法:直接或间接地调用自身的算法称为递归算法 递归函数:用函数自身给出定义的函数称为递归函数 递归函数的二要素是什么? 边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。 分治法的设计思想是什么? 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之 什么叫问题的最优子结构性质? 矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法求解的显著特征 动态规划基本步骤是什么? 1.找出最优解的性质,并刻划其结构特征 2.递归地定义最优值 3.??自底向上的方式计算出最优值。 4.根据计算最优值时得到的信息,构造最优解 7.动态规划算法的基本要素是什么?举例说明一些可以用动态规划算法解决的问题。 8.说明分治法与动态规划法的相同点和不同之处? 9.贪心算法的两个重要要素是什么?举例说明一些可以用贪心算法解决的问题。 贪心选择性质和最优子结构性质 最优装载问题可用贪心算法求解。采用重量最轻者先装的贪心选择策略,可产生最优装载问题的最优解。 public static float loading(float c, float [] w, int [] x) { int n=w.length; Element [] d = new Element [n]; for (int i = 0; i n; i++) d[i] = new Element(w[i],i); MergeSort.mergeSort(d); float opt=0; for (int i = 0; i n; i++) x[i] = 0; for (int i = 0; i n d[i].w = c; i++) { x[d[i].i] = 1; opt+=d[i].w; c -= d[i].w; } return opt; } 什么叫贪心选择性质? 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到 贪心算法与动态规划算法的的相同点和不同之处? 贪心算法和动态规划算法都要求问题具有最优子结构性质,这是2类算法的一个共同点。 背包问题与0-1背包问题有何区别? 0-1背包问题:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。 这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。 用贪心算法解背包问题的基本步骤: 首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包。依此策略一直地进行下去,直到背包装满为止。 具体算法可描述如下页: public static float knapsack(float c,float [] w, float [] v,float [] x) { int n=v.length; Element [] d = new Element [n]; for (int i = 0; i n; i++) d[i] = new Element(w[i],v[i],i); MergeSort.mergeSort(d); int i; float opt=0; for (i=0;in;i++) x[i]=0; for (i=0;in;i++) { if (d[i].wc) break; x[d[i].i]=1; opt+=d[i].v; c-=d[i].w; } if (in){ x[d[i].i]=c/d[i].w; opt+=x[d[i]

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档