算法 - 最大二分匹配的变体

标签 algorithm matching bipartite

我正在处理最大二分匹配问题的一个变体。 原问题如下:

有 M 个求职者和 N 个职位。每个申请人都有他/她感兴趣的工作子集。每个职位空缺只能接受一个申请人,并且只能为一个职位任命一个职位申请人。为求职者分配工作,以便尽可能多的求职者找到工作。

enter image description here

附加约束是:

每个申请者都属于一个特定的组。现在,我们想要最大化快乐组的数量,而不是最大化申请人的数量。快乐的群体是所有求职者都能找到工作的群体。

欢迎任何想法/讨论!

最佳答案

与永恒的联系

如果你能解决这个问题,你可能会在 Eternity puzzle 上赢一百万英镑.

在这个谜题中,您必须将 209 个多边形拼到一 block 棋盘上。

缩减是为每个 block 和位置的组合分配一个组。

每个小组都有一个领导者,他只对与演奏他的作品相对应的工作感兴趣。

每个组也有一个人负责瓷砖中的每个方 block :该人只对填充游戏板上相应方 block 的工作感兴趣。

如果你能找到 209 个快乐组的解决方案,那么你就找到了这个难题的解决方案!

独立集的连接

这是 NP-hard 因为它可以用来解决 maximum independent set这是一个已知的 NP-hard 问题。

假设我们有一个图,我们想在其中找到最大独立集。

为每条边做一个作业。

为每个顶点创建一个组。

假设顶点 x 连接到三个边 a,b,c。我们将 3 人添加到组 x。每个人只对一份工作感兴趣。第一个对工作 a 感兴趣,第二个对工作 b 感兴趣,第三个对工作 c 感兴趣。

然后找到最大的快乐组就相当于最大的独立集。

关于算法 - 最大二分匹配的变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43086310/

相关文章:

Python - 动态构建嵌套树

shell - 检查系统上某个根CA是否受信任

php - 在另一个词之前或之后获取一个词

algorithm - 最小化二分图中的交叉数

java - 如何在 Java 中实现二分图?

Java - "not"扫描仪问题

algorithm - 动态规划寻找点的最小权重覆盖

python - 有效地在列表中执行 "cancelling out"操作

c++ - 第一次的FlannBasedMatcher影响后面的FlannBasedMatcher的结果

python - networkx maximal_matching() 不返回最大匹配