下载此文档

动态规划优化.ppt


文档分类:IT计算机 | 页数:约48页 举报非法文档有奖
1/48
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/48 下载此文档
文档列表 文档介绍
浅谈动态规划优化
2009曹文信息学奥林匹克夏令营
Author: Will
简介
动态规划优化的主要方法:
1、降维(优化状态)
2、优化转移
3、常数优化

降维是一个通用的说法,其实质就是通过改变动态规划的状态含义,或者抛弃一些冗余状态环节,达到减少状态,加速动态规划的目的

很多时候,当得出某种动态规划模型的时候,不要着急动手,而是需要仔细思考一下,是不是有更好的状态表示方法
多积累经验,同时又不能拘泥于死板的模型理论,要有创新意识。

给定N*M的空白棋盘,在其中放任意放车(可以不放),要使得放在棋盘上的车两两不能攻击,求方案总数MOD P的值。

按照基本的状态压缩动态规划模型进行解答。
opt[K][S]表示已经放了前K行,并且每一列是否有车的状态为S(S为一个0/1的2进制序列,那一位为1则表示对应一列已经放过了一个车)的合法方案的数量。
比如opt[2][(101)2]即表示前2行放了车且第1,3列有车的状态。

则转移就是枚举这一行放还是不放,如果放的话则枚举所有没有放车的行,将对应的2进制位标记为1,进行转移。
时间复杂度O(NM2M)
空间复杂度O(2M)
但是……
如果N,M>1000该怎么办呢?

换一个角度来分析问题
可以发现,我们需要知道的只是有多少列目前没有放车,并不需要知道具体是哪些列没有放车!
因此opt[k][(101)2]和opt[k][(110)2]是本质等价的。
于是我们可以把状态改为:opt[k][S]表示放置了前k行,并且有S列没有放置。

此时转移稍有不同
opt[k+1][S]=opt[k][S]+opt[k][S+1]*(S+1)
此时时间复杂度为O(NM)
空间复杂度为O(NM)
问题得到了解决
可见对问题透彻的分析是得出最有效规划方式的前提。

很多时候一些状态是不需要的,或者某些维是可以合并的。
经过合理的分析我们可以抛弃一些冗余信息,减少状态,加速转移。

动态规划优化 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数48
  • 收藏数0 收藏
  • 顶次数0
  • 上传人花开一叶
  • 文件大小1.56 MB
  • 时间2018-07-10