Algorithm 网络中的最小s-t割
我试图模拟一个无线传感器节点网络,以研究网络的健壮性。我面临以下问题: 我有一个具有一些边缘容量的节点网络。这相当于算法中的网络流问题。有一个源节点(检测某些事件)和一个汇节点(我的基站)。现在,我想找到网络中的最小s-t割,这样源集的大小就最小化了。此处的源集指由包含源的最小s-t切割分隔的节点集 e、 g.如果s-t切割,Algorithm 网络中的最小s-t割,algorithm,networking,data-structures,graph-algorithm,Algorithm,Networking,Data Structures,Graph Algorithm,我试图模拟一个无线传感器节点网络,以研究网络的健壮性。我面临以下问题: 我有一个具有一些边缘容量的节点网络。这相当于算法中的网络流问题。有一个源节点(检测某些事件)和一个汇节点(我的基站)。现在,我想找到网络中的最小s-t割,这样源集的大小就最小化了。此处的源集指由包含源的最小s-t切割分隔的节点集 e、 g.如果s-t切割,C={s,t},则存在一组可以移除的边,以将网络分成两组,s和t,并且组s包含源,组t包含汇。在所有可能的s-t切割中,当切割边缘的承载力之和最小时,切割最小。可以有几个这
C={s,t}
,则存在一组可以移除的边,以将网络分成两组,s
和t
,并且组s
包含源,组t
包含汇。在所有可能的s-t切割中,当切割边缘的承载力之和最小时,切割最小。可以有几个这样的最小切割。我需要找到集合中元素数最少的最小割集S
请注意,这不是最初的问题,但我已尝试将其简化,以便用算法来表示 在你的问题和评论中,我认为你说的是两件不同的事情,首先找到最小s-t割,这样可以分离节点源和思考,它的权重是最小的(权重将通过删除边的大小来计算),这可以通过Ford Fulkerson算法和(Matlab也有函数graphmaxflow)来完成图书馆里也有
但是,作为您的评论和问题的第一部分,您要求查找最小切割,以便将
s
部分中的节点数最小化,在这种情况下,您应该删除s
的所有边缘,以获得一组大小1,n-1
,或者您应该重新表述您的问题。tl;dr计算一个最大s-t流,并将s设为可通过正剩余容量弧从s到达的节点集
正确性证明:显然S是最小S-t切割(切割=包含S的零件中的节点集)。假设S*是小于S的S-t割(即| S*|<| S |)。通过一个简单的计数参数,让u成为S-S*中的一个节点。如果我们从u到t添加一个正的容量弧,那么计算的流量有一个增大路径,不再是最大值,但切口S*的容量不变,因为u和t都属于V-S*。我们通过弱对偶性得出结论,S*不是最小割
事实上,s-t最小割类是一个交并下的分配格,因此问题的每个实例都有一个唯一的解。我相信你可以通过在一个约束稍加修改的图中找到一个最小割来解决这个问题。其思想如下-由于切割的成本等于穿过切割的总容量,我们可以尝试修改图,方法是将图中每个节点的额外边添加到容量为1的t。直观地说,这意味着与s相同的切割部分中的每个节点将在切割总成本中贡献一个额外成本,因为从该节点到t的边将与边相交。当然,由于额外的容量,这肯定会打乱实际的最小切割。为了解决这个问题,我们应用以下变换-首先,将边的容量乘以n,其中n是图中的节点数。然后在每条边上添加一个。这里的直觉是,通过将边容量乘以n,我们使得最小切割的成本(忽略从每个节点到t的新边)将是原始切割成本的n倍。当我们将每个节点的额外一个容量边添加到t中时,这些边对切割成本的最大可能贡献是n-1(如果图中除t外的每个节点都与s在同一侧)。因此,旧最小切割的成本为C,新最小切割(S,V-S)的成本为nC+| S |,其中| S |是切割同一侧的节点数 更正式地说,结构如下。给定一个有向、有容量的图G和一个(源、汇)对(s,t),通过执行以下操作构造图G’: