最短路径算法----Floyd-warshall(十字交叉算法证明)

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例) 本文深入解析了SAP CO模块中结果分析码KKA2/CJ88的核心应用,通过真实案例详细阐述了如何在成本波动剧烈的销售型项目中,运用结果分析实现收入与成本的精准匹配。文章重点拆解了不同结果分析方法的适用场景与财务影响,并提供了从配置、操作到问题排查的完整实战指南,帮助财务顾问提升项目财务管理能力。 阅读详情

Floyd不同于Dijkstra,可以得到所有点对的最短路径。使用的是DP

Floyd可以处理有负权重边的情况

递推公式:w(i, j) = min{w(i, j), w(i, k) + w(k, j)},含义是【i到j的最短距离】=【i到k的最短距离+k到j的最短距离】与【i到j的最短距离】中较小的那一个

看起来很简单,但是具体怎么计算呢?


依旧使用这个例子,图的表示方式为:

[[0, 7, 9,  max,  max, 14],
 [7, 0, 10, 15, max, max],
 [9, 10, 0, 11, max, 2],
 [max, 15, 11, 0, 6, max],
 [max, max,  max,  6, 0, 9],
 [14,max,  2,  max, 9, 0]]
可以看出,w(i, i) = 0。这就是突破口了。

当k=0时,w(0, j)=min{w(0,0)+w(0,j), w(0,j)};w(i,0)=min{w(i,0)+w(0,0), w(i,0)},是不用更新的。当然,k不为0的时候,需要更新w(0,j)和w(i,0)

类似的,可以得到w(k,j)和w(i,k)不用更新。也就是说,和k相同行、列不用更新。

用图做个例子:求图中蓝色的值w(4,2)


w(4,2) = min{w(4,2) + 红色两个格子的和+绿色两个格子的和+紫色两个格子的和+薄荷色两个格子的和}

1. 可以看出k=2和k=4的时候,更新时没有意义的。

2. 可以看出,计算过程其实就是画一个(k,k)-(4,2)的方框,比较w(4,2)和方框的另外两个顶点w(4,k)+w(k,2)的大小。当然,这个时候w(4,k)和w(k,2)应该也是最优的解。

所以明显不能以i,j,k的loop顺序遍历。


那么试一下以k,i,j的loop顺序遍历呢?

这里有个很取巧的点:

1. 当k=0的时候,第一行、第一列已经是k=0的最优解了(还记得前面的结论吗)

2. 当k=0的时候,其他的行、列只用取第一行、第一列的数据

也就是说,当k=0的时候,遍历完整张图,能得到k=0的情况下dp算法的最优解:当且仅当中间节点编号<=0的时候,点i到点j的最近值

继续证明k=x的情况下最优解已经得到,k=x+1时继续遍历,能否得到k=x+1的最优解?

1. k=x+1的时候,第x+1行、第x+1列已经是k<=x+1的最优解了(k=x+1时,不用更新第x行、第x列)

2. k=x+1的时候,其他的行、列只会读取第x+1行、第x+1列的数据

因此当k=x+1时,遍历完整张图,能得到k=x+1的情况下dp算法的最优解。

证明完毕


以上的证明过程也就是“十字交叉算法”的原理了。

感兴趣的同学可以网上搜一下,瞬间即懂

def floyd(graph):
    # graph:n*n matrix
    # find min distance from start_node to end_node
    length = len(graph)
    for k in xrange(0, length):
        for i in xrange(0, length):
            for j in xrange(0, length):
                graph[i][j] = min(graph[i][k] + graph[k][j], graph[i][j])
    return graph

时间复杂度O(n^3)

驱动

graph = [[0, 7, 9,  max_int,  max_int, 14],
         [7, 0, 10, 15, max_int, max_int],
         [9, 10, 0, 11, max_int, 2],
         [max_int, 15, 11, 0, 6, max_int],
         [max_int, max_int,  max_int,  6, 0, 9],
         [14, max_int,  2,  max_int, 9, 0]]
print floyd(graph)


附录:

打印出最短路径

def floyd(graph):
    # graph:n*n matrix
    # find min distance from start_node to end_node
    length = len(graph)
    pre_node = [[-1 for i in xrange(0, length)] for j in xrange(0, length)]
    for k in xrange(0, length):
        for i in xrange(0, length):
            for j in xrange(0, length):
                dist = graph[i][k] + graph[k][j]
                if dist < graph[i][j]:
                    graph[i][j] = dist
                    pre_node[i][j] = k
    print "pre_node", pre_node
    return graph



实战|mitmproxy+Playwright 拦截篡改Cloudflare验证流程,实现无感爬取(2026实测可用) 2026年对抗Cloudflare,别再死磕滑块、轨迹、算法。高伪装浏览器 + 中间层劫持篡改验证流程Playwright + mitmproxy = 无感过CF这篇是纯实战、无废话、可直接上线的方案。你只要把目标网站、cf_clearance填进去,就能跑通。 阅读详情

相关推荐

【GPIO模拟串口通信协议】

由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。

学海无涯苦作舟 2638

最短路径算法详细介绍

据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。     最短路经计算分静态最短路计算和动态最短路计算。     静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A*(A Star)算法。      动态路径最短路是外界环境不断发生

caojunhao123的专栏 1万+

AI中台系统设计方案探讨

