自己画图真的是一件很累的事情,麻烦大家互相学习引用的同时注明出处,互相学习,不胜感激。

一、最短图路径算法

1、Dijkstra Algorithm

  • 是一个贪心算法
    解决的是带权重的有向图上单源最短路径问题,并且所有权值非负
  • 基本思想:从源点出发,每次选择离源点最近的一个顶点前进,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径

2、Floyd-Warshall Algorithm:动态规划算法

  • 任意两点之间的最短路径,这称为多源最短路径问题

二、Pseudocode

DIJKSTRA(G,w,s)
​
1. INITIALIZE_SINGLE_SOURCE(G,s)
2. S=∅
3. Q=G.V
4. while Q≠∅
5.     u=EXTRACT_MIN(Q)
6.     S=S∪{u}
7.     for each vertex v∈G.Adj[u]
8.         RELAX(u,v,w)
S:已访问过节点集合
Q:保存节点集合(最小优先队列)
u:最小的节点     RELAX(u,v,w):松弛操作

三、推导

  • 简要分为8步,来进行分析和推导
1、初始化

2、找到第一个点A,遍历他,此时,由于A和其他点之间的距离位置,均初始化为∞

3、第一个点A已访问完成,找到他可到达的节点为B和C,此时,B和C节点的具体分别为6和3,均比∞小,故修改到A的最短距离。

4、由于和A相连的点有B和C,此时,按照伪代码第5步来说,需要找到最小的点,接着遍历,故开始遍历C点。与C点相连的点有B、D、E,故此时基于已有的A-C的距离为3的基础,开始计算距离,分别为5、6、7

5、同理可得,取最小的点,开始遍历B,计算与其相关的点的距离。

6、遍历D

7、遍历E

8、至此,到了F点后,所有的点遍历完成。路径如下表所示,一目了然。

四:总结

  • 时间复杂度:

设图的边数为E,顶点数为V

  • 依赖于最小优先队列的实现数据结构
    通过节点1~|V|数组,第V个的值存在第V个位置 :O( V^{2} + E) =O(V^{2})
    使用斐波那契堆 O(Vlg{V} + E) = O( Vlg{V} )

  • 缺陷:当所搜索的图存在非负值时,
    导致u—>v之间存在一条负权回路

[参考资料]

算法导论第三版

写在最后

打个小广告:希望大家关注三个程序猿的成长史
微信号:Technology Army

算法-狄杰斯特拉-Dijkstra Algorithm相关推荐

  1. 最短路径算法-迪杰斯特拉(Dijkstra)算法

    最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...

  2. 最短路径算法---狄杰斯特拉算法

    最短路径算法-狄杰斯特拉算法 一.介绍 这是一种按照路径长度递增的次序产生最短路径的算法,采用的是贪心的思想,对带权图(有向和无向均可)寻找最短路径;该算法对于不含负权的网来说,是目前已知的最快的单源 ...

  3. 算法 --- 狄杰斯特拉(Dijkstra)算法的Java实现

    一.狄杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.  它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止 ...

  4. java数据结构和算法——迪杰斯特拉(Dijkstra)算法

    目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...

  5. 数据结构_图_最短路径_狄杰斯特拉(Dijkstra)算法

    此算法没有采用<数据结构C语言版>中的存储结构,而是采用邻接表的方法存储图,经过改进,还能输出最短路径. "Dijkstra.h" #include<iostre ...

  6. VC++2012编程演练数据结构《31》狄杰斯特拉算法

    狄杰斯特拉算法 Dijkstra(狄杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很 ...

  7. C++狄杰斯特拉算法(Dijkstra)实现最短路问题

    狄杰斯特拉算法(Dijkstra): 基本思想: 看不懂?没关系,i哲来带你通过具体问题理解这个算法 问题描述: 找出从商家到学校的最短路径 多组输入,对于每组数据. 第一行输入N,M,分别表示大街上 ...

  8. c++ 单源最短路径-狄杰斯特拉算法

    文章目录 源码 输出 狄杰斯特拉算法 适用范围:没有负权重的图, 可以有环,有向无向图均可 求解问题:单源最短路径 时间复杂度:V^2 源码 #include <iostream> #in ...

  9. 迪杰斯特拉(Dijkstra)算法解决最短路径问题

    Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...

最新文章

  1. Nature子刊:残留DNA在土壤中含量丰富并且模糊了对土壤生物多样性的估计
  2. Spring整合Struts的几种最常见方式
  3. keil3 安装教程
  4. 关于计算机英语素材,计算机专业英语相关素材.doc
  5. python绘制图像的参数_图像绘制.draw.line():系统错误:新样式getargs格式,但参数不是tup...
  6. php中调用go代码,php中的goto的用法实例(代码)
  7. ·通过wifi_scan学习esp32wifi程序编写
  8. 4份简约实用自我介绍PPT模板,总有一份适合你
  9. 和秋叶一起学PPT之绘制表格(课时七)
  10. QQ群排名技术讲解、实战分析、核心要点 盗引结合篇
  11. mysql绿化,Mysql精简与绿化版本
  12. 利用teigha制作dwg无单位块工具开发
  13. Fortran 中的common,include和module
  14. 如何写好一个2Take1 Lua - Lua的基本语法
  15. 支持OnVif协议的摄像头直播推流php
  16. Android设置自定义字体
  17. 多个搜索引擎搜索网站,提高搜索效率,快人一步
  18. 2015百度之星初赛(1)1006 旋转卡壳
  19. java使用Ip连接Oracle失败
  20. JavaScript旋转数组

热门文章

  1. mybatis源码之执行insert代码分析
  2. 基于 Kintex-7 FPGA + Nvidia TX2 = 16通道高速ADC数据采集系统
  3. apollo学习之---如何标定车辆油门和制动
  4. Kmeans算法及其示例
  5. 【备查】office 2010 安装
  6. 中兴阅读:你的移动阅读解决专家,助纸媒们一臂之力
  7. 学习素材之USART篇——通过使用STM32与ESP8266(esp-01s)连接阿里云系列操作来了解USART协议和寄存器操作
  8. 每天都要刷碗的清贫博士后,生活捉襟见肘,国外华人也不容易
  9. xen EDD information not available
  10. C#跨站脚本防注入SXX