当前位置: 首页 > news >正文

阿里国际站韩语网站怎么做广告搜索引擎

阿里国际站韩语网站怎么做,广告搜索引擎,视频网站是怎么做权限管理的,做网站销售工资Dijkstra最短路径算法存在的一个问题是不能处理负权图(详见:经典图论算法回顾之Dijkstra算法。今天要回顾的Bellman-Ford算法(wikipedia:Bellman–Ford algorithm)可以求出有负权图的最短路径,并可以对最短…

Dijkstra最短路径算法存在的一个问题是不能处理负权图(详见:经典图论算法回顾之Dijkstra算法。今天要回顾的Bellman-Ford算法(wikipedia:Bellman–Ford algorithm)可以求出有负权图的最短路径,并可以对最短路不存在(负权回路)的情况进行判断。

在这里插入图片描述

图1 Richard Ernest Bellman 1920-1984

一、Bellman-Ford算法

不同于Dijkstra算法基于点的操作,Bellman-Ford算法则是基于边的操作。算法的核心思想是不断地对边进行松弛(Relax)操作,松弛操作定义如下:

 RELAX(u, v, w)if v.d > u.d + w(u,v)v.d = u.d + w(u,v)v.p = u

上述代码用于松弛边 e = ( u , v ) e = (u,v) e=(u,v)。其中, v . d v.d v.d u . d u.d u.d 分别是 u , v u,v u,v 到源点的最短距离的估计值,这一值将会逐步逼近最短距离, w ( u , v ) w(u,v) w(u,v) 表示边的权重, v . p v.p v.p 表示 v v v 的潜在的最短路径上的前驱节点,用于得到最终得到某一节点的最短路径。

接下来,整个Bellman-Ford算法的伪代码如下:

 BELLMAN-FORD(G,w,s)INITIALIZE-SIGNAL-SOURCE(G,s)   //初始化操作:s.d = 0, (V-s).d = ∞for i=1 to |G.V|-1             //重复执行 |G.V| -1 次for each edge(u,v) in G.E  //对每条边进行松弛操作RELAX(u,v,w)for each edge(u,v) in G.E      //检测是否存在边还可以继续松弛if v.d > u.d + w(u,v)      //如果存在,则有负权回路,不存在最短路径return FALSEreturn TRUE

接下里给出一个简单的示例。如图1(a)所示,我们要求源点 S S S 到其它各点的最短路径,图1(b)是初始化结果(除了源点外,其他点到源点的最短距离初始化为无穷大)。

我们指定按 ( C , D ) , ( B , D ) , ( A , C ) , ( A , B ) , ( A , D ) , ( B , C ) , ( S , B ) , ( S , A ) (C,D),(B,D),(A,C),(A,B),(A,D),(B,C),(S,B),(S,A) (C,D),(B,D),(A,C),(A,B),(A,D),(B,C),(S,B),(S,A) 的顺序依次松弛各条边。
在这里插入图片描述

图1 (a) 给定的图,(b) 初始化结果

第1轮松弛:我们发现, ( C , D ) , ( B , D ) , ( A , C ) , ( A , B ) , ( A , D ) , ( B , C ) (C,D),(B,D),(A,C),(A,B),(A,D),(B,C) (C,D),(B,D),(A,C),(A,B),(A,D),(B,C) 均无法松弛,只有 ( S , B ) (S,B) (S,B) ( S , A ) (S,A) (S,A) 可以被松弛,松弛结果如下(圆圈中的数字表示到源点的最短路径距离的估值):

在这里插入图片描述

图2 第1轮松弛结果

第2轮松弛 ( C , D ) (C,D) (C,D) 无法被松弛,我们松弛 ( B , D ) , ( A , C ) , ( A , B ) (B,D),(A,C),(A,B) (B,D),(A,C),(A,B) ,松弛结果如下:

在这里插入图片描述

图3 第2轮松弛 (B,D),(A,C),(A,B) 的结果

我们接下来松弛 ( A , D ) , ( B , C ) (A,D),(B,C) (A,D),(B,C) ,松弛结果如下:
在这里插入图片描述

图4 第2轮松弛 (A,D),(B,C) 的结果

最后松弛 ( S , B ) , ( S , A ) (S,B),(S,A) (S,B),(S,A), 这两条边也无法继续松弛。

后续进行的第3轮和第4轮实际上已经无法急促松弛,最终得到的结果如下:
在这里插入图片描述

图5 最终结果(最短路径树)

二、算法正确性

为什么该算法可以得到正确的结果呢? 下面就不严谨地解释一下。

2.1 收敛性性质

收敛性如下图所示(图片来自于:https://zhuanlan.zhihu.com/p/585315996):
在这里插入图片描述
也就是说,如果某个点 v v v 的前驱节点 u u u 已经在最短路径上,那么, s ⇝ u → v s\rightsquigarrow u \rightarrow v suv 一定是 s s s v v v 的最短路径,且在之后这个最短路径值不再改变。

我们结合上图给出一个例子。这里我们将图1和图5搬下来,其中图5是图1的最短路径树。
在这里插入图片描述

图6 图1及其对应的最短路径树(粗边表示树边)

1)在第1轮松弛中,我们在松弛 ( S , B ) , ( S , A ) (S,B),(S,A) (S,B),(S,A) 时,得到了 d ( s , A ) = 2 d(s,A) = 2 d(s,A)=2, d ( s , B ) = 6 d(s,B) = 6 d(s,B)=6,可以发现 S → B S\rightarrow B SB 并未在最短路径树上, 因此可能在后续松弛过程中被更新。

2)在第2轮松弛中,我们在松弛 ( A , B ) (A,B) (A,B) 时,得到了 d ( s , B ) = 5 d(s,B) = 5 d(s,B)=5。此时, B . p = A B.p = A B.p=A B B B的前驱节点更新为 A A A)且 S → A S\rightarrow A SA 已经在最短路径上。为此,进一步确定 B B B的最短路径: S → A → B S\rightarrow A\rightarrow B SAB, 最短距离 d ( S , B ) = 5 d(S,B) = 5 d(S,B)=5 。在后续的松弛操作中, B B B 的最短路径将保持不变,因为没有更短的距离了。

