引言:暴力搜索树的剪枝和有向无环图的遍历
动态规划的建模和求解过程,可以看成是暴力搜索树的剪枝过程;也可以看成是以状态为节点,以决策为边构成的有向无环图的广度优先遍历。
本专栏之前的一篇文章[1]通过决策树剪枝的视角理解动态规划,把动态规划看成是对暴力搜索得到的决策树(更确切地说,是DAG图)的剪枝过程。最近看到了 @阮行止 大佬的一个回答[2],在这里换一个视角讨论一下。
本节的核心思想就是下面这句话:
如果想不明白一个问题应该怎么用动态规划,可以先尝试从暴力搜索入手。
先看 @阮行止 大佬文章中的例子,
如何用1、5、11元面值的钞票,凑出15元,使得用到的钞票尽可能少。
在这里,大佬并没有展开讲暴力搜索,但是我觉得这里怎么做暴力搜索也是一个很有意思的问题。
针对这个问题,如果要做暴力搜索的话,主要有两个搜索的思路:
(1)每次用一张钞票,决策是这张钞票的面额是多少。
![e8f8d5f38371ee2c3376c1fd00d2dcdc.png](https://img-blog.csdnimg.cn/img_convert/e8f8d5f38371ee2c3376c1fd00d2dcdc.png)
(2)每次用一种钞票,决定用多少张这种钞票。
![a6de16f75f7bb1773a3bb07aedbd7a26.png](https://img-blog.csdnimg.cn/img_convert/a6de16f75f7bb1773a3bb07aedbd7a26.png)
这两种暴力搜索方式的区别在于,第一种暴力搜索方式会形成一个深度不确定的搜索树,目标函数是找出层数最少的叶子节点;第二种暴力搜索过程形成的搜索树的深度是确定的,目标函数是使
值得注意的是