算法(62):Bellford algorithm的证明,negative weights-18.5

发布时间:2026/9/26 11:14:59

算法(62):Bellford algorithm的证明,negative weights-18.5 Q对于每个v都由相应的处理。对于每个v都计算过邻边。这个绿色循环每次都计算了整个图像。但是这还不够因为要包含负权重所以可能出现被计算过的distTo变小的情况因此还有一个v次的i外层循环。但这样就能保证万无一失吗证明是接下来就是后面的证明要讲的内容吗A是的。Bellman-Ford 确实就是外层循环 V 次内层每次遍历所有 E 条边执行松弛。为什么需要 V 次外层因为负权重可能让已经更新过的distTo再次变小所以必须反复扫描直到所有可能的路径长度都被传播到。证明在第 63 页已经给出了。它的核心是一个归纳命题第 i 轮结束后对于每个顶点 vdistTo[v]等于从 s 到 v 且最多经过 i 条边的最短路径长度。证明的物理展开基础情况i 0初始化时distTo[s] 0其他顶点为 ∞。这对应“从 s 到 s 经过 0 条边”的长度为 0到其他顶点经过 0 条边不可达∞。命题成立。归纳步骤假设第 i 轮结束后所有distTo[v]都是“至多 i 条边”的最短路径长度。也就是每次循环只获得一条边这是最差情况但这个假设前提是对的吗现在执行第 i1 轮遍历所有边。考虑任意一条边 e v→w。如果存在一条从 s 到 w 且最多经过 i1 条边的最短路径它的最后一条边是 v→w。那么在这条路径中从 s 到 v 的部分最多经过 i 条边。根据归纳假设第 i 轮结束时distTo[v]已经是“至多 i 条边”的最短路径长度。所以当第 i1 轮遍历到边 v→w 时执行松弛textif (distTo[w] distTo[v] e.weight()) distTo[w] distTo[v] e.weight();这个候选值distTo[v] e.weight()就是那条“至多 i1 条边”的最短路径的长度。因此distTo[w]会被更新为正确值。遍历完所有边后所有“至多 i1 条边”的最短路径都会被找到。归纳结论第 V-1 轮结束后所有distTo[v]都是“至多 V-1 条边”的最短路径长度。为什么 V-1 轮就足够因为在一个没有负环的图中任何从 s 到 v 的最短路径都可以取一条简单路径不重复经过任何顶点。简单路径最多包含 V-1 条边因为图只有 V 个顶点。所以“至多 V-1 条边”的最短路径就是真正的最短路径。因此第 V-1 轮结束后所有distTo[]已经收敛到最终的最短路径长度。第 V 轮的作用检测负环如果图中存在负环那么最短路径可以包含任意多条边绕负环无限次总权重越来越小。此时“至多 V-1 条边”的最短路径不再是最终答案因为你可以绕负环获得更短的路径。Bellman-Ford 执行第 V 轮额外一轮。如果这一轮中仍然有边能够松弛即distTo[w]还能被改小说明存在一条路径包含至少 V 条边且更短。这条路径必然包含一个环。而只有负环才能让绕环后的路径更短。所以第 V 轮的松弛检测可以用来判断负环是否存在。回答你的问题“这样就能保证万无一失吗”在无负环的前提下是的。证明就是上面的归纳。第 V-1 轮后所有最短路径都已经被找到。第 V 轮用来检测负环如果第 V 轮还能松弛说明存在负环最短路径问题无解因为可以无限绕环变小。“接下来就是后面的证明要讲的内容吗”证明已经在第 63 页给出了。第 64 页是 FIFO 队列改进优化实际运行速度第 66-67 页是负环检测的具体方法。证明本身不需要更多内容。Q假设第 i 轮结束后所有 distTo[v] 都是“至多 i 条边”的最短路径长度。 也就是每次循环只获得一条边这是最差情况。但这个假设前提是对的吗为什么第i轮候所有的distTo就是至多i条边的最短路径了这很奇怪。因为满足松弛条件不代表就是最优边还有可能又被下一轮更新掉呢A我们来把证明的逻辑结构彻底拆开。归纳假设到底在说什么证明的归纳假设是第 i 轮结束后distTo[v]至多是“从 s 到 v、最多经过 i 条边”的最短路径长度。注意关键词是“至多”。它不是说“distTo[v]就是最终最优值”。它说的是“如果你限制路径最多只能走 i 条边那么distTo[v]不会比这个限制下的最优值更差。”你的质疑“满足松弛条件不代表就是最优可能下一轮又被更新”完全正确。distTo[v]确实可能在下一轮被更新得更小。但归纳证明并不否认这一点。它只是说在第 i 轮结束时如果你只看那些最多 i 条边的路径distTo[v]已经不比它们差了。它没有说distTo[v]不能再变小。它可以变小。变小的原因是在后续轮次中发现了经过更多条边但总权重更小的路径。为什么这个“至多 i 条边”的保证是成立的用归纳法基础情况i0第 0 轮初始化后distTo[s]0其他为 ∞。这对应“最多经过 0 条边”的路径只有 s 自己长度 0。其他顶点不可达∞ 是一个上界。成立。归纳步骤假设第 i 轮结束后distTo[v]至多是“最多 i 条边”的最短路径长度保证了最差情况但不排除一条边直达的异常好情况。现在执行第 i1 轮遍历所有边。考虑任意一条“最多 i1 条边”的路径它的最后一条边是 u→v。从 s 到 u 的部分最多有 i 条边。根据归纳假设第 i 轮结束时distTo[u]至多是这段前缀的长度。所以当第 i1 轮遍历到边 u→v 时候选值distTo[u] weight(u→v)至多是这条路径的总长度。因此distTo[v]会被更新为至多这个值。结论第 i1 轮结束后distTo[v]至多是“最多 i1 条边”的最短路径长度。关键点归纳证明不关心“是否下一轮会更新”归纳证明只证明了一个上界。它说在第 i 轮结束时distTo[v]不会比“限制在 i 条边内”的最优值更差。第 i1 轮可能找到更短的路径经过 i1 条边所以distTo[v]可能变小。但这不违反归纳假设。归纳假设只保证“至多 i 条边的路径已经被覆盖”不保证“没有更长的路径能更短”。为什么 V-1 轮后就能收敛因为任何从 s 到 v 的最短路径都可以取一条简单路径不重复顶点。简单路径最多 V-1 条边。所以第 V-1 轮结束后distTo[v]至多是“最多 V-1 条边”的最短路径长度。但“最多 V-1 条边”的最短路径长度 真正的最短路径长度因为最短路径本身最多 V-1 条边。所以distTo[v]至多等于最短路径长度。同时distTo[v]不可能小于最短路径长度因为它是某条路径的长度而最短路径是所有路径中最小的。所以distTo[v]恰好等于最短路径长度。总结你的疑问你的质疑“满足松弛条件不代表就是最优可能下一轮又被更新”是对的。归纳证明没有否认这一点。它只是逐轮推进一个“至多 i 条边”的上界。第 i 轮结束时上界是“i 条边内的最优值”。下一轮可能把这个上界推进到“i1 条边内的最优值”。直到 V-1 轮上界推进到“V-1 条边内的最优值”而这恰好就是全局最优值。Q我感觉还是不太行我现在能够理解到的就是如果你进行i轮循环的话确实会有最多是i条边的最短路径存在也能够保证在这个前提下的上限。同时我还可以从另外一个角度来看那就是假使这些点的顺序正好是继续那么确实我每一次i的外层循环是可以使之多一条边的等到V-1轮循环完成以后也会有V-1条边也就是所有边都含括在其中的最短路径这是上限。那么我现在能够理解到的就是这个外层循环所保证的仅仅是所有的点所有的边都被涵括进来但是你知道就算所有的点所有的边都被涵括后再进行一轮也可能是会有新的更新的。比如说如果我们第一轮就直接把点一到七给所有都遍历了一遍我们再去做第二轮外层循环还是可能找到更优的路径。因此并不是所有的点和边都被包括进来就可以保证这个路径是最优的保证最优路径的另有其他那么到底是什么保证了这个最优路径呢A你现在的困惑可以精确地表述为“遍历了所有点和所有边”不等于“找到了最优路径”。那到底是什么保证了最优答案分两层。第一层Bellman-Ford 保证的到底是什么它保证的不是“遍历了所有点和所有边”。它保证的是一个逐轮推进的上界第 i 轮结束后对于每个顶点 vdistTo[v]至多是“从 s 到 v、最多经过 i 条边的最短路径”的长度。注意这里的“最多 i 条边”不是“遍历了 i 条边”而是“路径的长度限制在 i 条边以内”。这个上界是逐轮收紧的第 1 轮后至多是“最多 1 条边”的最优值。第 2 轮后至多是“最多 2 条边”的最优值。...第 V-1 轮后至多是“最多 V-1 条边”的最优值。第二层为什么 V-1 轮后这个上界就是全局最优这一步依赖一个图论事实在一个没有负环的图中任何最短路径都可以取一条简单路径不重复顶点。简单路径最多 V-1 条边。所以全局最优路径的长度 ≤ V-1 条边。第 V-1 轮后distTo[v]至多是“最多 V-1 条边的最短路径”长度。但“最多 V-1 条边的最短路径”长度 全局最短路径长度因为全局最短路径本身就在这个范围内。所以distTo[v]至多等于全局最短路径长度。同时distTo[v]不可能小于全局最短路径长度因为它是某条路径的长度而全局最短路径是所有路径中最小的。所以distTo[v]恰好等于全局最短路径长度。回到你的质疑“就算所有的点和边都被涵括后再进行一轮也可能会有新的更新。”在有负环的图中这是对的。如果存在负环你可以无限绕环每绕一次路径长度都变小所以永远会有新的更新。在没有负环的图中这是不对的。因为任何最短路径最多 V-1 条边。第 V-1 轮后所有“最多 V-1 条边”的路径都已经被考虑过了。再执行第 V 轮遍历所有边时没有任何一条边能提供比当前distTo更小的候选值。所以第 V 轮不会有任何更新。如果第 V 轮还有更新那就说明存在一条包含至少 V 条边的路径其长度小于当前distTo。这条路径必然包含一个环。而只有负环才能让绕环后的路径更短。所以第 V 轮的更新直接证明了负环存在。总结保证最优的不是“遍历了所有点和边”而是“逐轮推进的路径边数上界”加上“最短路径最多 V-1 条边”这个图论事实。第 i 轮保证覆盖“最多 i 条边”的路径。第 V-1 轮覆盖了所有可能的最短路径因为最短路径 ≤ V-1 条边。第 V 轮如果还有更新说明存在负环最短路径问题无解。在没有负环的情况下第 V-1 轮结束后distTo[]已经收敛不会再有任何更新。Q我明白了我不是不能推导出这件事我是不能理解这件事。通过数学归纳法我确定了它的正确性但是感官的认识上——为什么经过i轮可以计算出最长为i条边的最短路径这是如何被保证的A你问的是机制层面的“为什么”为什么恰好经过 i 轮就能算出至多 i 条边的最短路径我们不用归纳法而是用一条具体的路径来追踪它的物理传播过程。物理机制波前传播假设有一条从 s 到 v 的路径经过 k 条边s → a₁ → a₂ → ... → aₖ v第 1 轮遍历所有边时边 s→a₁ 被处理。因为distTo[s]0所以distTo[a₁]被更新为边 s→a₁ 的权重。此时从 s 出发经过 1 条边能到达的顶点其distTo变成了有限值。第 2 轮遍历所有边时边 a₁→a₂ 被处理。因为distTo[a₁]在第 1 轮结束时已经是有限值所以distTo[a₂]被更新为distTo[a₁] weight(a₁→a₂)。此时经过 2 条边能到达的顶点被激活。第 k 轮边 aₖ₋₁→aₖ 被处理。distTo[aₖ₋₁]已经在第 k-1 轮结束时被激活。所以distTo[aₖ]被更新。结论一条经过 k 条边的路径它的效果最多在第 k 轮结束时传播到路径的终点。为什么“最多”而不是“恰好”如果边的遍历顺序恰好是沿着路径从前向后那么这条路径可以在一轮内全部传播完因为每处理一条边下一个顶点就被激活紧接着处理下一条边。但如果边的遍历顺序是反的先处理 aₖ₋₁→aₖ再处理 aₖ₋₂→aₖ₋₁...那么第 1 轮只能激活 a₁因为只有 s→a₁ 的起点 s 已经有值第 2 轮激活 a₂...第 k 轮激活 aₖ。最坏情况下每轮只能向前推进一条边。所以 k 条边的路径最多需要 k 轮才能把它的效果完全传播到终点。为什么 V-1 轮后一定收敛因为任何最短路径都是简单路径不重复顶点简单路径最多 V-1 条边。所以任何最短路径的效果最多在第 V-1 轮结束时传播完毕。第 V-1 轮后所有顶点都已经被它们的最短路径激活过。distTo[]不再变化。回到你的感官困惑你无法“感知”这个机制是因为你在试图一次性想象所有路径同时传播。但实际物理过程是第 1 轮只激活距离 s 为 1 条边的顶点。第 2 轮激活距离 s 为 2 条边的顶点。...每轮只向前推进一条边。这个过程是串行的、有限步的。你可以在纸上画一条 5 个顶点的链手动追踪 4 轮亲眼看到每一轮激活一个新顶点。你不需要感知“无限”你只需要追踪 4 轮有限步骤。你之前的困惑来自“遍历了所有边”这个动作。但遍历不等于激活。一条边能否生效取决于它的起点是否已经被激活。起点的激活又依赖上一轮的传播。所以轮次决定了传播深度而不是遍历次数。Q或许你的意思是我们第一次只保证s1下的最短路径第二次保证一个s1-s2下的最短路径我们要保证的是作为路经前缀的那一段是最优的A你的方向是对的但需要把“路径前缀最优”这个说法精确化。Bellman-Ford 每轮保证的不是“某一条特定路径的前缀最优”而是第 i 轮结束后对于每个顶点 vdistTo[v]不会大于任何一条从 s 到 v、边数不超过 i 的路径的长度。换句话说它保证的是所有长度 ≤ i 的路径这个集合中的最短距离的上界。它同时覆盖所有可能的前缀而不是单独保证某一条路径的前缀。用你的话来说第 1 轮保证distTo[a]不会大于任何“从 s 到 a、只走 1 条边”的路径长度。第 2 轮保证distTo[b]不会大于任何“从 s 到 b、最多走 2 条边”的路径长度。...第 i 轮保证所有顶点都覆盖了“最多 i 条边”的路径。所以不是“先保证 s1 的最短路径再保证 s1→s2 的最短路径”而是每一轮把路径长度限制放宽一条边同时更新所有顶点。最终当 i 达到 V-1 时限制放宽到“最多 V-1 条边”而所有简单路径都不超过 V-1 条边因此所有可能的最短路径都被覆盖distTo收敛到全局最优。你不需要感知“无限”只需要理解每轮把路径边数上限加一直到覆盖所有简单路径。一个很抽象的小东西……
延伸阅读

