说明:

本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节
本人算法菜鸟一枚,提供的证明仅是自己的思路,不保证正确,仅供参考,若有错误,欢迎拍砖指正
 
-------------------------------------------
 
Dijkstra算法和Floyd算法用于求解连通图中任意两个顶点之间的最短路径
 
Dijksra算法从一个顶点v0出发,每次为一个顶点vi确定到达v0的最小路径
 
Dijkstra算法用distance[i]记录顶点vi到v0的最短路径,用path[i]记录在最短路径中vi顶点的前继顶点,另外再用found[i]来标志顶点vi的最短路径是否已经确定
 

distance[]初始化为v0在邻接矩阵中的对应行,distance[i]记录了 以目前已经探明最小路径的顶点(以下简称已定顶点)(包括v0)为前继顶点 的所有路径中最短的路径长

Dijkstra算法做出了这样一个判断:每次从尚未确定最小路径的顶点中(一下简称 未定顶点)挑选一个distance值最小的顶点vj,则该顶点对应的distance[j]必定是vj的真实的最小路径长度,下面证明这个判断:
 
对于任意一个未定顶点,其最小路径中必定至少包含一个已定顶点(至少会包含v0),则该路径中至少有一个未定顶点vm以一个已定顶点vn为前继顶点,而length(v0-vn-vm) >= diatance[m] >= distance[j],也就说任意一个未定顶点的最小路径长必定不小于distance[j],由此就可以确定distance[j]必定是vj真实的最小路径长
 
Dijkstra算法的复杂度是n^2,每次确定一个顶点的最短路径,而确定一个顶点的最短路径需要遍历并比较distance数组,并且确定之后需要遍历更新distance数组,所以是n*n的开销
 
--------------------------------
 
Floyd算法的执行逻辑甚为简单,包含了三个循环的嵌套;其思路是遍历图中的每一个点,针对这个点vm,遍历图中任意两个顶点的两两组合vi和vj,比较vi和vj当前的最短连接和通过vm的连接的大小,并且把新的当前最短连接重置为其中更小的那个值;这样一圈遍历下来,就可以保证得到图中任意两个顶点之间的最小距离
 
这看起来并不靠谱,因为在最初vi和vm、vj和vm之间的最小路径都尚未安全确定下来的时候,如何能够马上就拿来比较,这时的比较不应该是无效的吗?
 
但是事实上并不需要每一步都实现严格的有效的比较,因为全部遍历下来之后,肯定会发生一次有效的比较
 
下面给出证明:
假设vi、vj之间的最小路径一共包括x个其它顶点,显然这条路径也确定了其中任何两个顶点之间的最小路径,否则比如vm、vn之间有不属于当前路径的最小子路径,则用该子路径替代当前的子路径,就可以得到更小的vi、vj之间的最小路径
 
对于这条路径上的任意三个相邻(至少会有一组相邻三顶点)顶点vm1、vm2、vm3,当遍历到vm2时,显然此时vm1-vm2-vm3这条最小子路径就会被连接起来(因为这条路径必定是vm1到vm3的最小子路径);事实上,当遍历到这条最小路径上的任意一个顶点的时候(除了vi、vj),就会把相邻的两个顶点连接起来;当所有顶点都被遍历之后,这x个顶点也必定已经把其在最小路径上相邻的顶点全都连接完毕,包括分别在两端的vi和vj顶点;换句话说,vi和vj之间的最小子路径必定已经被找到
 
Floyd算法的复杂度为n^3

Dijkstra算法和Floyd算法的正确性证明的更多相关文章

  1. 【转载】Dijkstra算法和Floyd算法的正确性证明

      说明: 本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节 本人算法菜鸟一枚,提供的证明仅是自己的思路,不保证正确,仅供参考,若有错误,欢迎拍砖指正   ----------- ...

  2. 最短路径——Dijkstra算法和Floyd算法

    Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...

  3. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径—Dijkstra算法和Floyd算法 Dijks ...

  4. 【转】最短路径——Dijkstra算法和Floyd算法

    [转]最短路径--Dijkstra算法和Floyd算法 标签(空格分隔): 算法 本文是转载,原文在:最短路径-Dijkstra算法和Floyd算法 注意:以下代码 只是描述思路,没有测试过!! Di ...

  5. 最短路径—Dijkstra算法和Floyd算法

    原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最后边附有我根据文中Dijkstra算法的描述使用jav ...

  6. 最短路径—大话Dijkstra算法和Floyd算法

    Dijkstra算法 算法描述 1)算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , ...

  7. 最短路径—Dijkstra算法和Floyd算法【转】

    本文来自博客园的文章:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法 1.定义概览 Dijk ...

  8. 图的最短路径——dijkstra算法和Floyd算法

    dijkstra算法 求某一顶点到其它各个顶点的最短路径:已知某一顶点v0,求它顶点到其它顶点的最短路径,该算法按照最短路径递增的顺序产生一点到其余各顶点的所有最短路径. 对于图G={V,{E}};将 ...

  9. 【转载】最短路径—Dijkstra算法和Floyd算法

    注意:以下代码 只是描述思路,没有测试过!! Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始 ...

随机推荐

  1. 使用tqdm实现下载文件进度条

    1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从 ...

  2. X86逆向9:通过关键常量破解

    本章将讲解一下关于关键全局变量的一些内容,关键的全局变量对于软件的破解非常的有用,找到了关键全局变量并改写它同样可以完成完美爆破一个程序,这里我将使用CM小例子来讲解搜索关键变量的一些技巧,最后我们来 ...

  3. DVWA之SQL注入演练(low)

    1.设置 把安全等级先调整为low,让自己获得点信心,免得一来就被打脸. 2.测试和分析页面的功能       这里有一个输入框 根据上面的提示,输入用户的id.然后我们输入之后,发现它返回了关于这个 ...

  4. Ubuntu系统开机后不能正常使用——问题解决记录

    1.开机后桌面内容没了,搜狗输入法不能使用了,终端不能打开了 问题原因:上次关机前为了解决解压文件中文乱码问题,在/etc/profile末尾加了如下两行:(但事实上如下两行根本不能解决中文乱码问题) ...

  5. vs code 快捷键设置:选中字母可以快速全部转换为大写或小写

    文件--->首选项--->键盘快捷方式--->搜索:"大写"--->点击"转换为大写"左侧的加号,然后设置快捷键后按enter即可完成添 ...

  6. Linux之用户相关操作

    1. 创建用户 useradd -m wolf #即创建一个用户并且创建同名的家目录 2. 设置密码 passwd wolf

  7. ES6入门三:解构

    数组解构 对象解构 声明与解构相关的问题 解构与重复赋值 按需解构 默认值赋值 解构参数 解构(destructuring):结构化赋值 解构通常被看作ES6的一个结构化赋值方法,可以通过解构将数组元 ...

  8. python+opencv+sift环境配置教程

    最近在做对应点估计homography,需要用到opencv,c++的接口不如python的接口来的方便 但是在安装python接口的opencv的时候,遇到了各种问题,主要是函数找不到的问题 比如在 ...

  9. beego注解路由不刷新(不生效)

    本文主要说明本人在使用beego的注解路由时不生效问题 背景: 1.按照官网进行注解路由配置,第一次设置路由,完全正确,注解路由可用. 2.修改路由注释后,发现swagger页面并未有对应的更新 3. ...

  10. Linux:rm可不可以实现删除所有文件,除了demo文件

    方法1: shopt -s extglob #开启扩展通配符 rm -rf !(demo) #删除除了demo的文件 方法2: find /test -not -name "demo&quo ...