算法第四章作业
我对贪心算法的理解很简单:它就是每一步都选当下看起来最好的那个选项,不纠结过去,也不预判未来,一路“一条道走到黑”。
刚学的时候,我总觉得这算法“太草率”,比如找零钱问题,想凑出最少硬币数,贪心就是每次都拿面额最大的(比如凑27元,先拿20,再拿5,再拿2个1),大部分日常场景下能成,但遇到特殊面额(比如有1、3、4元,凑6元),贪心选4+1+1(3枚)就不如3+3(2枚)优。后来才明白,贪心不是万能的,得满足“贪心选择性质”和“最优子结构”——说白了就是,当下选最好的,能推导出整体最好的,这题才能用贪心。
我现在做课后题,遇到贪心题第一反应是“试手”:先想每一步最直观的最优选择是什么,再反推有没有反例,有反例就换动态规划,没反例就用贪心。比如活动安排问题,选结束最早的活动,就能安排最多场,这步选完,剩下的子问题也能按同样规则选,很典型。
总的来说,贪心算法简单、快,适合一些特定场景,但局限性大,得结合题目条件判断,不能盲目用。
浙公网安备 33010602011771号