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

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

时间:2016-04-16 23:08:57      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:

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

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

过程:

• 阶段 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背包问题的最优值。

技术分享

 

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/nolonely/p/5399458.html

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