算法第四章作业
1. 你对贪心算法的理解
贪心算法需要根据特征和要求选择一个策略以达到最优解。
使用这个算法求解需要有两个性质:贪心选择性质与最优子结构性质。
贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择来达到。贪心选择依赖于过去所做的选择,所以是自顶向下求解【与动态规划相反】。
最优子结构性质:一个问题的最优解包含其子问题的最优解。
2. 请选择一道作业题目说明你的算法满足贪心选择性质
删数问题
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。
输入格式:
第 1 行是1 个正整数 a。第 2 行是正整数k。
输出格式:
输出最小数。
输入样例:
在这里给出一组输入。例如:
178543
4
输出样例:
在这里给出相应的输出。例如:
13
贪心选择策略:从左到右,若找到一个数字比前一个小,则从这个数字开始整体往前移【删除这个数的前一个数】
证明满足贪心选择性质:假设这个结果不是最优的,用其他数字替换剩下的1和3,得到的数皆大于13,因此这个算法具有贪心选择性质
3. 请说明在本章学习过程中遇到的问题及结对编程的情况
在做贪心算法相关题目时,遇到比较简单的题目可以快速判断应该使用什么贪心策略,但如果遇到的是陌生的题目可能会因为贪心策略或具体时间卡很长时间,这方面得靠做题和看别人博客来补充知识。结对编程的时候效率比较高,但如果两个人一同掉进死胡同里讨论时间会过长,这时候可以考虑问问其他同学和看看已经做出来的博客学习思路,然后按思路自己写一遍代码运行和改错。