文档详情

四、贪心算法.pdf

发布:2017-06-22约1.79万字共11页下载文档
文本预览下载声明
2.3 贪心法 (Greedy Approach) 一、基本思想 适用问题:组合优化问题,适合优化原则。 设计方法:多步判断。在每步判断时在满足约束条件的情况下根据某个局部 的优化测度(可能是目标函数,也可能不是)考虑部分解中一个变量的选择。 使用贪心法要解决的问题: 是否可以得到最优解? 不能得到最优解, 解与 最优解的误差估计。 例 1 活动选择问题 S ={1, 2, …, n}为 n 项活动的集合。si, fi 分别为活动 i 的开始和结束时间。活 动 i 与j 相容当且仅当 s ≥ f , 或 f ≥ s , 求最大的两两相容的活动集。 i j i j 解:按照结束时间的递增顺序将活动排列为 1, 2, …, n, 使得 f1 ≤ f2 ≤… ≤ fn 算法 Greedy Select 1. n ← length[S]; 2. A←{1}; 3. j ← 1; 4. for i ← 2 to n 5. do if si ≥ fj 6. then A ← A∪{i}; 7. j ← i; 8. return A. 最后完成时间为 max {fk : k ∈A}. 例如下述输入 I 1 2 3 4 5 6 7 8 9 10 11 si 1 3 0 5 3 5 6 8 8 2 12 fi 4 5 6 7 8 9 10 11 12 13 14 解为 A = {1, 4, 8, 11} t=14 下面证明贪心法得到最优解。 定理 1 算法 Select 执行到第 k 步, 选择 k 项活动 i = 1, i , …, i , 那么存在最 1 2 k 优解 A 包含 i = 1, i , …, i 1 2 k 证明:对 k 归纳。 k=1, 设 S = {1, 2, …, n}是活动集,活动按截止时间递增顺序排序,则存在最 优解含有活动 1。任取最优解 A, A 中的活动按照截止时间递增的顺序排列。如 果 A 的第一个活动为j ,j ≠ 1, 令 A’= (A−{j})∪{1}, 由于f ≤ f , A’也是最优解,且含有 1. 1 j 假设命题对 k 为真。算法执行到第 k 步, 选择了活动 i = 1, i , …, i , 根据归 1 2 k 纳假设存在最优解 A 包含 i = 1, i , …, i , A 中剩下的活动选自集合 S’ = {i | i ∈ S, 1 2 k s ≥ f }。且B=A-{ i , i , …, i }是 S’的最优解。若不然,S’的最优解为B’ ,B’ 的 i k 1 2 k 活动比 B 多,那么 B’∪{1, i , …, i }是 S 的最优解,且比 A 的活动多,与 A 的最 2 k 优性矛盾。 根据归纳基础,存在 S’的最优解B 含有 S’中的第一个活动,设为ik+1, 则 {i , i ,..., i }∪B {i , i ,...i ,i }∪(B −{i }) 1 2
显示全部
相似文档