【算法杂谈】LJX的迪杰斯特拉算法报告
迪杰斯特拉(di jie qi)算法
这里有一张图:
假设要求从1号节点到5号节点的最短路。那么根据迪杰斯特拉算法的思想,我们先看:
节点1,从节点1出发的一共有3条路,分别是1-6、1-3、1-2。然后我们分别看每条路的权值,发现1-6的权值为14,记录下来、1-3的权值为9,记录下来、1-2的权值为7,记录下来。我们发现好像不能再从1号节点发现什么了,所以,我们把它out掉。
接着按顺序看2号节点,从节点2发出了2条路分别是2-3与2-4,我们接着向计算1号节点一样计算2号节点。先计算2-3,权值为10。咦?我们好像已经在计算1号节点的时候标记过了,也就是说现在到3号节点有两种方案,分别是1-3与1-2-3,通过比较,我们发现9〉7+10,所以标记不变,依旧是9。接下来看2-4,没有被标记过,记录15。Out掉节点2
然后就该节点3了,我们发现有两条路,且都没被标记过,分别记录2与11,out掉节点3
节点4有两条路,发现从3-4更方便标记11。Out掉。
节点6有两条路,3-6方便标记为2。Out掉。
最后5号节点有两条路从4到5最短,5号节点标记为6。
我们达到了光辉的顶点,发现最后路径是1-3-6-5和为20。
迪杰斯特拉算法具有明显的贪心特征,通过每个节点去最优值的过程我们称之为“松弛”,松弛之后,答案显而易见。
实际上对于松弛过程的模拟,核心代码只有两行:
if(dis[v]>dis[u]+e[u][v])
dis[v]=dis[u]+e[u][v];
(咦,你的核心代码为什么没有找最近的节点?哈哈思(sheng)考(lve))
迪杰斯特拉算法的局限性
不难看出(好粗暴的词汇)它的时间复杂度为O((M+N)logN)空间复杂度为O(M)看起来还不错,但它无法解决权值为负数的情况,所以用前先审题哦。
【算法杂谈】LJX的迪杰斯特拉算法报告的更多相关文章
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP
文转:http://blog.csdn.net/zxq2574043697/article/details/9451887 一: 最短路径算法 1. 迪杰斯特拉算法 2. 弗洛伊德算法 二: 1. 迪 ...
- C#迪杰斯特拉算法
C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...
- C# 迪杰斯特拉算法 Dijkstra
什么也不想说,现在直接上封装的方法: using System; using System.Collections.Concurrent; using System.Collections.Gener ...
- 迪杰斯特拉算法——PAT 1003
本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...
- dijkstra算法(迪杰斯特拉算法)
dijkstra算法(迪杰斯特拉算法) 用途:有向图最短路径问题 定义:迪杰斯特拉算法是典型的算法,一般的表述通常有两种方式,这里均采用永久和临时标号的方式,该算法要求图中不存在负权边 用永久和临时标 ...
- 迪杰斯特拉算法c语言实现
/*http://1wangxiaobo@163.com 数据结构C语言版 迪杰斯特拉算法 P189 http://1wangxiaobo@163.com 编译环境:Dev-C++ 4.9.9.2 ...
- HDU6166-Senior Pan-Dijkstra迪杰斯特拉算法(添加超源点,超汇点)+二进制划分集合-2017多校Team09
学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memor ...
随机推荐
- oracle---jdbctest--laobai
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import ora ...
- BZOJ2510: 弱题
求k时刻一个标号转移到各位置的概率,最后枚举每个标号加权求期望.可以发现转移矩阵是循环矩阵,因此乘法是n^2的.另外这个乘法是圆周卷积的形式,然后就作死写了发fft,发现精度升天了= = #inclu ...
- PHP WAMP 文件上传 及 简单的上传预览
...... 使用特殊的表单类型file, 主(上传)页面: <form action="chuli.php" method="post" enctype ...
- IBatis 批量插入数据之SqlBulkCopy
public void AddLetters(IList<int> customerIds, string title, string content, LetterEnum.Letter ...
- js 时间相关函数
实例: <!doctype html> <html> <head> <meta charset="utf-8"> <title ...
- Daily Build
Daily Build 是一件非常有意义的事情,也是敏捷开发中关于 “持续集成” 的一个实践.Daily Build 对于开发来说有如下好处: 保证了每次 check in 的代码可用,不会造成整个工 ...
- [转]Oracle存在则更新,不存在则插入
原文:http://hi.baidu.com/mawf2008/item/eec8c7ad1c5be5ae29ce9da6 merge into a using bon (a.a=b.b)when m ...
- postgresql:pgadmin函数调试工具安装过程
通过安装第三方插件pldebugger,可实现在pgadmin客户端对函数设置断点.调试,具体过程如下: 1.下载pldebugger安装包:http://git.postgresql.org/git ...
- 使用行为树(Behavior Tree)实现游戏AI
——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策 ...
- 新语言代码高亮及Windows Live Writer插件开发
最近在博客园做一些学习笔记.一个是看apple的swift官方书,另外一个是随学校课堂(SICP)学习scheme. 这两种语言都谈不上普及(或者说swift太新).博客园原来的windows liv ...