算法课笔记系列(四)—— 动态规划

这两周都太忙,所以上周也没总结。这周一起补上。

上周讲的是Matroid,一个非常抽象的概念,中文翻译为“拟阵”。这个内容放到下一篇博文中。这篇总结一下这周讲的“动态规划(Dynamic Programming, 简称DP)”。动态规划可以应用在生物信息学,控制理论,信息理论,运筹学(Operations research)和计算机科学中的理论、图像、人工智能、编译器等等。

首先,对着之前的算法思路进行一个对比:

【贪心算法】是对问题增量地建立一个解决方法,仅考虑当前情况下的最优,并不断优化标准;

【分治算法】是将一个问题分解为若干个规模相等的子问题,解出子问题,然后将子问题的解进行组合,得到原问题的解;

而【动态规划】,则是将一个问题分解为有重合部分的子问题,将子问题的解不断地扩大成更大的子问题的解,最终得出满足条件的原问题的解。

针对课堂上讲的案例,这里做了一个list总结:

(1)Weighted Intervan Scheduling

   

是不是觉得跟之前的贪心算法中的区间调度的例子很像?哈哈~其实就是一个问题,不过与之前贪心算法中不同的是,该区间调度是对每一个时间段给了一个权重,要解决的问题是同时兼容的任务的含有最大权重的子集。

当然,当所有任务的权重都等于1的时候,就变成典型的贪心算法了。我们回忆一下,在贪心算法中,对于该问题,我们是考虑最早结束时间,如果一个任务与之前选中的任务可以兼容,那么就加入到集合中。但是这种思路在权重任意并且不定的情况下是不可行的。反例如下:

   

对于该问题的考虑如下,首先按照任务的结束时间先后对任务进行排序编号,为f1,f2,…fn, 定义p(j)是任务i与任务j兼容的最大的索引项i。令OPT(j)为问题的最优解,包含任务1,2…任务j。

第一种情况:OPT选择任务j

此时,需要将任务j的权重加进来,不能加入不兼容的任务{p(j)+1,…,j-1},包含剩下的兼容的任务1,2,…p(j)问题的最优解。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值