Abh*_*hay 5 algorithm graph-theory shortest-path
有一个KSPA的自定义实现需要重写.当前实现使用修改的Dijkstra算法,其伪代码在下面粗略地解释.它通常被称为KSPA使用边缘删除策略我认为如此.(我是图论的新手).
Step:-1. Calculate the shortest path between any given pair of nodes using the Dijkstra algorithm. k = 0 here.
Step:-2. Set k = 1
Step:-3. Extract all the edges from all the ‘k-1’ shortest path trees. Add the same to a linked list Edge_List.
Step:-4. Create a combination of ‘k’ edges from Edge_List to be deleted at once such that each edge belongs to a different SPT (Shortest Path Tree). This can be done by inspecting the ‘k’ value for each edge of the combination considered. The ‘k’ value has to be different for each of the edge of the chosen combination.
Step:-5. Delete the combination of edges chosen in the above step temporarily from the graph in memory.
Step:-6. Re-run Dijkstra for the same pair of nodes as in Step:-1.
Step:-7. Add the resulting path into a temporary list of paths. Paths_List.
Step:-8. Restore the deleted edges back into the graph.
Step:-9. Go to Step:-4 to get another combination of edges for deletion until all unique combinations are exhausted. This is nothing but choosing ‘r’ edges at a time among ‘n’ edges => nCr.
Step:-10. The ‘k+1’ th shortest path is = Minimum(Paths_List).
Step:-11. k = k + 1 Go to Step:-3, until k < N.
Step:-12. STOP
Run Code Online (Sandbox Code Playgroud)
据我理解算法,为了获得第k个最短路径,在每个源 - 目的地对之间找到"k-1"SPT,并且对于每个组合,每个来自一个SPT的"k-1"边缘将被同时删除.显然,该算法具有组合复杂性,并且在大图上阻塞服务器.人们向我推荐了Eppstein的算法(http://www.ics.uci.edu/~eppstein/pubs/Epp-SJC-98.pdf).但是这篇白皮书引用了一个'有向图',我没有看到它只适用于有向图.我只是想问一下这里是否有人在无向图上使用过这个算法?
如果没有,是否有良好的算法(在时间复杂度方面)在无向图上实现KSPA?
提前致谢,
时间复杂度:O(K*(E*log(K)+ V*log(V)))
存储器复杂度为O(K*V)(+ O(E),用于存储输入).
我们按如下方式执行修改后的Djikstra:
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |