最短路径问题因为其问题的普遍性,以及应用的实际性,不仅是数据结构的热点问题,也是数学信息学科、计算机学科、地理信息学科等学科的一个研究热点。由于科学技术的不断进步,使得应用数学中的图论与计算机算法与结构结合,出现了不一样的较短路径算法。最短路径即点到点之间的路径是最短的,因此可以看作计算机中的图片问题,即如何从图片上找到两个顶点的路径所经过的最短路径,而最短路径算法也就提供了如何寻找某两点之间最短距离的思路。

最短路径算法介绍

  最短路径是图论与复杂网络分析中的一个经典问题。最短路径算法则是将所需要求的问题,转化为图论问题,并通过相关的操作,最终得到问题所求的最短路径的过程。本文采用一个由n个节点和m条边组成的图G(V,E)作为路径图,V集合存放G中所有的顶点,E集合存放G中所有的边,将顶点之间存在的边的权值设为w。
  (一)最短路径的基本概念
  最短路径问题是求由源点到达图中其他任一顶点的最短路径,即在由节点构成的路径图中,找出一条经过路径的权值总和最短的路径。在图论研究中,假设将设置为源点,终点设为Vj,则寻找最短路径的形式有以下几种:
  1、源点确定,求最短路径。
  2、终点确定,求最短路径则需要进行讨论分析;若在无向图中,终点确定可以转化为顶点确定的问题来进行解决;若在有向图中,就需要将路径方向反转,通过找起点来确定此时终点确定下来的最短路径。
  3、源点终点都确定,直接进行寻找两点之间的最短路径。
  4、全局最短路径,可以运用以上三种方法,求出任意两点之间的最短路径。
  (二)Diikstra算法
  Diikstra算法运用贪心策略的思想。首先,每次找到离源点最近的一个顶点,记录源点到此顶点的距离,并标记此顶点,接着查找未标记顶点到源点的距离,与通过标记点经过的距离进行比较,最终找到源点与其他各个顶点之间的最短路径。
  Diikstra算法的具體步骤如下:
  1、将图中所有顶点分为两类,分别存放在P和Q两个集合中。其中P集合存放的顶点是已经求出了与源点存在最短路径的顶点;Q集合存放的是未被求出与源点存在最短路径的顶点,同时设置源点到自身之间的距离为0,源点与其他顶点之间存在直接边,则设置源点到此顶点直接距离为该边权值V,而把源点与顶点之间不存在直达边的距离设置为∞;
  2、已知源点到自身的距离为0是默认的,故直接将源点放入P中;
  3、在Q集合寻找距离源点最近的顶点Vi,并将顶点Vi放入P中,表示以求得源点到顶点Vi之间的最短路径;
  4、重复第3步,将Q集合中的点遍历完毕,算法结束,源点到图中所有顶点之间的最短路径也查找完毕。
  (三)Floyd算法

三、最短路径算法研究

  本文使用了Dijkstra算法和Floyd算法,针对具体问题建立模型,并通过两种算法的不同算法结果来进行分析比较。
  (一)问题分析
  某公司在六个城市有分公司,记为ci,则从ci到cj的直接航程票价如表3.1.1所示(∞表示无直接航路),要求找到一个城市到其他城市间票价最便宜的路线图。

表1 某公司总航线表

  根据表1得到某公司总航线图如图1所示,其中权值代表ci到cj的直接航程票价。因此上述问题就可转换成图论研究中的最短路径问题。因为起点和终点都不确定,则需对全局最短路径进行求解。

图1 某公司总航线图

  (二)模型的建立和求解
  通过问题分析,本文基于MATLAB平台,使用Dijkstra算法和Floyd算法对上述全局最短路径问题进行求解,从而得到一个城市到另一个城市之间的最便宜票价。
  1、Dijkstra算法
  假设以第一个城市c1为源点,求源点c1到除源点外的顶点的最短路径,首先用矩阵存放各边权值的邻接矩阵,行向量pb、index1、index2、d分别用来存放标号信息、标号顺序、标号顶点索引、最短通路的值。
  根据上述设置和数据求第一个城市到其他城市的最短路径的核心代码如下:
  while sum(pb)
  m=find(pb==0):
  d(m)=min(d(m),d(temp)+a(temp,m)):
  tmpb=find(d(m)==min(d(m))):
  temp=m(tmpb(1)):
  pb(temp)=1;
  indexl=[index1,temp];
  index=index1(find(d(index1)==d(temp)-a(temp,index1))):

if length(index)>=2
  index=index(1):
  end
  index2(temp)=index:
  end
  由此,可得出运用Dijkstra算法求解出的c1至其他城市的最短路径如图所示。

图2 Dijkstra算法实例cl源点最短路径图

  2、Floyd算法
  首先初始化数据,设置无穷大值M=100000,矩阵f存放表3.1.1的数据值,一个与矩阵f同等大小的全零矩阵path,用于存放任意两个顶点最短路径的中间节点k。
  求任意两城市之间的最短路径的核心代码如下:

四、仿真及结果对比分析

  (一)结果分析
  通过matlab仿真平台,以c1为源点,使用Uijkstra算法和Floyd算法可以得到如图3和图4的结果,从图中可知Dijkstra算法得到的是单原点到其他顶点的数据,而Floyd算法最后得出的path表格可以查询任意两点之间的节点,从而得到任意两点间的最短路径。

图3 Dijkstra算法最短路径图 图4 Floyd算法path图

  相对于Diikstra算法,Floyd算法更加全面与简洁,效率比n次的Dijkstra算法要高,因此Floyd算法更适用于多源最短路径,可以算出任意两个顶点之间的最短距离。
  (二)两种算法比较
  首先从算法思想的角度出发,Dijkstra算法是在寻找最短路径时进行串行的寻找模式,虽然做到了局部最优,但不能实现整体最短,除此之外Diikstra算法的代码冗长繁瑣,效率较低;而Floyd算法较简洁,效率高。
  在执行上,Diikstra算法会进行两次遍历,一是先将所有与源点相连的点作为中间点遍历;二是在中间点的基础上对相邻且未标记的点进行遍历。所以Dijkstra算法的时间复杂度和空间复杂度都是O(n*n);Floyd算法则经过了第一次对中间点k遍历,第二次对源点i遍历,最后对终点j的三次遍历,时间复杂度是O(n*n*n)。因此Floyd算法时间复杂度高,不适合计算大量数据。

最短路径算法【matlab仿真】相关推荐

  1. ICP算法MATLAB仿真

    2022.4.15再次附上数据satellite.txt新链接: 链接:https://pan.baidu.com/s/1mEN-FQbTlHOWfxCHyu0Dxg 提取码:02i4 (永久有效) ...

  2. Matlab算法DSP移植验证,DSP计算机作业 自适应噪声抵消LMS算法Matlab仿真

    [实例简介] 自适应噪声抵消LMS算法Matlab仿真,DSP计算机作业 数字信号处理 自适应 1) 借助MATLAB画出误差性能曲面和误差性能曲面的等值曲线: 2) 写出最陡下降法, LMS算法的计 ...

  3. 【ISAR成像定标方法(1)—转台目标的RD成像算法MATLAB仿真】

    目录 前提介绍 ISAR成像基本流程 ISAR成像转台模型与回波建模 转台模型 发射信号与回波信号分析 转台目标RD成像算法 转台目标RD成像的仿真实验与分析 结语 前提介绍  ISAR成像定标方法的 ...

  4. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]...

    <北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLA ...

  5. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)...

    <北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)(9 ...

  6. 卫星测控matlab程序,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序).docx...

    PAGE 4 北斗卫星导航信号串行捕获算法MATLAB仿真报告 原理 卫星导航信号的串行捕获算法如图1所示. 图1 卫星导航信号的串行捕获算法 接收机始终在本地不停地产生对应某特定卫星的本地伪码,并且 ...

  7. 一个简单的基于形态学处理的报纸图像版面分割算法matlab仿真

    目录 一.理论基础 二.部分MATLAB仿真 三.仿真结论分析 一.理论基础 图像分割就是把图像分成若干个特定的.具有独特性质的区域并提出感兴趣目标的技术和过程.它是由图像处理到图像分析的关键步骤.现 ...

  8. 条形碎片图纸的自动拼接规则算法matlab仿真

    目录 1.算法概述 2.仿真效果 3.matlab仿真源码 1.算法概述 破碎文件的拼接在司法物证复原.历史文献修复以及军事情报获取等领域都有着重要的应用.目前发现对碎纸片的拼接大部分由人工完成,准确 ...

  9. 基于Gabor滤波器的指纹图像增强处理算法matlab仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 Gabor 变换是一种加窗短时 Fourier 变换(简单理解起来就是在特定时间窗内做 Fourier 变换),是短时 Fou ...

  10. 基于Frangi滤波的视网膜静脉血管检测算法matlab仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 随着图像数字化处理的快速发展,医学图像处理越来越受到人们的广泛关注.研究表明,人体许多全身性疾病都与眼底血管的异常有着密切的联 ...

最新文章

  1. 腾讯 JDK 11 正式开源,高性能、太牛逼啦!
  2. Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
  3. php实现qq相册功能,使用javascript如何实现QQ空间相册展示
  4. 第一百九十九节,jQuery EasyUI,Panel(面板)组件
  5. 苹果 App Store 申请和管理相关知识
  6. OpenCV推断onnx格式目标检测模型(SSD)(附完整代码)
  7. java stringutils_Java 笔记----- StringUtils 拼接字符
  8. html 链接section,HTML section 标签
  9. 目标检测————主干网络是否应该选用DenseNet(提问)
  10. Mac电脑不能识别文本和命令的解决方法
  11. 【php写日志】php将日志写入文件
  12. Jquery CSS 操作 - height() 方法
  13. 大批量数据导出到Excel的实现
  14. HIBERNATE - 符合Java习惯的关系数据库持久化
  15. 在线caj免费转换Word格式
  16. 【渝粤教育】电大中专中药学基础 (2)作业 题库
  17. 阿姆斯特朗数——————还记得大明湖畔的水仙花么(笑)
  18. python打开文件对话框
  19. 在日本名古屋举行的AACSB亚太地区年会将WRDS-SSRN创新奖颁发给南京大学
  20. python数据分析基础试题及答案_Python数据分析与数据可视化题库免费期末考试2020答案...

热门文章

  1. 电表MID计量CE认证-EN50470
  2. 作业-eclipse断点调试
  3. 2023最新网络安全毕业设计题目选题大全
  4. 计算机信息系统安全保护等级划分准则
  5. 基于springboot+Redis的前后端分离项目(七)-【黑马点评】
  6. MFC Windows 程序设计[九十四]之精美的时钟(附源码)
  7. 搜索的策略(3)——觐天宝匣上的拼图
  8. mac版的Vscode安装与c语言配置(win版可借鉴)
  9. python月度员工绩效考核管理系统vue
  10. 伽罗瓦理论笔记暂记1.1