• 动态规划


    http://doc.okbase.net/cc_again/archive/71796.html 

    一 . 定义

      1 . 动态规划是运筹学中用于求解决策过程中最优化数学方法 。

      2 . 如果问题是交叠的子问题构成 , 我们就可以用动态规划来解决它 。

    动态规划的思想是什么:记忆,空间换时间,不重复求解,由交叠子问题从较小问题解逐步决策,构造较大问题的解。

    动归解决问题的一般思路 :

      1 . 将原问题分解成若干的子问题 。

        由于子问题 与 原问题规模相同或相似 , 所以当子问题解决时 , 原问题也就相当于解决 。

        子问题的解一旦求出就会被保存 , 所以所有的子问题都只被求了一次 。

      2 . 确定状态

        和子问题相关的各个变量的一组取值 , 称之为一组 “状态” , 一个 “状态” 对应一个或多个子问题 , 所谓某个 “状态” 下的值 , 就是这个 “ 状态” 所对应子问题的解 。

        所有状态的集合 ,构成问题的 “状态空间 ” , “状态空间” 的大小 与解决问题的时间复杂度有关 。

      3 . 确定状态转移方程

        定义出什么是 “状态” , 以及在该状态下的“值” ,就要找出不同状态之间是如何迁移的 ,即如何从一个或多个“值”已知的 “状态” , 求出另一个 “状态” 的 “值”  (递推型) 。

        状态的迁移可以用递推公示表示 , 此递推公示也叫做 “状态转移方程” 。

    举例 ( 数字三角形的状态转移方程 ) :

     Maxsum[ i ][ j ] = {  pre[ i ] [ j ]          i == n ;

                   max ( Maxsum[i+1][ j ] , Maxsum[ i + 1 ] [ j + 1 ] ) + pre[ i ] [ j ] ;     其它的情况

      

    能用动态规划解决问题的特点 :

      1 . 具有最优子结构特点 。 如果问题的最优解所包含的子问题的解也是最优的 , 我们就称该问题具有最优子结构性质 。

      2 . 无后效性 。 当前的若干状态值一旦确定 , 则此后过程的演变 , 只和这若干个状态的值有关 , 和之前采取何种手段 走哪条路径演变到当前的若干个状态 , 没有关系 。

     二 . 分类

       1、简单基础dp

       主要包括递推、背包、LIS(最长递增序列),LCS(最长公共子序列),下面针对这几种类型,推荐一下比较好的学习资料和题目。

         1、递推:

         递推一般形式比较单一,从前往后,分类枚举就行。

           简单 :   HDU 2084 数塔    /       POJ  1163 数字三角形

               Fibonacci  类型的题目

               递推找公示的题目

    东北日出西边雨 道是无情却有情
  • 相关阅读:
    js三种经典排序:冒泡排序、插入排序、快速排序
    CSS小技巧
    2017
    实际开发中的问题积累【积累】
    F.I.S本地环境的搭建教程
    移动端前端开发注意点(未完待续)
    【六】PHP正则表达式方法
    【五】PHP数组操作函数
    【三】php之梗
    【二】php常用方法
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/7302582.html
Copyright © 2020-2023  润新知