Min s-t切入网络

时间:2011-11-11 09:48:29

标签: algorithm networking data-structures graph-algorithm

我正在尝试模拟无线传感器节点网络,以便研究网络的稳健性。我遇到了以下问题:

我有一个具有一些边缘容量的节点网络。这相当于算法中的网络流问题。有一个源节点(检测某些事件)和一个汇聚节点(我的基站)。现在,我想在网络中找到最小的s-t切割,以便最小化源集的大小。此处设置的源是指由包含源的min s-t cut分隔的节点集。

e.g。如果是st cut C = {S,T},那么可以移除一组边以将网络分成两组,ST以及集合S包含源和T包含接收器。当所有可能的s-t切割中切割边缘的容量总和最小时,切割是最小的。可以有几个这样的小切。我需要找到集S

中具有最少数量元素的最小割

请注意,这不是原始问题,但我已尝试对其进行简化,以便根据算法表达它。

3 个答案:

答案 0 :(得分:5)

我相信你可以通过在略微修改约束的图形中找到最小切割来解决这个问题。这个想法如下 - 由于切割的成本等于切割的总容量,我们可以尝试通过在图中的每个节点添加额外边缘来修改图形,使其具有容量1。直观地说,这意味着切割的同一部分中的每个节点都会为切割的总成本贡献一个额外的成本,因为从该节点到t的边缘将越过边缘。当然,由于额外的容量,这肯定会弄乱实际的最小切割。为了解决这个问题,我们应用以下转换 - 首先,将边的容量乘以n,其中n是图中节点的数量。然后在每个边缘添加一个。这里的直觉是,通过将边缘容量乘以n,我们已经做到这一点,使得最小切割的成本(忽略从每个节点到t的新边缘)将是切割的原始成本的n倍。 。然后,当我们将每个节点的额外单容量边添加到t时,这些边可以对切割成本做出的最大可能贡献是n - 1(如果图中的每个节点除了t在同一侧作为s)。因此,旧的最小切割的成本是C,新的最小切割(S,V-S)的成本是nC + | S |,其中| S |是与s相同的节点数。

更正式地说,施工如下。给定定向的,容量图G和(源,汇)对(s,t),构造图G'通过执行以下操作:

  1. 对于图表中的每个边缘(u,v),将其容量乘以n。
  2. 对于图表中的每个节点v,添加容量为1的新边(v,t)。
  3. 在图表中计算最小s-t切割。
  4. 我声称图表中的最小s-t切割G'对应于图表G中的最小s-t切割,其中切割的同一侧上的节点数量最少。证据如下。设(S,V-S)为G'中的最小s-t切割。首先,我们需要证明(S,V - S)是G中的最小s-t切割。这个证明是矛盾的;为了矛盾而假设存在s-t切割(S',V-S'),其成本低于(S,V-S)的成本。让G中的(S',V - S')成本为C'让G中的(S,V - S)成本为C.现在,让我们考虑G'中这两个削减的成本。通过收缩,C'将是nC' + | S' | (因为切割的S&#39侧的每个节点在切口上贡献一个容量)并且C的成本将是nC + | S |。既然我们知道C' < C,我们必须拥有C' +1≤C。因此

      

    nC + | S | ≥n(C' + 1)+ | S | = nC' + n + | S |

    现在,注意0≤| S | < n和0≤| S' | < n,因为切割的同一侧最多可以有n个节点。因此意味着

      

    nC + | S | ≥nC' + n + | S | > NC' + | S' | + | S | > NC' + | S' |

    但这意味着G'中的(S,V-S)成本。大于(S',V - S')在G'中的成本,与(S,V - S)是G'中的最小s-t切割的事实相矛盾。这使我们得出结论,任何最小的s-t切入G'也是G的最小切割。

    现在,我们需要证明不仅仅是在G' G中的最小s-t切割,但它对应于G中的最小s-t切割,切口同一侧的节点数最少。再次,这个证据是矛盾的;假设(S,V - S)是G'中的最小s-t切割。但是在G中有一些最小的s-t切割,在切割的s侧有更少的节点。称之为更好的剪辑(S',V - S')。由于(S,V - S)是G'中的最小切割,因此它也是G中的最小切割,因此成本(S',V - S')和G中的(S,V-S)是一个数字C.然后G'中的(S,V-S)和(S',V-S')的成本。将是nC + | S |和nC + | S' |分别。我们知道nC + | S' | < nC + | S |,因为我们选择了(S',V - S')作为G的最小切割,与S在同一侧的节点数最少。但这意味着那个(S',V - S')的成本低于(S,V - S),这与(S,V - S)是G'中的最小切割的事实相矛盾。因此,我们的假设是错误的,并且(S,V - S)是G中的最小s-t切割,其中与S在同一侧的节点数最少。这样就完成了构造的正确性证明。

    希望这有帮助!

答案 1 :(得分:2)

tl; dr计算最大s-t流量,让S为可通过正剩余容量弧线从s到达的节点集。

正确性证明:显然S是最小s-t切割(切割=包含s的部分中的节点集)。假设S *是小于S的s-t cut(即,| S * |< | S |)。通过简单的计数参数,让你成为S - S *中的一个节点。如果我们从u到t添加正容量弧,则计算出的流量具有扩充路径并且不再是最大值,但是切割S *的容量不变,因为u和t都属于V - S *。我们通过弱二元性得出结论,即S *不是最小割。

事实上,s-t min cut类是交集和并集下的分布格,所以你问题的每个实例都有一个独特的解决方案。

答案 2 :(得分:1)

在你的问题和评论中,我认为你说两个不同的东西,首先找到minmum st cut这样分开节点源并思考并且它的重量是最小的(重量将通过去除边缘大小来计算)这可以用福特来完成-Fulkerson算法和here is sample implementation in java(也是Matlab有一个函数graphmaxflow)也可以在igraph库中使用。

但是,当您的评论和问题的第一部分要求查找最小切割时,s部分中的节点数量最小化,在这种情况下,您应该删除S的所有边缘以使一组大小1,n-1,或者你应该改写你的问题。