分析最优解的结构特征
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:设待安排的11个活动的开始时间和结束时间按结束时间的非减 序排列如下:
i S[i] f[i] 1 1 4 2 3 5 3 0 6 4 5 7 5 3 8 6 5 9 7 6 10 8 8 11 9 8 12 10 2 13 11 12 14
2018/11/5
9
University of Science and Technology of China
2018/11/5 3
University of Science and Technology of China
10.1 活动安排问题
设有n个活动的集合E={1,2,…,n},
每个活动都要求使用同一资源,如演讲会场等,而
在同一时间内只有一个活动能使用这一资源。
每个活动i都有一个要求使用该资源的起始时间si和 一个结束时间fi,且si <fi 。如果选择了活动i,则它在 半开时间区间[si, fi)内占用资源。
解。一个非空子问题Sij的任意解中必包含了某项活动ak
,而Sij的任一最优解中都包含了其子问题实例Sik和Skj的 最优解(根据最优子结构性质!)。因此,可以构造 出Sij的最大兼容子集。
2018/11/5 6
University of Science and Technology of China
若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j 是相容的。即当si≥fj或sj≥fi时,活动i与活动j相容.
问题:选出最大的相容活动子集合。
4
2018/11/5
University of Science and Technology of China
10.1 活动安排问题
(用动态规划方法)
步骤1:分析最优解的结构特征 — 构造子问题空间: Sij={ ak∈S: fi≤sk<fk≤sj} Sij包含了所有与ai和aj相兼容的活动,并且与不迟于ai
结束和不早于aj开始的活动兼容。此外,虚构活动a0和
an+1,其中f0=0, Sn+1=≦。原问题即为寻找S0,n+1中最大 兼容活动子集。
10.1 活动安排问题
问题: k有j-i-1种选择,每种选择会导致2个完全不同的子问 题产生,因此,动态规划算法的计算量比较大!!! 一个直观想法是直接选择k的值,使得一个子问题为空 ,从而加快计算速度!这就导致了贪心算法!
2018/11/5
8
University of Science and Technology of China
10.1 活动安排问题
(用贪心算法) 贪心策略:对输入的活动以其完成时间的非减序排列,算法每次 总是选择具有最早完成时间的相容活动加入最优解集中。直观上 ,按这种方法选择相容活动为未安排活动留下尽可能多的时间。 也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极 大化,以便安排尽可能多的相容活动。
2018/11/5
2
University of Science and Technology of China
10.1 活动安排问题
当一个问题具有最优子结构性质时,可用动态规划法 求解,但有时用贪心算法求解会更加的简单有效。
顾名思义,贪心算法总是作出在当前看来最好的选择
。也就是说贪心算法并不从整体最优考虑,它所作出 的选择只是在某种意义上的局部最优选择。当然,希 望贪心算法得到的最终结果也是整体最优的。虽然贪 心算法不能对所有问题都得到整体最优解,但对许多 问题它能产生整体最优解。如单源最短路经问题,最 小生成树问题等。在一些情况下,即使贪心算法不能 得到整体最优解,其最终结果却是最优解的很好近似 。
10.1 活动安排问题
步骤2:递归地定义最优解的值
设c[i, j]为Sij中最大兼容子集中的活动数。当Sij=φ时,c[i, j] = 0 。对于一个非空子集Sij,如果ak在Sij的最大兼容子集中被使用,则 子问题Sik和Skj的最大兼容子集也被使用。从而: c[i, j] = c[i, k] + c[k, j] + 1 由于Sij的最大子集一定使用了i到j中的某个值k,通过检查所有可
10.1 活动安排问题
2018/11/5
10
University of Science and Technology of China
10.1 活动安排问题
Recursive-Activity-Selector(s, f, i, j) { ① m ← i+1; ② while m<j and sm<fi ③ do m ← m+1 ④ if m<j ⑤ then return {am} U Recursive-Activity-Selector(s, f, m, j) ⑥ else return φ } 说明: 1)数组s和f表示活动的开始和结束时间,n个输入活动已经按照活动结束时 间进行单调递增顺序排序; 2)算法②~ ③目的是寻找Sij中最早结束的第一个活动,即找到与ai兼容的 第一个活动am,利用am与Smj的最优子集的并集构成Sij的最优子集; 3)时间复杂度O(n)。
能的k值,就可以找到最好的一个。因此,c[i, j]的完整递归定义
为:
0 c[i, j ] max{c[i, k ] c[k , j ] 1} ik j
2018/11/5 7
Sij Sij
University of Science and Technology of China
2018/11/5 5
UniversityLeabharlann Baiduof Science and Technology of China
10.1 活动安排问题
— 证明原问题具有最优子结构性质。即:若已知问题Sij
的最优解Aij中包含活动ak,则在Sij最优解中的针对Sik的 解Aik和针对Skj的解Akj也必定是最优的。(反证法即可 !) — 证明可以根据子问题的最优解来构造出原问题的最优
算法基础
主讲人: 吕敏
Email: { lvmin05@ustc.edu.cn }
Spring 2012,USTC
University
of
Science
and
Technology
of
China
第十讲 贪心算法
内容提要:
理解贪心算法的概念
掌握贪心算法的基本要素
理解贪心算法与动态规划算法的差异 通过范例学习贪心算法设计策略