我不明白为什么最短路径的拓扑排序是o(v+e)的大o。
算法如下:

1. Topologically sort G into L;
2. Set the distance to the source to 0;
3. Set the distances to all other vertices to infinity;
4. For each vertex u in L
5.    - Walk through all neighbors v of u;
6.    - If dist(v) > dist(u) + w(u, v)
7.       - Set dist(v) <- dist(u) + w(u, v);

在我看来它是o(v*e)而不是o(v+e),因为它有两个嵌套for循环。但根据维基百科的说法是O(V+E),我是不是遗漏了什么https://en.wikipedia.org/wiki/Topological_sorting#Application_to_shortest_path_finding

最佳答案

记住,边是有方向的,所以同一条边永远不会被考虑用于多个顶点。尽管存在嵌套循环,但最终只会查看每个顶点和每个边一次。

关于algorithm - 为什么要进行拓扑排序以找到最短路径O(V + E),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32789088/

10-13 04:12