算法第四章作业
1.对贪心算法的理解
贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。贪心算法一般具有两个性质:贪心选择性质和最优子结构性质。
2.请选择一道作业题目说明算法满足贪心选择性质
分析:根据长度进行非降序排序,接着遍历,判断每一段是否小于length,小于则 j++,length -= a[j];
我的代码是:
#include<iostream> #include<algorithm> using namespace std; int main() { int n, length; cin >> n >> length; int a[100000]; for(int i = 0; i < n; i++) cin >> a[i]; sort(a, a + n); int j = 0; while(length > 0) { length -= a[j]; j++; if(length < 0) j--; } cout << j; return 0; }
3.在本章学习过程中遇到的问题及结对编程的情况:
这次结对编程我们依旧是先各自思考编程,再互相交流,艳艳先做出来了,而我还在调bug,然后发现我们俩的思路不太一样,她的是累加比较,我的是递减比较,最后调式完也都完全正确了,但从代码的可读性、简洁美观来看,还是艳艳的代码好一些。