DAG 的最短路径算法
2024-08-30 18:10:17
求图中节点的单源最短路径可以使用Dijkstra,BellmanFord, SPFA算法,而对于有向无环图DAG来说,可以通过简单的动态规划来进行求解。
DAG的独特之处是所有节点可以线性化(拓扑序列),使得所有边保持从左到右的方向,如下图:
思路
动态规划的递推需要一个线性或者树形的顺序,对于DAG,我们可以将节点按照拓扑顺序来进行线性化,这样就可以来进行递推。
拓扑顺序中节点v排在节点u之后,则只有可能从u到达v,而不能反过来;对于当前的节点v,在拓扑序列中向前查找,可能找到一些可以到达该顶点的其他节点,然后利用 dist[v] = min{dist[u] + w[u][v] | u 可以到达v} 来进行动态规划的递推。
伪码
DagShortestPath(G, w, s){
对节点按照拓扑顺序进行排序
topologically sort the nodes in G
初始化
for each vertex v in G{
dist[v] = INF;
pre[v] = NULL;
}
dist[s] = 0;
//根据拓扑顺序,遍历顶点v
for each v in G, taken in topologically sorted order{
for each edge w[u][v]{
if (dist[v] > dist[u] + w[u][v]){
pre[v] = dist[u] + w[u][v];
pre[v] = u;
}
}
}
}
最新文章
- script在html中的摆放位置
- wex5 实战 框架拓展之1 公共data组件(Data)
- ASP.NET三层架构之不确定查询参数个数的查询
- java判断request请求是手机还是pc终端
- UWP开发-重新理解MVVM
- Spring3.2.2之后不赞成使用queryForInt
- VBA中自定义类和事件的(伪)注册
- js 数组对象,数组的使用
- js/jquery/插件表单验证
- Code-Based Configuration (EF6 onwards)
- 微信网页授权redirect_uri错误的可能错误之一
- Spring Data JPA 简单查询--接口方法
- Yii2框架ACF(AccessControl Filter)的使用
- Python UnboundLocalError和NameError错误根源解析
- Echarts 设置地图大小
- django —— 邮件
- HDU 6106 Classes
- 【codeforces 24D】损坏的机器人
- Java泛型类型
- virtualbox+vagrant学习-2(command cli)-4-vagrant global-status命令