西电软件学院算法实验报告.doc

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

第二次试验 问题: Matrix-chain product 分析: 本题是矩阵链乘问题,需要求出最优括号化方案。即在矩阵的乘法链上添加括号来改变运算顺序以使矩阵链乘法的代价降低。 可以分析该链乘的一个子段总结一些结论。假设m[i,j]表示Ai*…*Aj的链成需要进行的乘法次数(假设j-i足够大),我们可以将Ai*…*Aj分为两段进行计算:(Ai*…*Ak)*(Ak+1*…*Aj)可以得出m[i,j]的递推公式 可以得出,当i=j的时候,m[i,j]=0。当ij的时候。k的取值范围是i到j-1,对于k的每一个取值都可以得到一个m[i,j]的值,取出最小值即时m[i,j]的最优化方案,n]的值a) 3, 5, 2, 1,10为例可以得出如下矩阵i,j]的递推公式X: xzyzzyx Y: zxyyzxz 可以用一个矩阵表示计算的过程: 遇到的问题: 在算法中,‘=’是属于‘’还是‘’会给结果带来不同。在输出子序列的时候,最长公共子序列可能不止一个,但是最终未能解决还是只能输出一个。 总结: 最长公共子序列问题可以利用动态规划很好的解决。动态规划的思想就是根据规律获得推导公式,然后解决问题。 问题: Longest Common Substring 分析: 最长公共子序列问题就是和最长公共子串问题差不多,就是当当Ai != Bj的时候,对应的c[i,j]置为0。推导公式如下: 最终c数组的最大值max对应的就是最长公共子串,只需要将从本位置向前述max-1个的子串即是所求子串。 总结: 本题就是第二题的一种特殊的情况,即c数组中的值不能从左和上两个方向获取,其他基本相同。在代码上,只需要修改小部分代码就可以实现该问题。 问题: Max Sum 分析: 求和最大的子串。这个问题和第三题很像,不过这次不用二维数组而是使用两个标记来标志所求子串的起始位置(maxb)结束位置(maxe)。思路是,对于第i个元素,如果当前元素与目前选中的序列的sum小于0,那么这么序列不会被选择,更新sumb与sume的值;如果sum仍然大于0,则sum可以选中。比较sum与max的值,如果summax,则更新maxb与maxe的值。递推公式如下: 遇到的问题: 在全是负数时出现问题,后来讲max的初始值设置为第一个元素的值后就能正常了。 总结: 动态规划能解决很多问题,找到递推公式非常重要。 问题 第三次实验问题Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem both as fractional knapsack and 0/1 knapsack. 分析: 本题是背包问题的两个解法。对于部分背包来说比较简单,就是将单位价值大的物品优先放置到背包中,这样就能在背包中获取最大的价值。但是对于0/1背包问题来说,就相对复杂了。可以通过贪心算法解决。经过分析,我们转化这个问题为将n件物品放置到容量为w的容器中。这里,每件物品只可能有一个状态:放入/不放入,我们用0/1来对应。用v[i,w]来表示前i件物品选出重量不超过w的物品,并且构成的最大的价值。那么,可以分析得出v[i,w]的递推式。如果i=0或者w=0,显然v[I,w] = 0;如果第i件物品的重量wiw则i不可能放入容器中;如果i能够放入容器(即wiw)则在vi+v[i-1,w-wi] v[i-1,w]时才可能会放入。关系式如下 这样,我们可以认为,每一次都恰到好处的选择了放或者不放一个物品。直到最后一个物品,我们得到的一定就是最好的结果 总结: 背包问题是一个典型的贪心算法的例子。在解决问题的时候可以将当前步骤做到最好,然后通过推导,有可能得到一个关系式,这样就能使问题得到解决。在本题中,我们可以通过第i件物品是否应该放在容量的w的背包中进行分析,最终得到了一个递推式。 问题 a nonpreemptive scheduling: once a job is started, it must run to completion. The following is an instance。 分析: 这是一个线程调度问题,通过操作系统课程的学习,我们了解到应当采用短作业优先的调度方式。可以采用快速排序对进程顺序进行排序即可得到调度时间。 总结: 在进程调度问题中,如果想获取最短的平均周转时间(单线程)应当使用短作业优先的算法。 问题: 单源点最短路径 分析: 本题中,因为路径中存在负边,所以应当使用bellman-ford算法。为了方便的使用该算法,需要首先创建合适的边的

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档