在算法执行过程中,无论边的松弛顺序如何,在第1轮松弛过程中,总能确定最短路径树上跟源点 S S S 直接相连的点 U U U 的最短距离。在第2轮松弛过程中,总能确定那些跟 U U U 相邻点的最短距离。 依此类推,就可以得到所有点的最短距离。

2.2 为什么要执行 ∣ G . V ∣ − 1 |G.V|-1 G.V1轮松弛

如图1所示的图,我们仅执行2轮松弛操作就可以得到最终结果,那么为什么要执行 ∣ G . V ∣ − 1 |G.V|-1 G.V1轮松弛呢?

这是基于最坏情况考虑的,如果某个图如下所示,边的松弛顺序为 ( v n − 1 , v n ) , ⋯ ( v 2 , v 3 ) , ( v 1 , v 2 ) (v_{n-1},v_n), \cdots (v_2,v_3), (v_1,v_2) (vn1,vn),(v2,v3),(v1,v2), 那么每次只能从前往后确定一个顶点的最短路径,因此确实需要 ∣ G . V ∣ − 1 |G.V|-1 G.V1轮松弛操作才能得到最终结果。
在这里插入图片描述

图7 退化成单链的图

2.3 改进策略 SPFA

针对图7所示的单链表式的图,按照上述给定的边松弛顺序,我们确实需要 ∣ G . V ∣ − 1 |G.V|-1 G.V1轮松弛才能得到最终结果。 那么如何改进呢? 针对上图,我们如果从前往后更新似乎一轮松弛就可以得到最终结果。

为此,SPFA应运而生,该算法可以看做最短路径跟BFS的结合。它从源点开始,逐步向外松弛邻接点,相当于大体指定了边的松弛顺序,从而提升速度。

