算法第四章作业

1. 对贪心算法的理解

贪心算法(又称贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不是从整体最优上加以考虑,所做出的选择是在某种意义上的局部最优解。

不是所有问题都能通过贪心算法得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

贪心算法有两个基本要素:贪心选择和最优子结构。

贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到,这也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性质,必须证明每一步所作的贪心选择最终能得到问题的最优解。通常可以首先证明问题的一个整体最优解是从贪心选择开始的,而且做了贪心选择后,原问题简化为一个规模更小的类似的子问题。然后,用数学归纳法证明,通过每一步贪心选择,最终可得到问题的一个整体最优解。

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响,而动态规划则相反。贪心算法对每个子问题的解决方案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进行选择,有回退功能。动态规划主要运用于二维或三维问题,而贪心一般是一维问题。

使用贪心算法解题的一般步骤是:首先建立数学模型来描述问题,然后把求解的问题分成若干个子问题,再对每一子问题求解得到子问题的局部最优解,最后把子问题的局部最优解合成原问题的解。

2. 汽车加油问题的贪心选择性质

找出汽车油量为满时可以行使的最大路程范围内的最后一个加油站,然后继续运用该方法寻找,但是需要检查每一段路程是否超过汽车满油量时的最大路程。

3. 本章学习过程中的问题及结对编程情况

由于对贪心算法的理解还不够深刻,在运用贪心算法思想解题时还存在一定的问题,比如选择哪种数据结构、是否需要排序等,因此思维与熟练度都还有待提高。通过上机实践操作以及章内练习题目的编程,对贪心算法涉及到的常用解题方法有了较为具体的认识;通过与队友进行结队编程,在很大程度上弥补了自己的思维误区与缺陷,对算法题目有了更深层次的理解。虽然还有问题亟待解决,不过也有在一次次的失败与重来中使自己的编程能力得到了提升。

你可能感兴趣的:(算法第四章作业)