最长路径问题
- 在一般的图中,最长路径问题不具有如最短问题一样的最优子结构属性(算法导论动态规划章节P218)
- 在最长路径问题中,子问题是相关的
- 求解一个子问题会对另一个子问题产生影响
- 在最短路径问题中,子问题是无关的
- 因此存在动态规划算法!
- flody和Dijkstra都可以认为是动态规划算法
- 在最长路径问题中,子问题是相关的
- NP−hardNP-hardNP−hard问题
- 但是,对于directed acyclic graphdirected \ acyclic \ graphdirected acyclic graph来说,存在线性时间算法,即拓扑排序!
有向无环图中的最长路径问题-拓扑排序(类似关键路径问题)
- 关键路径AOE网中只有一个汇点
- 但这里的图不一定只有一个汇点
- 适用于带权图
算法流程
- 使用BFS对所有结点进行拓扑排序
- 在拓扑排序过程中每当遇到一个结点(设为结点j),更新从其出发的所有结点的dist值。对于从结点i出发的任意一条边(i,j)按如下方式进行更新:
dist[j]←max{ dist[j],dist[i]+weight(i,j)}dist[j] \leftarrow max\{dist[j],dist[i] + weight(i,j)\}dist[j]←

本文探讨了在有向无环图(DAG)中使用拓扑排序解决最长路径问题的方法,介绍了如何通过BFS进行排序并更新路径长度,以及记忆化搜索在LeetCode问题上的应用实例。重点强调了子问题相关性和动态规划的区别,并展示了关键路径问题与AOE网的关系。
最低0.47元/天 解锁文章
1万+

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



