最短路径动态规划(最短路径动态规划算法)
最短路径动态规划
简介
最短路径动态规划是一种解决最短路径问题的计算机算法。它使用动态规划技术,将问题分解成一系列子问题,然后逐步求解,最终得到最优解。
算法步骤
最短路径动态规划算法的步骤如下:
1. 初始化:
创建一个二维数组 `dp`,其中 `dp[i][j]` 表示从源点 `i` 到目标点 `j` 的最短路径长度。
将 `dp[i][j]` 初始化为无穷大,其中 `i != j`。
2. 求解子问题:
对于每个中间点 `k`,依次更新 `dp` 数组:
`dp[i][j]` = min(`dp[i][j]`, `dp[i][k]` + `dp[k][j]`)
3. 得到最优解:
最终,`dp[source][destination]` 将包含从源点到目标点的最短路径长度。
算法复杂度
最短路径动态规划算法的时间复杂度为 `O(V^3)`,其中 `V` 是图中的顶点数。
适用场景
最短路径动态规划算法适用于以下场景:
图中不存在负权边
顶点数较少
需要求解所有点对之间的最短路径
示例
假设我们有一个如下所示的加权有向图:```A (s)/ \1 / \/ \2 B -- 3 C (t) ```其中,`s` 是源点,`t` 是目标点。使用最短路径动态规划算法求解该图的最短路径:
1. 初始化:
``` dp = [[0, 1, inf, inf],[inf, 0, 2, inf],[inf, inf, 0, 3],[inf, inf, inf, 0] ] ```
2. 求解子问题:
``` // 中间点 k = 1 dp[1][3] = min(dp[1][3], dp[1][1] + dp[1][3]) = 3 dp[2][3] = min(dp[2][3], dp[2][1] + dp[1][3]) = 5// 中间点 k = 2 dp[1][3] = min(dp[1][3], dp[1][2] + dp[2][3]) = 5 dp[2][3] = min(dp[2][3], dp[2][2] + dp[2][3]) = 2// 中间点 k = 3 dp[1][3] = min(dp[1][3], dp[1][3] + dp[3][3]) = 5 dp[2][3] = min(dp[2][3], dp[2][3] + dp[3][3]) = 2 ```
3. 得到最优解:
从源点 `s` 到目标点 `t` 的最短路径长度为 `dp[1][3] = 2`。
**最短路径动态规划****简介**最短路径动态规划是一种解决最短路径问题的计算机算法。它使用动态规划技术,将问题分解成一系列子问题,然后逐步求解,最终得到最优解。**算法步骤**最短路径动态规划算法的步骤如下:**1. 初始化:*** 创建一个二维数组 `dp`,其中 `dp[i][j]` 表示从源点 `i` 到目标点 `j` 的最短路径长度。 * 将 `dp[i][j]` 初始化为无穷大,其中 `i != j`。**2. 求解子问题:*** 对于每个中间点 `k`,依次更新 `dp` 数组:* `dp[i][j]` = min(`dp[i][j]`, `dp[i][k]` + `dp[k][j]`)**3. 得到最优解:*** 最终,`dp[source][destination]` 将包含从源点到目标点的最短路径长度。**算法复杂度**最短路径动态规划算法的时间复杂度为 `O(V^3)`,其中 `V` 是图中的顶点数。**适用场景**最短路径动态规划算法适用于以下场景:* 图中不存在负权边 * 顶点数较少 * 需要求解所有点对之间的最短路径**示例**假设我们有一个如下所示的加权有向图:```A (s)/ \1 / \/ \2 B -- 3 C (t) ```其中,`s` 是源点,`t` 是目标点。使用最短路径动态规划算法求解该图的最短路径:**1. 初始化:**``` dp = [[0, 1, inf, inf],[inf, 0, 2, inf],[inf, inf, 0, 3],[inf, inf, inf, 0] ] ```**2. 求解子问题:**``` // 中间点 k = 1 dp[1][3] = min(dp[1][3], dp[1][1] + dp[1][3]) = 3 dp[2][3] = min(dp[2][3], dp[2][1] + dp[1][3]) = 5// 中间点 k = 2 dp[1][3] = min(dp[1][3], dp[1][2] + dp[2][3]) = 5 dp[2][3] = min(dp[2][3], dp[2][2] + dp[2][3]) = 2// 中间点 k = 3 dp[1][3] = min(dp[1][3], dp[1][3] + dp[3][3]) = 5 dp[2][3] = min(dp[2][3], dp[2][3] + dp[3][3]) = 2 ```**3. 得到最优解:**从源点 `s` 到目标点 `t` 的最短路径长度为 `dp[1][3] = 2`。