在下表中,左列包含标准图算法的名称,右列包含算法的时间复杂度。将每个算法与其时间复杂度相匹配。
1. Bellman-Ford algorithm 2. Kruskal’s algorithm 3. Floyd-Warshall algorithm 4. Topological sorting |
A : O ( m log n) B : O (n3) C : O (nm) D : O (n + m) |
(A) 1→C、2→A、3→B、4→D
(B) 1→B、2→D、3→C、4→A
(C) 1→C、2→D、3→A、4→B
(D) 1→B、2→A、3→C、4→D答案:(一)
解释:
- Bellman-Ford 算法:时间复杂度:O(VE)
- Kruskal 算法:时间复杂度: O(ElogE) 或 O(ElogV)。边的排序需要 O(ELogE) 时间。排序后,我们遍历所有边并应用 find-union 算法。查找和联合操作最多需要 O(LogV) 时间。所以整体复杂度是 O(ELogE + ELogV) 时间。 E 的值最多可以是 V^2,因此 O(LogV) 与 O(LogE) 相同。因此,总体时间复杂度为 O(ElogE) 或 O(ElogV)
- Floyd-Warshall 算法:时间复杂度:O(V^3)
- 拓扑排序:时间复杂度:上述算法只是带有额外堆栈的 DFS。所以时间复杂度和DFS一样,都是O(V+E)。
这个问题的测验