动态规划之求最短路径(java版)
2017-04-13 19:32
555 查看
求最短路径众所周知有Dijistra算法、Bellman-ford等,除了这些算法,用动态规划也可以求出最短路径,时间复杂度为O(n^2),跟没有优化的Dijistra算法一样(优化后的Dijistra算法时间复杂度为O((m+n)lgn))。
首先这里有15个结点,表现出来的矩阵为
左侧1-15表示前一个节点,最上面一行1-15表示后一个节点,记这个图的矩阵为P,那么P[0][1]==5表示节点0与节点1相连,路径长度为5。那么我们如何利用动态规划来求解最短路径?
首先我们需要把整个问题转换成小的子问题,利用小的子问题的最优解求出整个问题的最优解。
我们的目的是求0-15之间的最短路径,由图可知与节点15相连的是结点14和节点13,假设我们已经求出0-13的最短路径的值D13和0-14的最短路径的值D14,那么我们只需要比较D13+d(13-15)和D14+d(14-15)的大小就可以知道从哪个节点出发到节点15的路径最短。按照这个思想一直往前推,推到节点0时结束,自然就求出了节点0-节点15的最短路径,这个思路是递归的,如果用递归的方法,时间复杂度很高,当然你也可以用备忘录,记录已经计算过的值,我这里将递归转换成迭代。
我们先定义一个类class Node,里面存储节点的序号、从0到这个节点的最短路径的值、前一个节点的序号。
图的矩阵自己存一下,我这里不写了
最后将n[15].value打印出来就是最短路径的值,再根据parent的值往前找就得到最短路径的解,当然这个例子有不同的路径的解,虽然值一样,我这里只给了一种。
首先这里有15个结点,表现出来的矩阵为
左侧1-15表示前一个节点,最上面一行1-15表示后一个节点,记这个图的矩阵为P,那么P[0][1]==5表示节点0与节点1相连,路径长度为5。那么我们如何利用动态规划来求解最短路径?
首先我们需要把整个问题转换成小的子问题,利用小的子问题的最优解求出整个问题的最优解。
我们的目的是求0-15之间的最短路径,由图可知与节点15相连的是结点14和节点13,假设我们已经求出0-13的最短路径的值D13和0-14的最短路径的值D14,那么我们只需要比较D13+d(13-15)和D14+d(14-15)的大小就可以知道从哪个节点出发到节点15的路径最短。按照这个思想一直往前推,推到节点0时结束,自然就求出了节点0-节点15的最短路径,这个思路是递归的,如果用递归的方法,时间复杂度很高,当然你也可以用备忘录,记录已经计算过的值,我这里将递归转换成迭代。
我们先定义一个类class Node,里面存储节点的序号、从0到这个节点的最短路径的值、前一个节点的序号。
class node{ public int number; //value是指从0到这个节点总共要走多远,执行算法前将value的值初始化为无穷大 public int value; public int parent; }
图的矩阵自己存一下,我这里不写了
//从矩阵a的第一行开始,一行行找相连的节点 for(int i = 0;i<16;i++){ for(int j = 0;j<16;j++){ //找到了相连节点 if(a[i][j]!=0){ //上一个节点的最短路径的值+与下一个节点相连路径上的值 d = n[i].value+a[i][j]; //判断是否比原先的值要小,如果小就将0-j节点的长度替换 if(d<n[j].value){ n[j].value = d; //记录前一个节点的序号 n[j].parent = i; } } } }
最后将n[15].value打印出来就是最短路径的值,再根据parent的值往前找就得到最短路径的解,当然这个例子有不同的路径的解,虽然值一样,我这里只给了一种。
相关文章推荐
- 动态规划在求解全源最短路径中的应用(JAVA)--Floyd算法
- 动态规划之所有点对的最短路径问题(Floyd算法)
- 动态规划、最短路径、Floyd算法
- 动态规划之最短路径浅解
- 动态规划 之最短路径问题
- 算法:动态规划2 数字三角形路径最短
- java-web遗传算法最短路径规划
- Minimum Path Sum 求方格总从左上到右下的最短路径 简单动态规划
- 每对顶点间最短路径;Floyd算法;写的很乱,判断太多了;没有用动态规划过程中构建路径;用O(n三次方)时间构造路径;
- 81.动态规划求最短路径
- 从最短路径谈动态规划和贪心算法
- 动态规划---->每对定点之间的最短路径 Floyd(弗洛伊德)算法
- 动态规划(4)详细讲解各最短路径算法及比较
- 讨论动态规划的优点 - 相比于穷举法 - (以最短路径为例)
- 动态规划-点数值三角形的最优路径搜索 java
- 动态规划题——最短路径问题
- tsp的动态规划实现,最短长度和最短路径
- java动态规划最小路径和
- 81.动态规划求最短路径
- 动态规划之最短路径