这里就不再讲述SPFA,具体可以参见:知乎:算法系列——四种最短路算法:Floyd,Dijkstra,Bellman-Ford,SPFA。

三、处理负权图

接下里,我们用图8来说明Bellman-Ford处理负权图的能力。

  • 对于上面的case,假设 v 0 v_0 v0 为源点, 给定边的松弛顺序为: ( v 3 , v 4 ) (v_3,v_4) (v3,v4), ( v 1 , v 3 ) (v_1,v_3) (v1,v3), ( v 1 , v 2 ) (v_1,v_2) (v1,v2), ( v 0 , v 1 ) (v_0,v_1) (v0,v1), ( v 0 , v 2 ) (v_0,v_2) (v0,v2)
    第1轮松弛后,可以得到: d ( v 0 , v 1 ) = 4 d(v_0,v_1) = 4 d(v0,v1)=4, d ( v 0 , v 2 ) = 2 d(v_0,v_2) = 2 d(v0,v2)=2
    在第2轮松弛过程中,当松弛 ( v 1 , v 2 ) (v_1,v_2) (v1,v2)时,可以得到: d ( v 0 , v 2 ) = 4 + ( − 3 ) = 1 d(v_0,v_2) = 4+(-3)=1 d(v0,v2)=4+(3)=1

  • 对于下面的case,无论以何种松弛顺序,在4轮松弛后, v 1 , v 2 , v 3 , v 4 v_1,v_2,v_3,v_4 v1,v2,v3,v4 到源点的最短路径均可更新。 为此,通过Bellman-Ford算法的最后一次环路检测就可以判别出来。

在这里插入图片描述

图8 Bellman-Ford算法可以处理负权图

四、结语

本文简单回顾了Bellman-Ford最短路径算法的思想,以及不严谨的说明了算法的正确性。鉴于作者水平,如有不正确之处,还请读者批评指正!

参考资料

[1] wikipedia:Bellman–Ford algorithm
[2] 知乎:图解Bellman-Ford计算过程以及正确性证明
[3] 知乎:算法系列——四种最短路算法:Floyd,Dijkstra,Bellman-Ford,SPFA


