我知道使用Gale-Shapley可以确保找到稳定的匹配,但是如果给出匹配,我们如何验证匹配是稳定的匹配。换句话说,我应该考虑哪些条件是有效的并且是稳定的匹配条件。
答案 0 :(得分:1)
目前,我可以想到三种方式(在双向匹配市场中):
提议的递延验收是最优的,它使每个人都与他的匹配 最可能的稳定女性伴侣,并且也是 女人最差的,它使每个女人都与她最糟糕的马stable相匹配 男性伴侣。对于建议女性使用的延迟接受算法,反之亦然。
以此,您可以在每个男人和女人的名单上找到一系列可能的稳定伴侣,然后检查您当前匹配的伴侣是否在每个男人和女人的那个范围内。
总而言之,它们是我的粗略想法,因为我没有仔细考虑如何在代码中实现它并评估其运行时复杂性。据我所知,上述所有方法都可以在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