码迷,mamicode.com
首页 > 编程语言 > 详细

算法总结1——动态规划

时间:2016-04-01 18:37:14      阅读:813      评论:0      收藏:0      [点我收藏+]

标签:

该文章所用的图片取自上海交大电院高晓沨老师上课所用的课件~顺便说一句,高老师的英语简直太棒了!

网址:http://cs.sjtu.edu.cn/~gao-xf/algorithm/


正值期中,即将考试,总结一下之前学的算法还是很有必要的,一方面记录以备之后用到,一方面防止自己在复习的过程中走神...之前做笔记总是想着自己看懂就好,其实很多地方没有写明白,导致之后看起来还是比较费力的,而目前任务多又重(估计之后也好不到哪里去),只想能不动脑就不动脑啊。所以想让自己写出的东西通俗易懂,以后只管端起茶杯,听着小曲儿,照样看得明白!


本次先把刚刚学的动态规规划写清楚,因为下周要交作业啊摔...

贪婪算法和递归留下周再讲,因为下下周有考试啊摔...


1、贪婪算法


2、递归


3、动态规划Dynamic programming.

Break up a problem into a series of overlapping sub-problems, and build up solutions to larger and larger sub-problems.

把一个问题分为一系列重叠的子问题,建立解决方案解决越来越大的子问题。


以下有几个常用的算法,有时间可以查下,暂时就不讲了哈~

Unix diff 用于比较两个文件

Viterbi 用于隐式马尔科夫模型

Smith-Waterman 用于基因序列对齐

Bellman-Ford 用于寻找网络中的最短路径

Cocke-Kasami-Younger 用于前后文无关的语法分析


加权间隔调度Weighted Interval Scheduling

input:开始时间:Sj  结束时间:Fj  权重:Vj

requirement:两个工作不能重叠

goal:找到权重最大的互相兼容的工作

技术分享

如果使用贪婪算法:

1、将所有的工作按照结束时间排序   2、如果该工作和之前选择的工作不冲突,则加到结果集合中

但是如果加了权重,那么贪婪算法就会失效


动态规划之加权间隔调度——蛮力法

1、将所有工作按照结束时间排序

定义:P(j)=和工作j兼容的最大的工作i

定义:OPT(j)=对于工作j来说最优的权重和(区间为从1到j)

2、

技术分享

解释:①、如果 j 为0,则权重和为0  ②、如果j不为0,比较如果选 j(权重和为 j 的权重Vj + 在 j 之前且和 j 最大兼容的工作的最优权重和)和如果不选j(j-1的最优权重和)两种情况,选择权重和大的那一个作为 j 的最优权重和

技术分享

动态规划之加权间隔调度——记忆法

我们可以看出在上边蛮力法的图中,有很多重叠的区域,比如2-(1,0)重复了3次,3-(1,(2-1,0))重复了2次。这种情况下重复计算明显是可以避免的,因此我们设置一个数组,用来记录这些情况。

技术分享

时间复杂度为O(n logn)


动态规划之加权间隔调度——自底向上(no 递归)

技术分享


分段最小二乘(Segmented Least Squares)

input:所有点的坐标(xj,yj)

requirement:找到一组线,使得 1、所有点到线的距离平方和E最小 2、线的数量L最小——可以合并为E+cL(c>0)最小

定义:

OPT(j)=对于p1,p2,...,pj来说最小cost

e(i,j)=p(i),p(i+1),...pj最小平方和


公式:

技术分享

解释:

如果j=0,则最小cost就是0

否则,i 与之后一直到 j 所有的点拟合一条新的线的cost + 新增加了一条线就会多出的代价C +  i 点之前的最小平方和OPT(i-1) 


算法:

技术分享

时间复杂度O(n^3)


背包问题Knapsack Problem

input:各个物品对应的weight和value

requirement:重量(weight)有限制的情况下,如何选择价值和(value)最大的物品

定义:

OPT(i,w)=从1到 i 的物品的最大价值和(在重量W内)

公式:

技术分享

解释:

如果i=0,则从1到 i 的最大价值和为0

如果 i 的重量大于总的重量,则 (从1到 i 的最大价值和) = (从1到 i -1的最大价值和)

其他情况,选 (第i-1个物品重量为W的价值和) 与 (第i个物品的value+之前物品(重量为w-wi)最优价值和)中最大的一个作为(从1到 i 的最大价值和)


算法——自底向上(no 递归)

技术分享

示例

技术分享

时间复杂度:

O(n*W)


RNA二级结构RNA Secondary Structure

input:ACGU序列

requirement:1、AU配对 CG配对  2、如果有拐角,中间间隔至少4个元素  3、不可以穿插

定义:

OPT(i,j)=从 i 到 j 碱基对的最大数量。


解释:

1、如果 i >= j-4,则OPT(i,j)=0

2、如果 bj不和哪个元素配对,则OPT(i,j)=OPT(i,j-1)

3、如果 bj 和 bt 配对,并且 i <= t  <= j-4,则OPT(i,j)=1+max{ OPT(i,t-1) + OPT(t+1, j-1) }——最前边加的那个1,就是 bj 与 bt 配对的那一对的计数


时间复杂度O(n^3)


————————————————————————未完待续——————————————————————


算法总结1——动态规划

标签:

原文地址:http://blog.csdn.net/sun7_she/article/details/51027650

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!