之前也在看算法相关的书、在被称为黑书的《算法导论》里看过关于动态规划的讲解
只是当时研究不深、最近突来兴趣对动态规划做了个小的总结、所以就分享下
不足之处多多指正、
先对动态规划做一个简单的介绍吧:
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数
学家R.E.Bellman等人提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,
创立了解决这类过程优化问题的新方法——动态规划。
动态规划是信息学竞赛中选手必须熟练掌握的一种算法,他以其多元性广受出题者的喜爱. 动态规划成为信息学奥赛的必考算法之一。
动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题。
Main idea:
solve several smaller (overlapping) subproblems
record solutions in a table so that each subproblem is only solved once
final state of the table will be (or contain) solution
对于动态规划,我是这样理解的:
把待解决的问题分为一个规模较原问题小的子问题、
然后要考虑的就是如何更具这个子问题如何得到原问题的解已经如何解决这个子问题
当然、原问题和子问题需要有相同的解决方式、它们只有问题规模的区别。
这样讲有点抽象、用一个简单的图来说明下:
可以简单的这样理解、把原问题划分为小的问题(能组合成原问题的,小的问题再划分、持续下去,找到简单解
反方向计算回来(记下每一步结果)最后就能得到解。
听起来似乎不难,但是要作比较深入的理解还是得通过实例说话
后面会跟几个经典例子、诸如背包问题等等的都会有我自己的理解、
如果都能理解的话、恭喜你,动态规划入门了