算法-狄杰斯特拉-Dijkstra Algorithm
自己画图真的是一件很累的事情,麻烦大家互相学习引用的同时注明出处,互相学习,不胜感激。
一、最短图路径算法
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相关推荐
- 最短路径算法-迪杰斯特拉(Dijkstra)算法
最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...
- 最短路径算法---狄杰斯特拉算法
最短路径算法-狄杰斯特拉算法 一.介绍 这是一种按照路径长度递增的次序产生最短路径的算法,采用的是贪心的思想,对带权图(有向和无向均可)寻找最短路径;该算法对于不含负权的网来说,是目前已知的最快的单源 ...
- 算法 --- 狄杰斯特拉(Dijkstra)算法的Java实现
一.狄杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止 ...
- java数据结构和算法——迪杰斯特拉(Dijkstra)算法
目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...
- 数据结构_图_最短路径_狄杰斯特拉(Dijkstra)算法
此算法没有采用<数据结构C语言版>中的存储结构,而是采用邻接表的方法存储图,经过改进,还能输出最短路径. "Dijkstra.h" #include<iostre ...
- VC++2012编程演练数据结构《31》狄杰斯特拉算法
狄杰斯特拉算法 Dijkstra(狄杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很 ...
- C++狄杰斯特拉算法(Dijkstra)实现最短路问题
狄杰斯特拉算法(Dijkstra): 基本思想: 看不懂?没关系,i哲来带你通过具体问题理解这个算法 问题描述: 找出从商家到学校的最短路径 多组输入,对于每组数据. 第一行输入N,M,分别表示大街上 ...
- c++ 单源最短路径-狄杰斯特拉算法
文章目录 源码 输出 狄杰斯特拉算法 适用范围:没有负权重的图, 可以有环,有向无向图均可 求解问题:单源最短路径 时间复杂度:V^2 源码 #include <iostream> #in ...
- 迪杰斯特拉(Dijkstra)算法解决最短路径问题
Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...
最新文章
- Nature子刊:残留DNA在土壤中含量丰富并且模糊了对土壤生物多样性的估计
- Spring整合Struts的几种最常见方式
- keil3 安装教程
- 关于计算机英语素材,计算机专业英语相关素材.doc
- python绘制图像的参数_图像绘制.draw.line():系统错误:新样式getargs格式,但参数不是tup...
- php中调用go代码,php中的goto的用法实例(代码)
- ·通过wifi_scan学习esp32wifi程序编写
- 4份简约实用自我介绍PPT模板,总有一份适合你
- 和秋叶一起学PPT之绘制表格(课时七)
- QQ群排名技术讲解、实战分析、核心要点 盗引结合篇
- mysql绿化,Mysql精简与绿化版本
- 利用teigha制作dwg无单位块工具开发
- Fortran 中的common,include和module
- 如何写好一个2Take1 Lua - Lua的基本语法
- 支持OnVif协议的摄像头直播推流php
- Android设置自定义字体
- 多个搜索引擎搜索网站,提高搜索效率,快人一步
- 2015百度之星初赛(1)1006 旋转卡壳
- java使用Ip连接Oracle失败
- JavaScript旋转数组
热门文章
- mybatis源码之执行insert代码分析
- 基于 Kintex-7 FPGA + Nvidia TX2 = 16通道高速ADC数据采集系统
- apollo学习之---如何标定车辆油门和制动
- Kmeans算法及其示例
- 【备查】office 2010 安装
- 中兴阅读:你的移动阅读解决专家,助纸媒们一臂之力
- 学习素材之USART篇——通过使用STM32与ESP8266(esp-01s)连接阿里云系列操作来了解USART协议和寄存器操作
- 每天都要刷碗的清贫博士后,生活捉襟见肘,国外华人也不容易
- xen EDD information not available
- C#跨站脚本防注入SXX