动态规划博大精深,想完全掌握是很难的,不过我们可以从一些简单的例子之中去体会她的奥妙。
不说废话、先来一个简单的例子吧:
longest path in DAG
Problem:
Given a weighted directed acyclic graph G=(V, E), an vertex v, where each edge is assigned an integer weight, find a longest path in graph G
问题描述:
给一个带权有向无环图G=(V,E),找出这个图里的最长路径。

说实话初学者直接给出这个图会看蒙的、再看看问题,不知道从何下手。
好了,对上图做个简单的处理:

现在看起来是不是清晰多了呢
用dilg(v)表示 以点结尾的最长路径,现在考虑dilg(D), dilg(B), dilg(C)
dilg(D)=max{dilg(B)+1, dilg(C)+3}
来解释一下:点D的入度边有CD、BD。
以D结尾的最短路径必定经过C、D中的最后一点;如果是C点,则以dilg(C)+3(权值)定会大于等于dilg(D)+2(权值)
如果没能看懂,请注意dilg(V)的定义
对于任意的点V可以有如下表达式:
dilg(v)

本文介绍了如何使用动态规划求解有向无环图中的最长路径问题。通过实例解析了动态规划的思路,即从入度为0的点开始,按照拓扑排序顺序计算每个点的最长路径,并记录父节点,最终得到最长路径。

1万+

被折叠的 条评论
为什么被折叠?



