算法总结1——动态规划
Posted Sun7_She
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法总结1——动态规划相关的知识,希望对你有一定的参考价值。
该文章所用的图片取自上海交大电院高晓沨老师上课所用的课件~顺便说一句,高老师的英语简直太棒了!
网址: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——动态规划的主要内容,如果未能解决你的问题,请参考以下文章
LeetCodeLeetCode之跳跃游戏Ⅱ——暴力解法+动态规划+贪婪算法
LeetCodeLeetCode之跳跃游戏Ⅱ——暴力解法+动态规划+贪婪算法