算法第四章作业
1.你对贪心算法的理解
贪心算法,就是在对问题求解时,做出在当前看来最好的选择,求的某种意义上的局部最优解。所选择的贪心策略一定要满足无后效性,只与当前状态有关。
(1)建立数学模型描述问题
(2)把求解的问题分成若干个子问题
(3)对每一个子问题求解,得到子问题的局部最优解
(4)把子问题的解局部最优解合成原来问题的一个解
2.选择一道作业题说明你的算法满足贪心选择性质
4-1 程序存储问题
题目描述:设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
思路:对n个程序从小到大进行排序;
sort(a,a+n);
再用循环将L减去m个程序,当减去的总和大于或者等于L时,结束,计数器停止。
int count=0; for(int j=0;j<n;j++) { if(a[j]<=L) { count++; L=L-a[j]; } }
这样就用从小到大排序的贪心算法求得磁带上最多可以存储的程序数。
3.结对编程情况
本次的结对编程和以往相同,本来在课堂上还不太明白的贪心算法,我在打代码的过程中通过例题和同伴的帮助,渐渐有了思路,在课堂上做pta练习题 4-2 删数问题 时,我们理解错了题目问题,导致程序一直无法通过,通过了后又卡在了老师给的样例上,明白“怎样选择”贪心策略是很重要的,这次的结对编程也让我受益颇深。