视频字幕
贪心算法是计算机科学中一种重要的算法设计策略。它的核心思想是在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的。简单来说,就是走一步看一步,每一步都选择当前最优的方案,不考虑未来的后果。
贪心算法并不是万能的,它只适用于具有特定性质的问题。首先是贪心选择性质,即全局最优解可以通过一系列局部最优选择来达到。其次是最优子结构性质,即问题的最优解包含其子问题的最优解。只有同时具备这两个性质的问题,贪心算法才能保证得到正确的全局最优解。
让我们通过找零钱问题来理解贪心算法。假设我们有1元、5元、10元、25元面额的硬币,需要找零67元。贪心策略是每次选择不超过剩余金额的最大面额硬币。首先选择2个25元硬币,剩余17元;然后选择1个10元硬币,剩余7元;接着选择1个5元硬币,剩余2元;最后选择2个1元硬币。总共用了6个硬币,这就是最优解。
活动选择问题是贪心算法的另一个经典应用。我们有多个活动,每个活动都有开始和结束时间,目标是选择最多的互不冲突的活动。贪心策略是将活动按结束时间排序,然后依次选择结束时间最早且与已选活动不冲突的活动。首先选择A活动,然后B活动与A冲突被排除,接着选择C活动,D活动与C冲突被排除,最后选择E活动。最终选择了A、C、E三个活动,这是最优解。
贪心算法虽然简单高效,但也有明显的局限性。首先,它不一定能得到全局最优解,只有在问题满足贪心选择性质和最优子结构性质时才能保证正确性。其次,使用贪心算法前需要严格的数学证明来验证策略的正确性。与动态规划相比,贪心算法是局部最优决策的简单叠加,而动态规划会考虑所有可能的子问题来构建全局最优解。因此,在选择算法时要根据问题的特性来决定是否适合使用贪心策略。