更多相关文章

2026/9/26 11:14:59

做工控6年,用过6款运动控制卡,总结出C# SDK调用的通用套路

做工控上位机开发这些年,运动控制一直是核心业务模块。从脉冲型板卡到EtherCAT总线控制器,前前后后接触过六七家厂商的产品。很多新手刚接触运动控制卡,总觉得各家SDK差异巨大,换个品牌就要从头学一遍。其实跑通了就会发现&#x…

2026/9/26 12:20:02

RFM6601 SoC模组:LoRaWAN节点远距离低功耗大容量设计实战

1. 从一颗SoC说起:RFM6601到底解决了LoRaWAN节点的什么痛点 搞过LoRaWAN节点的人都有一个共同的体感:这东西看起来简单,真做起来处处是坑。终端节点要长时间靠电池供电,又要在复杂环境里把数据稳定送到几公里外的网关,…

2026/9/26 12:20:02

Spring Boot + Vue实验室管理系统设计与实现:核心模块与避坑指南

做实验室管理系统这个项目,我在不同阶段接触过好几版。最早是帮一个学院教务处做“实验室开放预约”的课程设计,后来慢慢扩展成包含设备借用、耗材管理、人员考勤的整体系统。用的组合很主流:后端Java、Spring Boot,前端Vue。这个…

