图之每对顶点最短路径

一、算法

每对顶点最短路径解决比如每对城市间的距离。
这里写图片描述

二、基于矩阵的动态规划算法

这里写图片描述
这里写图片描述
这里写图片描述
以上分析了满足动态规划条件。
  在寻找子结构时是从后向前分析。首先定义父问题的最短路径,然后在减去最后一个顶点变成子问题的最短路径。在从后向前分析是我们的子问题路径总是在那条最优路径上减去最后一个顶点。然后在我们从前往后进行算法时我们考虑的却是所有子问题。
  这里写图片描述
  比如说我们假设上图上面一条路径为最短路径,下面一条路径为次短路径。那么我们在分析最优解时只是在逐渐缩短上面那条路径顶点个数来分析问题。而最后换算到算法自底向上计算时我们就要同时考虑上下两条路径,因为不算到最后,算法是不可能判断出那条路径最短。
  整个算法我们可以理解为:
  我们首先假设顶点i与顶点j路径之间只有1个边,但是不知道具体是哪个边,所以我们把所有其他边都试探一下取路径最短的。
  这里写图片描述
  然后假设顶点i与顶点j路径之间只有2个其他边,在第一次假设的基础上,我们只需在第一次假设的基础上再添加一个其他边(理解为在已有一条边最优解后再在此最优解后面添加一个其他边)进行试探,取路径最短的,同时我们还需要与(顶点i与顶点j路径之间只有1个其他边最短路径)进行比较,取最小值。
  然后假设顶点i与顶点j路径之间只有3个其他节点,
  ……
  最后假设顶点i与顶点j路径之间只有n-1个其他边。n个顶点在i和j之间最多产生n-1条边。

循环中的lij和wij其实就是矩阵中的元素。由于我们只关注最终结果,也就是n-1后,所以我们可以按以下算法减少减速时间:
这里写图片描述
这里写图片描述

三、Floyd-Warshall算法

对于弗洛伊德算法感觉数据结构上解释比较好理解:
这里写图片描述
这里写图片描述
而算法导论就是按照动态规划来分析的,比较数学化:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
  如果说《二》中算法分析对象是边的话,弗洛伊德分析的就是顶点。但是在分解出子结构时都有一点:
 《二》中减少的是最后一条边,而弗洛伊德算法减小的是顶点的大小。它们都有个特点,利于循环。边数从最后一条减到第一条,顶点从最大到最小,它们都是能够用算法循环的。
  弗洛伊德算法自底向上理解时同《二》中相同:先假设i和j之间只有一个值最小的顶点,然后在逐渐增大顶点值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值