贪心算法的原理与设计 贪心算法的设计步骤 1、将最优化问题转化为这样的形式:对其做出一次选择后,只剩下一个子问题要求解。 这个问题可以引用前面得到的活动选择问题进行说明 ,如在活动选择问题中,设Aij 代表的是活动ai? 结束后开始,且在aj结束之前进的一个子问题,于是 ...
分类:
编程语言 时间:
2015-07-17 20:58:17
阅读次数:
135
题目: 有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有活动。 设计一个高效的贪心算法求每个活动应该在哪个教室进行。分析: 本题是对书中活动选择问题的一个扩展。在活动选择问题中,我们要求的是一个最大兼容活动集,也就是在所有时间内时间不重叠的...
分类:
编程语言 时间:
2015-06-29 21:58:37
阅读次数:
421
活动选择问题
有一个教室,而当天有多个活动,活动时间表如下:找出最大兼容活动集!活动已按结束时间升序排序.
动态规划
采用动态规划需要满足两个条件:1.最优子结构2.子问题重叠
令SijS_{ij}表示在aia_i结束后和aja_j开始前活动的集合,假定AijA_{ij}为活动集合SijS_{ij}的最大兼容子集,其中包含活动aka_k。问题变成求SikS_{ik}与SkjS_{k...
分类:
编程语言 时间:
2015-06-19 13:38:12
阅读次数:
1013
4.1 活动选择问题
1.问题的理解与描述
假定有n个需要使用同一个这样的资源的活动,每次只能有一个活动使用该资源。每一个活动有一个开始时间 si,一个完成时间 fi,其中0 ≤ si < fi < ∞。如果区间[si , fi)和[sj , fj)不相交,活动ai和aj是相容的(即如果si≥ fj 或 sj ≤ fi,ai和aj相容)。活动选择问题是选取一个由相容活动构成的最大集合。
输入:...
分类:
编程语言 时间:
2015-06-01 22:41:45
阅读次数:
195
参考《算法导论第二版P222页)一,如何把现实的问题转变成数学问题?即数学建模的思路?1,问题描述:现有一组相互竞争的活动,如何调度能够找出一组最大的活动(活动数目最多)使得它们相互兼容?2,问题转化:首先,按活动的结束时间单调递增进行排序。那么,为什么要按结束时间排序呢?这个问题留到后面解释。其次...
分类:
编程语言 时间:
2015-05-04 23:33:04
阅读次数:
164
活动选择问题贪心算法vs动态规划
基础知识
1-1动态规划
1-2贪心算法
1-3贪心算法vs动态规划
活动选择问题描述
活动选择问题最优子结构
活动选择问题算法设计4-1贪心算法之选择最早结束活动
4-1-1递归贪心算法
4-1-2迭代的方式进行4-2贪心算法之选择最短时长活动4-3动态规划方法实现
4-3-1自上而下的实现
4-3-2自下而上的实现
结论活动选择问题(贪心算法vs动态规划)1.基...
分类:
编程语言 时间:
2015-05-01 17:29:17
阅读次数:
222
贪心算法原理贪心算法就是做出一系列选择来使原问题达到最优解。在每一个决策点,都是做出当前看来的最优选择,比如在活动选择问题里面,我们总是在一个问题的基础上选择结束时间最早的活动,之后再在剩下活动的基础上选出结束时间最早的活动,以此类推,直到没有活动可以进行选择。但是遗憾的是这种算法并不是总能得到最优解,并且是否能得到最优解还取决于对于贪心策略的选择。一般来说,设计贪心算法涉及到下面几个步骤:
1...
分类:
其他好文 时间:
2015-04-29 19:54:12
阅读次数:
148
贪心算法之活动分配问题在此之前,我们还讨论过贪心算法的活动选择问题,活动选择问题里面的选择策略在这篇文章里面作为贪心选择策略用到。好吧,让我们进入主题。问题描述有一个活动集合S={a1,a2,a3,...an}S=\lbrace a_1,a_2,a_3,...a_n \rbrace,每一个活动aia_i都有一个开始时间sis_i和结束时间fif_i,那么活动aia_i占用的时间段为[si,fi)[s...
分类:
编程语言 时间:
2015-04-27 21:58:58
阅读次数:
227
贪心算法之活动选择问题我们在之前的文章里面已经提到过动态规划的方法来求解最优的问题,但是就是因为动态规划太过于强大,像一把瑞士军刀,在一些比较特殊的问题上再使用动态规划的话,就有点用脸盆刷牙的感觉了,而且动态规划运行时间也比较长。对于一些特殊的最优解问题不是很适合,于是我们就有了贪心算法的出现。
贪心算法的座右铭:每一步都尽量做到最优,最终结果就算不是最优,那么也是次最优
从上面的描述中知道,贪...
分类:
编程语言 时间:
2015-04-25 15:15:02
阅读次数:
234