2026/9/26 12:20:02

《第五人格》延迟高频繁掉线?从本地到服务器逐层排查实战

1. 从一次排位连跪说起:延迟和掉线到底卡在哪打排位打到一半,画面突然卡成PPT,技能按了没反应,等恢复过来人已经倒地了。这种场景我相信每个《第五人格》玩家都经历过,尤其是监管者贴脸的时候,延迟一飙&…

2026/9/26 12:20:02

AppVStreamingUX.dll丢失?别下载,SFC+DISM才是正解

这些年帮人修电脑,被问得最多的两个问题一个是"我电脑好卡怎么办",另一个就是"这个DLL文件丢失了,在哪里能下载"。尤其像是 AppVStreamingUX.dll 这种看着眼生、网上又搜不到靠谱下载源的,很多人第一反应就…

2026/9/26 12:15:02

基于Flutter构建跨端二手交易平台:架构、鸿蒙适配与性能优化

1. 项目背景与整体设计思路1.1 为什么用 Flutter 做二手交易平台这个项目的起点其实很朴素:我手头的安卓和 iOS 工程师都不够用,但产品又要求必须快速覆盖主流移动端,甚至还要为鸿蒙这类新系统留好入口。二手物品交易这个场景和普通内容社区不…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/26 0:04:28

画质修复APP怎么选?Wink影像修复能力与产品实力解析

现如今手机拍摄场景愈发丰富,演唱会直拍、漫展记录、老视频翻新、日常vlog录制,都会遇到画面模糊、噪点多、曝光失衡等问题,不少用户在挑选工具时比较在意一款画质修复APP能够兼顾修复效果与自然质感。Wink作为美图公司推出的全球化AI影像增强…

2026/9/26 0:04:28

超低能耗建筑K值要求能否满足?浙东铝业建筑型材解析

核心摘要浙东铝业的超低能耗系统门窗产品,资料显示保温性能可达 K≤1.4W/(㎡K),能够对应上海地区超低能耗住宅对门窗保温性能的应用需求。判断建筑是否满足超低能耗要求,不能只看铝型材本身,还需要结合玻璃、隔热条、密封系统、开…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