活动选择问题贪心算法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
上一篇讲了贪心算法来解活动选择问题(【算法导论】贪心算法之活动选择问题),发现后面有一道练习16.1-1是要用动态规划来解活动选择问题。其实跟之前的矩阵链乘法有些相似,也是考虑分割的活动是哪一个,并用二维数据来记录Sij---最大兼容集合个数,和用另一个二维数据来记录Sij取得最大时的活动分割点k。然后就是考虑边界问题,和使用递归来求动态规划的最优解。
#i...
分类:
编程语言 时间:
2015-01-28 22:36:17
阅读次数:
408
活动选择问题的递归调用算法
#include
using namespace std;
#define N 11
struct node{
int id;
int satrt;
int end;
}A[N+1];
void recursive_activity_seclect(int k,int n)
{
int m=k+1;
while(m<=n&&A[m].satrt<A[k].e...
分类:
编程语言 时间:
2014-12-29 12:16:04
阅读次数:
171
此题是算法导论贪心算法的16.1-5题。
问题描述:
考虑一个活动选择问题的一个变形:每个活动ai除了开始和结束时间外,还有一个值vi。目标不再是求规模最大的兼容活动子集,而是求值之和最大的兼容活动子集。也就是说,选择一个兼容活动子集A,是的vk(k属于A)之和最大化。设计一个多项式时间的算法求解此问题。
思路:
此题是活动安排问题的一个变形。最优化目标不再是最大兼容活动子集,所以...
分类:
其他好文 时间:
2014-11-06 17:36:27
阅读次数:
158
这三种算法总的来说,刚开始看的时候不知道怎么下手,但是看多了也会有那么一点儿感觉。分治法是这三种算法里面都有的思想,动态规划和贪心都是将问题分解成子问题求解,但动态规划里面的子问题都带有联系,而贪心算法里面的子问题都相对独立,唯一不同的是,贪心算法要首先想出一个解决方案来构造求解最优解的过程。...
分类:
其他好文 时间:
2014-10-23 20:49:49
阅读次数:
241