用于所有对最短路径计算的Floyd-Warshall算法基于:
(A)贪婪范式。
(B)分而治之范式。
(C)动态编程范例。
(D)既不是贪婪,也不是分而治之,也不是动态编程范例。
答案: (C)
说明: Floyd Warshall算法是一种基于动态编程的算法。
它使用问题的以下递归性质找到所有对的最短路径。
对于源顶点和目标顶点的每对(i,j),都有两种可能的情况。
1)k不是从i到j的最短路径的中间顶点。我们将dist [i] [j]的值保持不变。
2)k是从i到j的最短路径中的中间顶点。我们将dist [i] [j]的值更新为dist [i] [k] + dist [k] [j]。
下图取自《 Cormen》一书。它显示了所有对最短路径问题中的上述最佳子结构属性。
由于递归中存在重叠的子问题,因此它使用动态编程。
这个问题的测验