贪心算法入门有哪些技巧?

摘要:贪心算法的核心思想是通过局部最优解得到或近似取得全局最优解, 此时有几个待解决的问题: 怎么判断题目是否应用贪心策略求解? 怎么寻求局部最优与全局最优的关系? 如何选择最优的贪心标准以得到全局最优较优解? 思想理解 可以参阅知乎答主&am
贪心算法的核心思想是通过局部最优解得到或近似取得全局最优解, 此时有几个待解决的问题: 怎么判断题目是否应用贪心策略求解? 怎么寻求局部最优与全局最优的关系? 如何选择最优的贪心标准以得到全局最优/较优解? 思想理解 可以参阅知乎答主"冒泡"的一篇回答 如何理解动态规划? 与 Aditya Bhargava 的算法图解 例题理解 背包问题: 策略选择? 有一个背包, 容量为 150 kg. 有 7 个物品, 要求尽可能让装入背包中物品总价值最大, 且不能超过总容量 请你计算应如何取舍 重量 (kg) 35 30 60 50 40 10 25 价值 ($) 10 40 30 50 35 40 30 对于此题, 贪心的标准可能有几个? 每次选价值最大的 每次选重量最轻的 每次选单位重量价值最高的 试将所有策略与之对应的结果求出如下 策略 1: \(50 + 40 + 40 + 30 = 165 (130 kg)\) 策略 2: \(40 + 30 + 40 + 10 + 35 = 155 (140 kg)\) 策略 3: \(40 + 40 + 30 + 50 + 10 = 170(150kg)\) 哪种是最优解? 策略 3 吗? 如果更改数据呢? 以上三策略都是错的: 要求尽可能让装入背包中物品总价值最大, 且不能超过总容量 题目的局限使得三种策略无对错可分, 原因在于策略 3 打破了题目的限制, 1 和 2 又没有显著的优势可分 因而此题不适合用贪心算法求解, 或者说, 用贪心在此题只能获得近似最优解. 我们解决了第一个问题: 具有某些限制性条件的题目不适合用贪心算法求解 这道题到底怎么解? 应使用动态规划 最优装载问题 给定一个最大载重量为 \(M\) 的卡车和 \(N\) 种食品 有食盐,白糖,大米等 (假设它们都是散装且大货车只受重量限制不受体积限制) 已知第 \(i\) 种食品的最多拥有 \(W_i\) 公斤,其商品价值为 \(V_i\) 元/公斤,编程确定一个装货方案,使得装入卡车中的所有物品总价值最大。
阅读全文