作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有一个需要重写的 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
据我了解该算法,要获得第 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:
关于algorithm - KSPA on undirected graph的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828041/
有一个需要重写的 KSPA 自定义实现。当前的实现使用修改后的 Dijkstra 算法,其伪代码大致解释如下。它通常被称为 KSPA,我认为是使用边缘删除策略。 (我是图论的新手)。 Step:-1.
我是一名优秀的程序员,十分优秀!