algorithm-homework..doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
algorithm-homework.

Design and Analysis of Algorithms (12 Spring) Due: Apr. 24, 2012 Arrange the following functions in ascending asymptotic order of growth rate: ,,,,. Given currency denominations: 1,5,10,25,100, devise a method to pay amount x to customer using fewest number of coins. 解:方法1(使用贪心算法):表达式:mincoin(p,x,c)=mincoin(p,x-max,c)+1; max为p中小于x的最大值,如果p中的最小值都大于x,返回p[0]. n?硬币种类数, p ?{1,5,10,25,100}; //初始化(p中数值从小到大排序) C?空,k?0; //C用于保存需要的硬币,k需要的硬币数 while(x0){ max?find(p,x); //find(p,x)从p中找出小于x的最大面值,找不到返回p[0] x?x-max,k?k+1,C?max;} if(x==0) 输出C,k,否则输出impossible。 分析:贪心算法并不一定总能找到最优的解,在某些情况下甚至不能找到一个解(例如:由面值3,5,9面值的币组成10),当然在本例下总能找到解,但并不保证是最优的。 方法2(使用动态规划):表达式:mincoin(p[i],x,result,record)= min{mincoin(p[i-1],x-t*p[i], result,record)+t, mincoin(p[i-1],x, result,record)} //result[i][j]用于保存从面值为p[0]--p[i]的硬币中选取凑成钱数j+1的最少硬币 //数,record[i][j]保存需要面值为p[i]的硬币的数量。 n?硬币种类数, p ?{1,5,10,25,100}; //初始化(p中数值从小到大排序) result[n][x]?x+1,record[n][x]?0; //对数组中的每个元素初始化 for(i=0 to n) for(j=0 to x) //均左闭右开 if(存在从面值为p[0]--p[i]的硬币中选取凑成钱数j+1的最少硬币数m) result[i][j]?m, record[i][j]?temp; //temp为需要p[i]的数量 if(result[n-1][x-1]x) 则表示不能凑成x,退出,否则接着执行 输出result[n-1][x-1];// 输出最少钱币数 while(x0){ //输出面值 如果record[n-1][x-1]大于0,输出record[n-1][x-1]个p[n-1],否则转9; x=x- record[n-1][x-1]*p[n-1], n=n-1; n=n-1;} 分析:该方法可以找到最优解,但是时间复杂度和空间复杂度都要比方法一大。 An algorithm solves problems of size n by dividing it into three subproblems of size n/2, recursively solving each subproblems, and then combine the solutions in time. Can you analyze the running time of this algorithm? 解:假设用T(n)表示解决size为n的问题所用的时间,那么解决三个size为n/2的子问题所用的时间为3*T(n/2),由于分治之后组合结果所用的时间为n2,所有分治后所用的时间(假设为F(n)) F(n)= 3*T(n/2)+ n2=MAX{O(T(n/2)), O(n2)} Please using dynamic programming to solve the following knapsack problem. We are given 7 items and a knapsack. Each item i has weight of wi 0 kilograms and value of vi 0 dollars (given in table 1). The capacity of the knapsack is 14 kilograms. Then how to fill the knapsack to maximize the total value? Items Weight Value 1 3 2

文档评论(0)

dashewan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档