集成JupyterLab、低代码建模工具(如H2O.ai)、预训练模型库(Hugging Face、PaddleHub)。:通过REST/gRPC接口封装AI能力(如OCR、语音识别),支持流量控制与鉴权(如Kong、Apigee)。:服务注册发现(Consul)、熔断降级(Hystrix)、监控告警(Prometheus+Grafana)。:分布式存储(如HDFS、Ceph)与对象存储(如S3、OSS),支持海量数据高速读写。加密传输(TLS)、动态脱敏(如数据掩码)、访问控制(RBAC)。

reset2021的博客 1032

最短路径(Dijkstra算法与Floyd算法)

Dijkstra算法与之前学习过的Prim算法有些相似之处。我们直接通过一个例子来讲解 假设要求的是A->E之间的最短路径。首先我们来列出顶点A到其他各顶点的路径长度:。既然是要寻找最短路径,我们当然是先在已有的路径里面挑一条最短的,也就是。将到达过的顶点用红色进行标识 到达C点后,我们又可以找到两条路径:。此时我们拿这几条新的路径长度,与之前的相加,就可以得到。出现了一条比之前短的路径:。所以我们将其更新到之前的路径列表里:。接下来再从路径列表里选择一条最短的路径,也就是:。将D标记为已到达。 到达D点后

夜槿笙歌的博客 5066

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 455

FPGA中Verilog HDL/VHDL实现NCO(数字控制振荡器)的查表法优化与性能分析

本文深入探讨了在FPGA中使用Verilog HDL/VHDL实现数字控制振荡器(NCO)的查表法优化与性能分析。文章详细解析了NCO的核心工作原理,包括相位累加器、查找表(ROM)的设计,并重点介绍了利用波形对称性压缩ROM、相位抖动注入等关键优化技巧,以提升无杂散动态范围(SFDR)并平衡速度、精度与资源消耗。

vscode6remote的博客 454

Floyd 算法

Floyed算法就是一种容易理解,可以算出任意两个节点之间的最短距离,代码编写简单的算法。缺点就是时间复杂度比较高,不适合计算大量数据。想要理解该算法,一定要结合本博客中的题目哦

2302_80067378的博客 1917

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 889

图-弗洛伊德(FloydWarshall)算法详解(含全部代码)

目录 适用条件 基本操作函数 功能实现函数 测试使用图 算法讲解 初始化 迭代 弗洛伊德算法代码 全部代码 实验结果 最短路径算法比较 适用条件 图中可以有负权,但不能有负圈(圈中弧或边的权值之和小于0) 基本操作函数 InitGraph(Graph &G) 初始化函数 参数:图G 作用:初始化图的顶点表,邻接矩阵等 InsertNo...

关注网络安全、云原生安全 1万+

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2096

微信终于支持“多设备同时在线”?我用 NAS + Docker 搭了一个云端微信系统,多端共享24小时在线

通过Docker 容器,将微信运行在云端并通过浏览器访问,实现多设备共享同一微信会话 📱。本文详细介绍完整部署流程、docker-compose 配置及资源控制方案,让微信变成“可访问的云桌面应用” ✨

XiaoqiangClub的博客 869

floyd-warshall算法

算法distancepathoutputcini  Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。我们平时所见的Floyd算法的一般形式如下: 1 void Floyd(){ 2     int i,j,k; 3     for(k=1;kn;k++) 4         for(i=1;in;i++) 5

dxx_111的博客 3873

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

Floyd-Warshall[弗洛依德]算法

1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 2.算法原理 Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所

WatermelonMk的博客 6181

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

最短路径Ⅲ—Floyd-Warshall算法

Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。   2.算法描述 1)算法思想原理:      Flo

winbobob的专栏 2248

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Floyd算法 (全源最短路径)

https://www.cnblogs.com/jasonlixuetao/p/5405221.html Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用...

while_black的博客 949

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Floyd-Warshall算法

Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。   2.算法描述 1)算法思想原理:      F

LUOXINJIE的专栏 631

coding A&D:最短路径Floyd算法过程矩阵的计算:十字交叉法

本文转载自:Angel_Kitty 地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6995648.html 已注明出处,尊重原作者!   loyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用...

ScorpC的博客 1429

最短路-Floyd算法

1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。  2.算法描述 1)算法思想原理:      Floyd算法是一个经典的动态规划算法。用通俗的语言

潮鸣り 398

Floyd算法思想

本来代码量如此小的算法不用出模板了,但是的确思想还是很好的。 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。   2.

This is bill的专属博客 8632

动态规划实例(十五):最短路径Floyd

最短路径动态规划Floyd算法实现

学苑新空 1210

最短路径Floyd算法【图文详解】

Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 2.算法描述 1)算法思想原理: Floyd算法是一个经典的动态...

weixin_33825683的博客 344

Floyd算法

1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 2.算法描述 1)算法思想原理: Floyd算法是一个经典的动态规划算法。用通俗的...

weixin_30924239的博客 416

最短路径--Floyd算法

Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 2.算法描述 1)算法思想原理: Floyd算法是一个经典的动态...

weixin_30484739的博客 234

最短路径flody算法

1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。   2.算法描述 1)算法思想原理:      Floyd算法是一个经典的动

guobingjie123的博客 989

最短路径

1.Dijkstra算法: 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。 问题描述:在无向图 G=(V,...

weixin_30933531的博客 94
上一篇: 声明
下一篇: 最短路径算法----Bellman-ford和SPFA算法
圆形毕露
博客等级 码龄17年 20粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值