1. 你对贪心算法的理解(2分)
贪心算法总是做出在当前看来最好的选择。每一步当要做出选择时,它就会以唯一一个“贪心”作为标准,例如从具体的会场安排问题,他总是以会场的“最早开始时间”作为优先的选择条件;又如0-1背包问题,它总是以“单位价值”作为优先选择条件。
贪心算法的两个基本要素:1.贪心选择性质,所求的问题的整体最优解可以通过一系列局部最优解。因此,要注意使用贪心算法解决问题时,首先要证明该问题是否具有贪心选择性质。2.最优子结构性质,当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
与动态规划算法不同的是,动态规划要通过比较再来做决策(三思而后行),而贪心算法时一直局部取优来求解的(从一而终)。
2. 请说明汽车加油问题的贪心选择性质(2分)
题目:一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。解析:加油次数最少,意味着能不加油就不加油,只要在此站的油量能维持开到下一站就行了。因此有
for(int i=0;i<k+1;i++)
{
if(n<a[i])
{
cout<<"No Solution"<<endl;//满油油量小于该段行程所需油量,直接判断无法到达目的点。
return 0;
}
else{
if(t>=a[i])//此问题“贪心选择”就是油量大于下一个行程所需油量,就不加油。
{
t-=a[i];
break;
}
else
{
num++;
t=n-a[i];//t为当前汽车油量
}
}
}
3. 请说明在本章学习过程中遇到的问题及结对编程的情况(1分)
一开始编程时,没有注意理清题目的内容,题目说到加满油,之后其实代码里应该就是t=n-a[i],但是我之前忽视了这个判断,写的时t=t+n-a[i];导致无法得到正确结果,实际就是没有审好题和联系实际场景。另外结对编程,彼此合作还是一如既往的愉快,平时多听听对方的想法,共同讨论。
原文:https://www.cnblogs.com/Jergens/p/10054528.html