《算法设计与分析》课程中,作业所指教材,均为《算法概论》(Sanjoy Dasgupta等,清华大学出版社,2008年7月第1版)。
第7周,主要对教材 第6章 动态规划 进行了探讨。Dynamic Programming(简称DP),是一个通用的问题求解方法,主要用于运筹学方面的最优化问题,由于其对思维能力的高要求,很受各大公司笔试、面试欢迎。同学们在开始学习时,可以循序渐进,先理解教材中问题的精要并总结,然后去编程实现2-3个问题,最后去网上找3-10道笔试、面试题求解来开拓思路。
一:作业内容
大家至少完成以下作业中的一道题,以后从事IT业的同学,争取全部完成。
(1)
背包问题。对上文中提到的背包问题提供的表1(数据文件下载
Knapsack.txt,第一行为背包总重量15,物品数量5;第2-6行,分别为第1-5件物品的重量与价值),W=15,编程计算最终背包所装物品的编号、总重量与总价值。要求能够把构造的二维表格输出到文件KnapsackResult.txt中。
博文标题:第7周作业1——背包问题。
(2)
编辑距离。对数据文件edit.txt(下载请点击:
edit.txt),其中第一行是需要计算的单词对,第2-4行,分别为两个词汇,请就算将第一个单词变换成第二个单词所需要的最少操作数(即:编辑距离)。请输出每组词汇的编辑距离,并尝试输出其对其方式(类似于教材P177最下行所示,- 号代表一个空隙)。
博文标题:第7周作业2——编辑距离。
(3)
最长递增子序列。见博文
最长递增子序列详解(longest increasing subsequence)对此问题的解释,请先编程输出10个元素一组的随机整数数列,然后利用动态规划算法求其最长递增子序列的长度 及 具体的子序列,请多次测试与验证所编写的算法。
博文标题:
第7周作业3——最长递增子序列。
二:作业要求
1. 请各班学委飞信通知同学完成作业。
2. 作业计入平时成绩,计分依据为大家的完成程度——态度(做 / 未做)。老师会根据大家作业的质量选择若干学生进行评论,以及提供个性化教学的依据。请大家依据自身能力,尽可能提供高水平的作业,为提高自身能力全力以赴。
3. 本次作业,老师主要检查本班学号位于11-20号的同学 和 申请免签到的同学,以及抽查部分其他同学,请大家相互转告。
三:提前预习
预习 第7章 线性规划与归约(P205开始)。理解线性规划问题的提出、网络流问题、二部图匹配,重点为单纯形算法(P232-241)。
四:推荐阅读
成功不是偶然,对编程或其他方面的兴趣也是一个过程。只有当我们了解一些基础后,才可能产生并激发兴趣。这里通过一篇博文,看一下大家的学长 郝中奎 的