【问题标题】:What exactly is augmenting path?究竟什么是增广路径?
【发布时间】:2012-05-10 22:41:50
【问题描述】:

在谈到computing network flows 时,Algorithm Design Manual 会说:

传统的网络流算法基于增广路径的思想,反复寻找从s到t的正容量路径并将其添加到流中。可以证明,通过网络的流是最优的当且仅当它不包含增广路径。

我不明白augmenting paths 是什么。我google了一下,发现:

但他们都引用了上面的报价。

谁能真正清楚地解释什么是augmenting path

【问题讨论】:

    标签: algorithm data-structures graph network-flow


    【解决方案1】:

    增广路径是一条简单的路径 - 一条不包含环的路径 - 仅使用从源到汇的具有正容量的边通过图。

    所以上面的陈述在某种程度上是显而易见的——如果你找不到从源到汇的只使用正容量边的路径,那么就不能增加流量。

    顺便说一句,该陈述的证明并不那么容易。

    【讨论】:

      【解决方案2】:

      Augmenting 意味着增加-使更大。在给定的流网络G=(V,E) 和流f 中,增广路径p 是残差网络Gf 中从source ssink t 的简单路径。根据residual network的定义,在(u,v)(v,u)中的任何一个在原始流中的情况下,我们可以在不违反约束的情况下将增广路径的边缘(u,v)上的流增加至容量Cf(u,v)网络G。 此外,我们可以在增强路径 p 中增加每条边上的流量的最大量称为residual capacity of p。 证明可以在 thomas h 的算法导论中找到。科门等...

      【讨论】:

        【解决方案3】:

        你如何找出从源到汇的增广路径?使用 BFS 的修改版本。您从源执行 BFS 直到到达接收器,并且仅当边缘具有剩余容量时才遍历边缘(即对于该边缘,其最大容量 - 电流 > 0)。对于从源到汇的这条路径,您保持最小剩余容量,这是您可以通过该路径的最大流量。高级代码 sn-p 得到这个想法:

        bool maxFlowAchieved = false;
        int maxFlow = 0;  // keeps track of what is the max flow in the network
        while(!maxFlowAchieved)
        {
            //BFS returns collection of Edges in the traversal order from source to sink
            std::vector<Edge*> path = BFS(source, sink); 
            maxFlowAchieved = path.size() == 0;  // all paths exhausted
            if(maxFlowAchieved)
                break;
            // traverse each edge in the path and find minimum residual capacity
            // edge->residual = edge->maxCapacity - edge->currentflow
            int allowedFlow = GetMinResidualOnPath(path);
            // Now add additional flow to each edge in the path. 
            // i.e. for each edge in path, edge->currentflow += allowedFlow
            // clearly, edge->currentflow + allowedFlow <= edge->maxCapacity
            SaturatePath(path, allowedFlow);
            maxFlow += allowedFlow;
        }
        
        return maxFlow;
        

        【讨论】:

          【解决方案4】:

          迭代地查找从源到汇的流的过程。例如,在 Ford-Fulkerson 算法的情况下,最初所有边上的所有流都为零。在迭代中,我们获取每条路径/边的值,引导我们找到称为增广路径的流。

          【讨论】:

          • 扩充路径是一个路径(正如其名称所暗示的那样),而不是一个过程。流寻找增广路径的优化过程是流算法。
          猜你喜欢
          • 1970-01-01
          • 2012-06-04
          • 2021-12-31
          • 2014-10-28
          • 2012-08-27
          • 2010-11-12
          • 2011-03-18
          • 2011-01-22
          相关资源
          最近更新 更多