博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划
阅读量:6914 次
发布时间:2019-06-27

本文共 1202 字,大约阅读时间需要 4 分钟。

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  类型的题目

           递推找公示的题目

转载于:https://www.cnblogs.com/ccut-ry/p/7302582.html

你可能感兴趣的文章
MySQL忘记密码后重置密码(Mac )
查看>>
raid卡的常用命令
查看>>
JavaScript 类型转换
查看>>
谈谈基于机器学习的编程到底比传统编程强在哪里?
查看>>
终极指南:如何使用Visual Studio Code进行 Java 开发?
查看>>
GitHub发布2017年度开发者报告,用户达2400万
查看>>
Java EE供应商和伦敦Java用户组宣布新的MicroProfile
查看>>
Python中的集合类模块collections详解
查看>>
Chef在InSpec 2.0增强了云安全的自动化功能
查看>>
升级的Electric Cloud平台增添了大型机和微服务功能
查看>>
Java 虚拟机经典六问
查看>>
Dart 2为移动开发做出改进
查看>>
无服务器TOP3大关键问题及解决方案
查看>>
基于Gitflow分支模型自动化Java项目工作流
查看>>
全能App研发助手!滴滴开源DoraemonKit
查看>>
.NET开源简史
查看>>
Bustle的GraphQL实践
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
NoSQL 数据库敏捷数据模型
查看>>
Oracle回应用户锁定,自治数据库是更好选择
查看>>