一、贪心算法的理解
-
什么是贪心算法?
贪心算法从步步最优,到达全局最优。
-
什么时候能够使用贪心算法?
一般来说,凡是经过数学归纳法证明可以采用贪心法的情况都应该采用它,因为它具有高效性。
通常还有另外一个方法来判断,如果一个问题具有这两大性质,那么使用贪心法来对其求解总能求
得最优解。
(1)最优子结构性质
当一个问题的最优解一定包含其子问题的最优解时,称此问题具有最优子结构性质。如何理解?换句话说:最优解一定是子问题的最优解组合而成的。没有这条性质,求出的最优解一定不是最优解,所以这才是重中之重。这也是动态规划问题的基石。
(2)贪心选择性质
贪心选择性质时指所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得问题最终的选择方案是全局最优的。
二、汽车加油问题
算法描述:
每次都把当前油量与下一目的地路程比较,若够油则continue,若不够则加满油再比较一次,若够则行驶,若不够则break,达不到下一目的地。
算法时间及空间复杂度分析:
时间复杂度:一个循环,每次都是比较,所以时间复杂度为O(n);
空间复杂度:只定义了一个bool变量,此外没有另外开辟空间,所以空间复杂度为O(1);
三、心得体会
总体来说,贪心算法相比于前两章的算法来说,是属于简单一点的知识。只需要把脑海中的演练一遍, 你认为对就基本上是对的。不过,需要善于思考,并且要有不同的切入点,不然很容易钻牛角尖。当你的算法得出错误的结果的时候,就应改思考这个算法是不是错误的,可以尝试举反例。
四、结伴编程
有大佬带队,自己都不用debug了。不过在结伴过程中我也学到了很多我没有学到的东西,总的来说是很好的。
参考:https://blog.51cto.com/1464490021/1844877