验证稳定匹配的算法?

时间:2019-10-17 19:56:14

标签: algorithm

我知道使用Gale-Shapley可以确保找到稳定的匹配,但是如果给出匹配,我们如何验证匹配是稳定的匹配。换句话说,我应该考虑哪些条件是有效的并且是稳定的匹配条件。

2 个答案:

答案 0 :(得分:1)

目前,我可以想到三种方式(在双向匹配市场中):

  1. 像@jrook先前回答中那样进行野蛮搜索。
  2. 您运行过两次Gale-Shapely算法,一个是男人提议的,另一个是女人提议的,

提议的递延验收是最优的,它使每个人都与他的匹配 最可能的稳定女性伴侣,并且也是 女人最差的,它使每个女人都与她最糟糕的马stable相匹配 男性伴侣。对于建议女性使用的延迟接受算法,反之亦然。

以此,您可以在每个男人和女人的名单上找到一系列可能的稳定伴侣,然后检查您当前匹配的伴侣是否在每个男人和女人的那个范围内。

  1. 如果您知道稳定的室友问题或阅读论文The Complexity of Counting Stable Marriages,则可以使用该算法的第一阶段的类比来获得一系列可能的稳定伙伴,然后检查您当前匹配的伙伴是否位于每个男人和女人的范围。

总而言之,它们是我的粗略想法,因为我没有仔细考虑如何在代码中实现它并评估其运行时复杂性。据我所知,上述所有方法都可以在O(n ^ 2)时间内运行,因此考虑到实现方法的简单性,方法一还不错。我想将会有一种更有效的方法(也许利用顶级交易周期的想法)。如果我有任何错误,请随时指出。

P.S .:术语“可能的稳定伴侣”指的是以下示例中所述的情况:如果男人m和女人w在稳定匹配中匹配,则我们说w是m的可能的稳定伴侣。

答案 1 :(得分:0)

首先,如果您通过GS算法获得了匹配,it is guaranteed that

  

男人向女人求婚的Gale-Shapley算法总是产生效果   在所有马matching中最适合所有人的马matching   匹配项

因此无需验证稳定性。

如果您具有随机匹配项,并且想要检查它是否稳定,则可以参考稳定匹配项的definition

  

给出n位男性和n位女性,其中每个人都对   异性按喜好顺序嫁给男人和女人   在一起,这样就不会有两个异性会   他们俩宁愿彼此之间,而不是彼此之间当前的伙伴。 在那里   没有这样的人,婚姻就被认为是稳定的。

因此可以验证是否没有这样的对。我们只需要检查每个人的当前合作伙伴,而不是其排名列表中排名较高的合作伙伴。如果这些较高级别的选择之一也喜欢此人,则匹配不稳定。

伪代码:

for w in women:
    for m in [men w would prefer over current_partner(w)]:
        if m prefers w to current_partner(m) return false

return true