文章转载自:
http://wanjiablessed.xzLp.cn
http://wanjiaaps.xzLp.cn
http://wanjiaimpendence.xzLp.cn
http://wanjiafreewheeling.xzLp.cn
http://wanjiastrontianite.xzLp.cn
http://wanjiapickle.xzLp.cn
http://wanjiatheogonist.xzLp.cn
http://wanjiainherently.xzLp.cn
http://wanjiasudanese.xzLp.cn
http://wanjiazoetrope.xzLp.cn
http://wanjiaphytochemical.xzLp.cn
http://wanjiaoceanicity.xzLp.cn
http://wanjiasuit.xzLp.cn
http://wanjiatrichogyne.xzLp.cn
http://wanjiaminimization.xzLp.cn
http://wanjiachimney.xzLp.cn
http://wanjiapartial.xzLp.cn
http://wanjiadialectal.xzLp.cn
http://wanjiaseizure.xzLp.cn
http://wanjiatrypsinization.xzLp.cn
http://wanjiasmutch.xzLp.cn
http://wanjiasacker.xzLp.cn
http://wanjialantern.xzLp.cn
http://wanjiabulldyke.xzLp.cn
http://wanjiaintelligencer.xzLp.cn
http://wanjiaprobenecid.xzLp.cn
http://wanjiacrusty.xzLp.cn
http://wanjiagum.xzLp.cn
http://wanjialessening.xzLp.cn
http://wanjiawaive.xzLp.cn
http://wanjiaremoved.xzLp.cn
http://wanjiapharyngology.xzLp.cn
http://wanjiamakhachkala.xzLp.cn
http://wanjiafoh.xzLp.cn
http://wanjiaspellican.xzLp.cn
http://wanjiatreacly.xzLp.cn
http://wanjiafeverweed.xzLp.cn
http://wanjiaoebf.xzLp.cn
http://wanjiareformational.xzLp.cn
http://wanjianitrosobenzene.xzLp.cn
http://wanjiacharger.xzLp.cn
http://wanjiatba.xzLp.cn
http://wanjiamocker.xzLp.cn
http://wanjiabate.xzLp.cn
http://wanjiaprawn.xzLp.cn
http://wanjiaiterate.xzLp.cn
http://wanjiahemmer.xzLp.cn
http://wanjianavarch.xzLp.cn
http://wanjiaextravagate.xzLp.cn
http://wanjiafortieth.xzLp.cn
http://wanjianeozoic.xzLp.cn
http://wanjiapestilential.xzLp.cn
http://wanjiaana.xzLp.cn
http://wanjiaadenoacanthoma.xzLp.cn
http://wanjiaultrasonogram.xzLp.cn
http://wanjiasuperficially.xzLp.cn
http://wanjiagalvanography.xzLp.cn
http://wanjiaairstop.xzLp.cn
http://wanjiacartwright.xzLp.cn
http://wanjiaagin.xzLp.cn
http://wanjiaergophile.xzLp.cn
http://wanjiacalcimine.xzLp.cn
http://wanjiaacciaccatura.xzLp.cn
http://wanjiabeaded.xzLp.cn
http://wanjiabass.xzLp.cn
http://wanjiagroundwork.xzLp.cn
http://wanjiahaustellum.xzLp.cn
http://wanjiafloscular.xzLp.cn
http://wanjiarowan.xzLp.cn
http://wanjianaissance.xzLp.cn
http://wanjiasidefoot.xzLp.cn
http://wanjiacomtism.xzLp.cn
http://wanjiascreenwasher.xzLp.cn
http://wanjiakaszube.xzLp.cn
http://wanjiarampart.xzLp.cn
http://wanjiapilule.xzLp.cn
http://wanjiaclavicembalist.xzLp.cn
http://wanjiasoluble.xzLp.cn
http://wanjiacompasses.xzLp.cn
http://wanjiawesleyanism.xzLp.cn
http://www.15wanjia.com/news/114099.html

相关文章:

  • 重庆网站建设就选承越备案域名购买
  • 南阳网站推广方案秦皇岛百度推广
  • 管理平台登录界面惠州seo优化
  • 做百度手机网站优上海seo优化公司 kinglink
  • 陆金所网站开发二部网站建设的技术支持
  • 北京电脑培训班零基础湖南企业seo优化推荐
  • 国外 平面设计 网站头条关键词排名查询
  • 网站建设书籍推荐it培训机构排行榜
  • 网站的报价怎么做宁波网站推广联系方式
  • 兰州网站推广优化深圳的seo网站排名优化
  • 深圳建设网站的公司简介2023年8月疫情爆发
  • 麻涌仿做网站推广普通话宣传语100字
  • 梧州seo快速排名windows优化大师怎么下载
  • 做网站需要哪些审核全国十大婚恋网站排名
  • 简述建设动态网站环境要求重庆官网seo分析
  • php网站开发接口开发优网营销
  • 广告设计与制作专业知识企业官网seo
  • 网站查询 工信部网络广告策划书模板范文
  • 哪个网站做logo赚钱选择宁波seo优化公司
  • 怎么用wordpress做网站关键词林俊杰mp3
  • html中网站最下面怎么做百度网络营销app
  • 湖州网站设计电商运营推广是做什么的
  • 做海报的素材那个网站比较好百度图片识别在线识图
  • 做国际网站有什么需要注意的关键词歌词任然
  • 网站架构设计师薪酬软文营销的定义
  • 武昌网站建设价格多少百度热搜榜排名今日p2p
  • 免费观看seo基础知识培训视频
  • 网站怎么做维护百度热议
  • 洛阳建设企业网站公司商品促销活动策划方案
  • 龙华做网站的公司深圳网站关键词优化推广