图算法:最短路径算法总结


一、图的概念

  • G=(V, E)。顶点(就是结点)V,边E,权值w
  • 路径p v 1 → v 2 → . . . → v k v_1 \to v_2 \to ... \to v_k v1v2...vk,其 w ( p ) = ∑ i = 1... k − 1 w ( v i , v i + 1 ) w(p)=\displaystyle \sum_{i=1...k-1}w(v_i,v_{i+1}) w(p)=i=1...k1w(vi,vi+1)
  • 最短路径 δ ( u , v ) \delta(u,v) δ(u,v):从u顶点到v顶点

δ ( u , v ) = { m i n { w ( p ) } if 有从p到v的路径 ∞ if 不连通 \delta(u,v) = \begin{cases} min\{w(p)\} &\text{\small if 有从p到v的路径} \\ \infty &\text{\small if 不连通} \end{cases} δ(u,v)={min{w(p)}if 有从pv的路径if 不连通

  • 松弛定理Relax
    δ ( u , v ) ≤ δ ( u , x ) + δ ( x , v ) \delta(u,v) \leq \delta(u,x)+ \delta(x,v) δ(u,v)δ(u,x)+δ(x,v)
    理解: δ ( u , v ) \delta(u,v) δ(u,v)是u和v之间的最短路径, δ ( u , x ) + δ ( x , v ) \delta(u,x)+ \delta(x,v) δ(u,x)+δ(x,v)表示的是u和v之间的某一条路径,那么最短路径肯定是所有u和v之间路径最小的一条,所有是"≤"。
    在这里插入图片描述

  • 负权环
    意思是整个环路的总权值为负。这样就可能出现只要我一直沿着这个负权环转,那么我就会获得一个更小的总权值代价。
    在这里插入图片描述

  • 有向图和无向图

    • 有向图:(A→B,A←B,A ⇆B)只能按照箭头方向走
    • 无向图:(A——B)AB之间互通,即就是全双向的有向图
      在这里插入图片描述

二、对图的要求

【求最短路径的前提:well-definedness of shortest paths(不能有负权环存在)】
负权值的环路是指一个环路总的权值为负,而不是不能存在负权值的边。
所以当有负权环存在时,是求不出最短路径的。

三、最短路径算法

有两种形式:

  • 单源点:意思是要从点A到各点BCD的最短路径,AB,AC,AD
  • 多源点:每个点都是单源点,ABCD各点之间的最短路径,AB,AC,AD,BC,BD,CD

1.单源点 single-source

  • 无负权值边:Dijkstra
    图算法:最短路径算法之dijkstra
  • 通用(允许有负权值边和能判断负权环):Bellman-Ford
    【Floy-Warshall】
    c i j ( k ) = m i n k { c i j ( k − 1 ) , c i k ( k − 1 ) + c k j ( k − 1 ) } c_{ij}^{(k)}=min_k\{c_{ij}^{(k-1)},c_{ik}^{(k-1)}+c_{kj}^{(k-1)}\} cij(k)=mink{cij(k1)cik(k1)+ckj(k1)}
    在这里插入图片描述
  • 行表示出发点,列表示到达点(行出列入)。
  • c0表示直接相连的,c1表示经过v1的,c2表示经过v2的。

2.多源点 all-pairs

  • 单源点算法对每个顶点用一遍:
    • 无负权值边:Dijkstra
    • 通用(允许有负权值边和能判断负权环):Bellman-Ford
  • 另外提出的:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值