Algorithm 最大流/最小割流-删除K边后的流算法

Algorithm 最大流/最小割流-删除K边后的流算法,algorithm,graph,Algorithm,Graph,我被要求为以下问题开发一个算法: 鉴于: 边缘最大容量为1的流动网络G G的最大流量| F| 正整数K 完全删除K条边,以使网络流量最小化 我的想法/算法: 如果K大于或等于| F |删除与G的最小切割相交的所有边 如果K仍然大于零,则删除随机边,新的最大流为零 如果K等于| F |删除与G的最小切割相交的所有边 新的最大流量为零 如果K小于| F |删除与G的最小切割相交的边的K 新的最大流量是| F |-K 我需要一些验证,因为最大流量/最小切割对我来说是新的。 最后,我得到的最大流量

我被要求为以下问题开发一个算法:

鉴于:

  • 边缘最大容量为1的流动网络G
  • G的最大流量| F|
  • 正整数K
  • 完全删除K条边,以使网络流量最小化

    我的想法/算法:

  • 如果K大于或等于| F |删除与G的最小切割相交的所有边 如果K仍然大于零,则删除随机边,新的最大流为零

  • 如果K等于| F |删除与G的最小切割相交的所有边 新的最大流量为零

  • 如果K小于| F |删除与G的最小切割相交的边的K 新的最大流量是| F |-K

  • 我需要一些验证,因为最大流量/最小切割对我来说是新的。 最后,我得到的最大流量/最小流量切割背后的直觉是,最小(源、汇)切割是我们可以在网络中推送的最大流量的“瓶颈”。对吗?

    是的,最小切割是流量的“瓶颈”,也是
    |最小切割|=最大流量
    。如果你感兴趣的话,网上有大量的证明(它被称为最大流最小割定理)

    对于您的算法,无需在步骤1中删除随机边,从“最小切割”中删除一条边将通过该边的流量减少最大流量(在这种情况下,
    1
    ,因为根据语句,所有权重均为
    1

    因此,解决方案就是:

  • 找到任何最小切割
  • 从图形中删除
    min(K,| min cut |
    边)
  • 查找最小切割非常容易:

  • 构造剩余流图
  • 在其上运行任何最大流量算法(福特富尔克森、贝尔曼福特等)
  • 现在从源节点执行BFS,只通过流量值小于容量的边
  • 现在,从已访问节点到未访问节点的所有边都形成一个最小切割

  • 很高兴我的直觉正确。非常感谢你的帮助!