算法(四)--------动态规划问题

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若?个?问题。但是经分解得到的?问题往往不是互相独?的

动态规划策略通常?于求解最优化问题。
– 在这类问题中,可能会有许多可?解。每?个解都对应于?个值,我们希望找到具有最优值的那个解,即最优解。
– 动态
  • 在?定条件下,当前阶段的状态和下?阶段的状态之间的转移。
– 规划
  • 建?状态转移?程(或称各阶段间的递推关系式),将各个阶段的状态以表格式?法存储。
  • 表格式?法:??个表来记录所有已解决的?问题的解

过程:

• 阶段 stage
  – 将所给问题的过程,按时间或空间特征分解成若?相互联系的阶段,以便按次序去求每阶段的解。
• 状态 state
  – 各阶段开始时的客观条件叫做状态。
• 决策 decision
  – 当各阶段的状态确定以后,就可以做出不同的决定,从?确定下?阶段的状态,这种决定称为决策。
• 状态转移 transition
  – 根据上?阶段的状态和决策来导出本阶段的状态。

在分治法求解时,有些问题被重复计算了许多次

如果能够保存已解决的?问题的答案,?在需要时再找出已求得的答案,就可以避免?量重复计算,从?得到多项式时间算法。

基本要素
• 最优?结构(optimal substructure)
  – 原问题的最优解包含了?问题的最优解。
  – 该性质使我们能够以?底向上的?式递归地从?问题的最优解逐步构造出原问题的最优解。
• 重叠?问题(overlapping subproblem)
  – 有些?问题被反复计算多次(前?阶段的状态带到当前阶段,当前阶段的状态带到下?阶段)。
  – 通过表格式?法来记录已解决的?问题的答案

0-1背包问题?
• 给定n种物品和?个背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装?背包的物品,使得装?背包中物品的总价值最??
  – 0-1:在选择装?背包的物品时,对每种物品i只有两种选择,即装?背包或不装?背包。不能将物品i装?背包多次,也不能只装?部分的物品i。

  – 找出?个n元0-1向量(x1, x2, …, xn),使得n最大

       

(1)证明问题具有最优解

– 证明:设(y1,y2,…,yn)是给定n种物品在背包载重为c时的?个最优解,则(y2,…,yn)是除了第?个物品之外的n-1个物品在背包载重为c-w1y1时的?个最优解。
– 反证法:如若不然,设(z2,…,zn)是上述?问题的?个最优解,?(y2,…,yn)不是。(y1, y2, …,yn)不是

(2) 设m(i,j)是背包容量为j,可选择物品为1, 2, …, i时0-1背包问题的最优值。假设j是整数,从1开始逐?递减地划分

• 递归定义最优值

• 方法一:设m(i,j)是背包容量为j,(当前阶段)可选择物品为i, i+1,…,n时0-1背包问题的最优值。

• ?法?:设m(i,j)是背包容量为j,(当前阶段)可选择物品为1,2,…,i时0-1背包问题的最优值。

时间: 2024-09-29 05:02:56

算法(四)--------动态规划问题的相关文章

算法学习——动态规划1

众所周知,在面试中最难,也是大公司最容易考的就是动态规划,所以今天打算开撕动态规划,之前只是对于单个的题目知道解法,不过时间一久就忘记了,今天开始要彻底的理解方法论再到实践,希望老天保佑能够一周搞定! 一.通过一个小例子了解方法论: 一个例子,如上图: 求从起点到终点的最短路径: 这是一道最基本的动态规划问题,如果不使用动态规划可以使用穷举进行求解,路径大概存在2的k次方.利用动态规划求解主要步骤: 1. 找出规划的初始状态:对此,找出第一个子问题的解从而可以在后面的内容中利用该解来作为后面状态

关于贪心算法和动态规划的学习 - 背包问题为例

说到背包问题,我看到了很多分类,不同的类似问题,有不一样的解法,看到的最多的两种方式是贪心算法和动态规划,于我来说,更迫切的应该是要认识一下,这些算法的区别和相同的地方,所以这节就来找资料学习一下贪心算法和动态规划的区别. 这是找到的一个对我帮助最大的,源地址:https://www.cnblogs.com/Renyi-Fan/p/7741089.html 看之前先摘一下这几个解决方案的区别:摘自网上 "所以一个问题,该用递推.贪心.搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定

五大经典算法之动态规划

一.概念起源 ??动态规划,又名DP算法(取自其Dynamic Programming的缩写),最初是运筹学的一个分支,是用来求解决策过程最优化的数学方法. 二.基本思想 ??把 多阶段过程 转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解.那什么叫多阶段过程呢? 多阶段过程:首先大家可以思考一下以下这个问题: 假如我们有面值为1元/3元/5元的硬币若干枚,如何用最少的硬币凑够137元? 当然我们可以使用暴力枚举解决这个问题,不够那样复杂度就太高了.我们可以这样考虑,凑齐137元可以看成一

算法导论——动态规划

动态规划指的是一个问题可以拆分成多个小的最优子问题,并且这些子问题具有重叠,典型的如斐波那契数列:f(2)=f(1)+f(0),f(3)=f(2)+f(1),f(4)=f(3)+f(2),若使用简单的递归算法求f(4),则f(2)会被计算两次,当计算f(n)时需要计算f(n-1)和f(n-2)而f(n-1)又要计算记一次f(n-2),如此往复时间复杂度为n的指数级别,导致算法效率低下.若能够记录f(2)至f(n-1)的结果,可以保证每一级计算都是O(1)复杂度,整个算法的时间复杂度就能下降至O(

算法导论--动态规划(装配线调度)

装配线问题: 某个工厂生产一种产品,有两种装配线选择,每条装配线都有n个装配站.可以单独用,装配线1或2加工生产,也可以使用装配线i的第j个装配站后,进入另一个装配线的第j+1个装配站继续生产.现想找出通过工厂装配线的最快方法. 装配线i的第j个装配站表示为Si,j,在该站的装配时间是ai,j 如果从 Si,j装配站生产后,转移到另一个生产线继续生产所耗费的时间为ti,j 进入装配线花费时间ei,完成生产后离开装配线所耗费时间为xi 令f*表示通过生产所有路线中的最快的时间 令fi[j]表示从入

算法导论--动态规划(钢条切割)

钢条切割问题 现有一段长度为n英寸的钢条和一个价格表pi,求切割方案使销售利益最大rn最大 长度为n英寸的钢条共有2n?1种不同的切割方案,因为可以每个整英寸的位置都可以决定切割或者不切割. 为了得到rn最大,可以把这个问题分成子问题求解,先切一刀,再考虑余下的部分的最大收益即求 rn=max{pk+rn?k}(k=1,2,3-n-1), pk部分不进行继续切割,直接作为一个整体售出 ; rn?k部分继续切割,考虑所有的情况,分成子问题. 求出所有k值对应的收益最大者作为rn 也有可能不进行任何

经典算法宝典——动态规划思想(六)(2)

1.01背包问题 有N件物品和一个容量为V的背包,第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 解析: 这是最基础的背包问题,特点是每种物品仅有一件,可以选择放或不放.用子问题定义状态,即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.其状态转移方程便是f[i][v] = max{f[i-1][v], f[i-1][v-c[i]]+w[i]},这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的,所以有必要将它详细解

贪心算法和动态规划算法

动态规划和贪心算法都是一种递推算法 即均由局部最优解来推导全局最优解 (不从整体最优解出发来考虑,总是做出在当前看来最好的选择.) 不同点: 贪心算法 与动态规划的区别:贪心算法中,作出的每步贪心决策都无法改变,由上一步的最优解推导下一步的最优解,所以上一部之前的最优解则不作保留. 能使用贪心法求解的条件:是否能找出一个贪心标准.我们看一个找币的例子,如果一个货币系统有三种币值,面值分别为一角.五分和一分,求最小找币数时,可以用贪心法求解:如果将这三种币值改为一角一分.五分和一分,就不能使用贪心

活动选择问题(贪心算法vs动态规划)

活动选择问题贪心算法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.基础知识 在讲解活动选择问题之前,我们首先来介绍一动态规划和贪心算法的基础知识 1-1.动

算法题目: 动态规划 之 最短编辑距离

问题: 对于长度相同的2个字符串A和B,其距离定义为相应位置字符距离之和.2个非空格字符的距离是它们的ASCII码之差的绝对值:空格与空格的距离为0,空格与其他字符的距离为一个定值k.在一般情况下,字符串A和B的长度不一定相同.字符串A的扩展是在A中插入若干空格字符所产生的字符串.在字符串A和B的所有长度相同的扩展中,有一对距离最短的扩展,该距离称为字符串A和B的扩展距离.对于给定的字符串A和B,设计一个算法,计算其扩展距离. 测试数据: 输入:cmc      snmn        2