寻找算法:最小切割以生成二分图

时间:2017-02-28 11:21:08

标签: algorithm graph bipartite minimum-cut

给定一个无向加权图(或一个较大的不相交图的单个连通分量),它通常包含许多奇数和偶数周期,我正在寻找算法去除生成一个或多个所需的最小边数。更多的二分子图。文献中是否有任何标准算法,如最小切割等?

我想解决的问题在现实世界中看起来像这样: 在一个或两个时间段内向学生提供关于不同科目的约1小时的演示。学生可以注册至少一个他们选择的演示文稿,或两个或三个(第三个选择是另一个选择,以防其中一个不会出现)。他们必须是所有不同的选择。如果给定演示文稿的注册少于三次,则不会给出。如果有18个或更多,则两个块中将给出两次。我必须安排演示文稿,以便满足最大注册次数。

在以下情况下,调度很简单:

  1. 如果提供演示文稿(即注册> = 3),则始终只能满足一个演示文稿的注册;

  2. 如果两次给定的演示文稿中至少有一次给出两次,那么这些演示文稿的注册总是令人满意。

  3. 首先,汇总所有注册以确定哪些注册一次,哪些注册两次。如果学生已经注册了几乎没有其他注册的演示文稿,那么如果也会给出替代演示文稿。

    在一天结束时,我留下了一个无向加权图,其中顶点是演示文稿,边缘代表已注册演示组合的学生,每个演示文稿仅出现一次。权重对应于独特呈现组合的注册次数(从而避免平行边缘)。

    如果顶点或演示的数量大约为20或更少,我会想出一个在可接受的时间内完成的强力解决方案。但是,每个附加顶点将使该解决方案的运行时间加倍。大约28岁后,它很快就变得难以管理。

    今年我们有37场演讲,其中30场只有一次,最终出现在图表中。我现在正在尝试更大的图表如下:

    1. 查找所有离散组件并单独解决每个组件;
    2. 对于每个组件,递归删除叶节点和桥接边缘;
    3. 生成生成树(我正在使用Kruskal的算法非常好),保存删除的边缘;
    4. 通过一次将一个被移除的边添加回树中并剥离树的其余部分来生成基本周期集;
    5. 使用Gibbs-Welch算法,我生成从步骤4中获得的基本集开始的所有元素周期的完整集合;
    6. 计算每条边所属的奇数和偶数周期数;
    7. 创建边缘的优先级队列(下面讨论的排序)并从连接的组件中连续删除每个边缘,直到生成的组件为二分。
    8. 我找不到优先级队列的顺序,我可以证明结果与使用强力方法获得的解决方案一样可接受(它可能是NP-hard)。但是,我正在尝试这些方面:

      一个。如果边缘仅属于奇数周期,请先将其删除;

      湾如果边缘属于比奇数更多的奇数周期,则在属于比奇数更多的偶数周期的任何其他边缘之前将其移除;

      ℃。应首先移除重量最小的边缘。

      如果边缘属于奇数周期和偶数周期,则移除它会留下更大的奇数周期。这就是为什么我这样订购它们。显然,边缘所属的奇数周期数越大,优先级越高,但只有在较少的偶数周期受到影响时才会出现。

      还存在其他标准,但需要在图形问题之外加以考虑;例如,删除边缘有效地删除了其中一个演示文稿的注册之一,因此必须保持注意不要让注册的数量变得太小。

      (编辑:还有可能将演示文稿分成两个块,这些块几乎有足够的注册,例如15-16而不是18。但这意味着无论谁提供演示文稿都必须做两次,所以这是一种权衡。)

      提前感谢任何建议!

1 个答案:

答案 0 :(得分:0)

这个问题等同于NP-hard加权max cut problem,它要求将顶点划分为两部分,使得最大边数在部分之间。

我认为解决问题大小的最简单方法就是将其表示为二次整数程序,然后应用现成的求解器。配方看起来像

maximize (1/2) sum_{ij} w_{ij} (1 - y_i y_j)
subject to
y_i in {±1} for all i

其中w_ij是无向边ij的权重,如果存在则为零(因此可以省略相应的变量及其约束)。