首页 > 编程语言 >路径分析算法—基于Floyd算法的路径分析

路径分析算法—基于Floyd算法的路径分析

时间:2024-11-07 14:44:35浏览次数:4  
标签:无穷大 路径分析 城市 距离 算法 Floyd 短距离

原文链接:路径分析算法—基于Floyd算法的路径分析 – 每天进步一点点

Floyd 算法是一种用于在已知给定的加权图中求多源点之间最短路径的算法。它与Dijkstra 算法类似,不同点在于Dijkstra计算的是单源点之间的最短路径。Floyd算法是在数学建模领域和日常工作中使用频率较高的路径分析算法。

1.应用示例:任意两个城市之间的最短路径

在某个旅行团举办的城际旅行活动中,计划旅行四座城市,分别是A城、B城、C城和D城,给出了如图3-2所示距离关系图,城与城的边表示城市的直接距离,城与城之间的去程距离和返程距离不一定相等,甚至可能存在只有去程没有直接返程的情况。

为了便于制定旅行计划,旅行团的导游希望在出发之前就能够了解和确定A城、B城、C城和D城中任意两个城市之间的最短距离。

2.Floyd思想

Floyed的核心思想也是基于动态规划理论,过程比较简单。

设Disti,j,k 表示为i点到j点过程中以(1…k)集合中的节点为中间节点的最短路径长度,则:

(1)若最短路径经过点k,则Disti,j,k =Disti,k,k-1 + Distk,j,k-1

(2) 若最短路径不经过点k, 则Disti,j,k = Disti,j,k-1

于是Disti,j,k=min(Disti,j,k-1 ,Disti,k,k-1+Distk,j,k-1)

Floyd算法的时间复杂度为O(n3),空间复杂度为O(n2)

3.基于Floyd算法的最短距离

根据上图给出的路径信息,我们尝试画出表格,约定同一城市的距离为0,不可直接到达的城市距离为最大值,根据城市路径信息生成的城市距离如下表:

  A城 B城 C城 D城
A城 0 2 6 4
B城 无穷大 0 3 无穷大
C城 7 无穷大 0 1
D城 5 无穷大 12 0

根据上表,如果要使任意两点之间的距离最短,如A城、B城两个点,则引入第三个点K城,使A城到K城的距离加上K城到B域的距离之和小于A城到B城的直接距离,则K城可能是C城或者D城,如果还有更多城市,那么K城有可能是更多城市之间的距离之和,A城到K城的距离则可以视为A城到B城最短距离的子问题。因此,存在如下确定的三种情况。

  • 当任意两个城市之间不存在任何一个第三城市时,则这两个城市之间的距离则就是最短距离。
  • 如果两个城市之间存在一个城市使得两个城市之间的距离最短,则它们分别到达该中间城市的距离应当是最短距离,即依赖于第一种情况。
  • 如果两个城市之间存在两个或者多个城市时,那么它可以拆分两个或者多个第二种情况的问题。


基于上述判定,解决步骤如下。

(1)确定当两个城市之间不存在任何一个第三城市时,城市之间的最短距离表如下:

  A B C D
A 0 2 6 4
B 无穷大 0 3 无穷大
C 7 无穷大 0 1
D 5 无穷大 12 0

(2)求只允许通过A城作为中间城市后的城市最短距离如下表,其中,带下划线的数值表示更新后的城市之间的最短距离.

  A B C D
A 0 2 6 4
B 无穷大 0 3 无穷大
C 7 9 0 1
D 5 7 11 0

(3)在上述的基础上,继续求通过A城以及B城作为中间城市后的最短距离如下:

  A B C D
A 0 2 5 4
B 无穷大 0 3 无穷大
C 7 9 0 1
D 5 7 10 0

(4)同理,计算求通过A城,B城,C城作为中转城市后的最短距离如下:

  A B C D
A 0 2 5 4
B 10 0 3 4
C 7 无穷大 0 1
D 5 无穷大 10 0

(5)最后将所有城市都视为中间城市,则任意两个城市之间的最短路径如下:

  A B C D
A 0 2 5 4
B 9 0 3 4
C 6 8 0 1
D 5 7 10 0

上述过程的流程是当最开始只允许经过A城市作为中间城市的最短路径,然后依次A城和B城同时作为中间城市时,是一种典型的动态规划思想,最终求得上表即为最终的任意两个城市之间的最短距离.

 

标签:无穷大,路径分析,城市,距离,算法,Floyd,短距离
From: https://www.cnblogs.com/longkui-site/p/18532213

相关文章

  • 路径分析算法—基于A*算法的路径搜索
    原文链接:路径分析算法—基于A*算法的路径搜索–每天进步一点点A*算法擅长解决静态路径中最短路径问题,而又不同于Dijkstra算法和Floyd算法,该算法综合了广度优先搜索(BreadthFirstSearch)和Dijkstra算法的优点:在进行启发式搜索提高算法效率的同时,可以保证找到一条最优路径(基于评......
  • HintonLeCunBengio:AI算法的奠基者
    深度学习、神经网络、卷积神经网络、循环神经网络、GeoffreyHinton、YannLeCun、YoshuaBengio1.背景介绍人工智能(AI)的蓬勃发展,离不开深度学习的革命性突破。深度学习,作为机器学习的一个分支,通过构建多层神经网络来模拟人类大脑的学习机制,取得了令人瞩目的成就。而推......
  • 深入理解PPO算法:从原理到实现
    目录1.引言2.PPO算法的背景3.PPO算法的核心思想4.PPO算法的实现步骤 4.1PPO代码实现 4.2代码说明5.为什么PPO效果如此出色? 5.1PPO的优势函数与GAE 5.2PPO的变体:PPO-Clip和PPO-KL6.PPO算法的应用场景7.总结1.引言        在强化学习领域,PPO(P......
  • 【KMP算法】
    目录BF算法KMP算法BF算法F算法,即暴力(BruteForce)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后......
  • α-shape算法曲面重建
    目录1原理介绍α-shape的基础概念数学公式推导2.1外接圆半径2.2根据α参数筛选三角形2.3构建α-shape2.4参数调整与优化3α-shape的构建步骤4示例代码        取点云的凹边界是计算几何中的一个经典问题。凹边界与凸边界不同,它能捕捉到数据的细......
  • Java深度优先搜索(DFS)算法实现
    标题:Java深度优先搜索(DFS)算法实现引言:深度优先搜索(Depth-FirstSearch,DFS)是一种常用的图遍历算法,它通过递归地遍历图中的每个顶点,来寻找特定的路径或解决某些问题。本篇博客将介绍如何用Java语言实现深度优先搜索算法。算法思想:深度优先搜索算法的基本思想是先访问一个......
  • c++ Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) Algorith
            对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所有......
  • 常考的排序算法
    冒泡排序#include<iostream>#include<string>usingnamespacestd;//voidShellsort(intA[],intn)//{//   intd,i,j;//   for(d=n/2;d>=1;d=d/2)//   {//      for(i=d+1;i<=n;i++)//      {//     ......
  • JavaScript Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) A
             对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所......
  • 基于springboot框架在线生鲜商城推荐系统 java实现个性化生鲜/农产品购物商城推荐网站
    基于springboot框架在线生鲜商城推荐系统java实现个性化生鲜/农产品购物商城推荐网站爬虫、数据分析、排行榜基于协同过滤算法推荐、基于流行度热点推荐、平均加权混合推荐机器学习、大数据、深度学习OnlineShopRecommendEx一、项目简介1、开发工具和使用技术IDEA,jdk......