稳定匹配问题(一)

来源:互联网 发布:python上传图片步骤 编辑:程序博客网 时间:2024/06/04 20:00

稳定匹配问题(一)

经典稳定匹配问题--Gale-Shapley算法[1]

1. 算法描述

算法特点:延迟决定、产生的结果有偏向性

举例说明:  man  woman              woman   man

            1A  B  C                    A2  1  3

            2B  A  C                    B1  2  3

            3A  B  C                    C1  2  3

算法产生的稳定匹配:

1.男士主动:{1A),(2B),(3C}

2.女士主动:{1B),(2A),(3C}

2. 算法的时间复杂度为,平均时间复杂度为

3. 算法正确性:最终产生一个稳定的完美匹配

4. 算法有趣的性质

1)男士的对象越来越差、女士的对象越来越好

2)最终产生的分配是对所有男士的最佳的稳定匹配(male-optimal

3)最终产生的分配是对所有女士的最差的稳定匹配(female-optimal)

(如果是女士主动,则最终产生的分配是对所有女士最佳、对所有男士最差的稳定分配)

很明显,经典的问题gale-shapley算法只是可以得到一组带有偏向性的稳定匹配结果,而在文献[2]中提出了一个可以找出所有稳定匹配结果的方法,该方法的可以在多项式时间内找到结果。

方法解析如下:

例子采用论文中的例子(每一行的第一个数表示行数)

男性最初列表 [[1, 3, 1, 5, 7, 4, 2, 8, 6], [2, 6, 1, 3, 4, 8, 7, 5, 2], [3, 7, 4, 3, 6, 5, 1, 2, 8], [4, 5, 3, 8, 2, 6, 1, 4, 7], [5, 4, 1, 2, 8, 7, 3, 6, 5], [6, 6, 2, 5, 7, 8, 4, 3, 1], [7, 7, 8, 1, 6, 2, 3, 4, 5], [8, 2, 6, 7, 1, 8, 3, 4, 5]]

女性最初列表 [[1, 4, 3, 8, 1, 2, 5, 7, 6], [2, 3, 7, 5, 8, 6, 4, 1, 2], [3, 7, 5, 8, 3, 6, 2, 1, 4], [4, 6, 4, 2, 7, 3, 1, 5, 8], [5, 8, 7, 1, 5, 6, 4, 3, 2], [6, 5, 4, 7, 6, 2, 8, 3, 1], [7, 1, 4, 5, 6, 2, 8, 3, 7], [8, 2, 5, 4, 3, 7, 8, 1, 6]]

之后通过2点的要求得到一个shortlist,要求如下:(m表示男性,w表示女性)

1)如果mw匹配,那么代表着m不存在其他的稳定匹配可以让他获得比w更好的伙伴

2)如果w接受了m,那么代表w不存在其他的稳定匹配可以让她比m更差的伙伴

简化男性列表 [[3, 1, 5, 7, 4], [1, 3, 4, 8, 7], [7, 4, 3, 1, 2, 8], [5, 8, 6, 1, 4, 7], [4, 2, 8, 7, 3, 6, 5], [6, 5, 7, 4, 3], [8, 6, 2, 3, 4, 5], [2, 7, 1, 3, 5]]

简化女性列表 [[4, 3, 8, 1, 2], [3, 7, 5, 8], [7, 5, 8, 3, 6, 2, 1], [6, 4, 2, 7, 3, 1, 5], [8, 7, 1, 5, 6, 4], [5, 4, 7, 6], [1, 4, 5, 6, 2, 8, 3], [2, 5, 4, 3, 7]]

而后根据以下2点要求得到rotations

1shortlist的第一位

2shortlist中的第二位

可以得到以下rotations

[[[1, 3], [2, 1]], [[3, 7], [5, 4], [8, 2]], [[4, 5], [7, 8], [6, 6]]], [[[1, 1], [6, 5], [8, 7]], [[2, 3], [3, 4]], [[4, 8], [7, 6], [5, 2]]], [[[2, 4], [5, 8], [6, 7]], [[3, 3], [8, 1]]], [[[1, 5], [5, 7], [8, 3]]], [[[3, 1], [7, 2], [5, 3], [4, 6]]]

Rotations之间的索引关系为:

 {1: none, 2: none, 3: none, 4: {1, 2, 3}, 5: {1, 2}, 6: {2, 3}, 7: {4, 5, 6}, 8: {4, 5}, 9: {8, 7}, 10: {9}}

根据rotations可以得到以下23种稳定匹配的结果:

[[[1, 3], [2, 1], [3, 7], [4, 5], [5, 4], [6, 6], [7, 8], [8, 2]],

[[1, 1], [2, 3], [3, 7], [4, 5], [5, 4], [6, 6], [7, 8], [8, 2]],

[[1, 3], [2, 1], [3, 4], [4, 5], [5, 2], [6, 6], [7, 8], [8, 7]],

[[1, 3], [2, 1], [3, 7], [4, 8], [5, 4], [6, 5], [7, 6], [8, 2]],

[[1, 1], [2, 3], [3, 4], [4, 5], [5, 2], [6, 6], [7, 8], [8, 7]],

[[1, 1], [2, 4], [3, 3], [4, 5], [5, 2], [6, 6], [7, 8], [8, 7]],

[[1, 1], [2, 3], [3, 7], [4, 8], [5, 4], [6, 5], [7, 6], [8, 2]],

[[1, 3], [2, 1], [3, 4], [4, 8], [5, 2], [6, 5], [7, 6], [8, 7]],

[[1, 3], [2, 1], [3, 4], [4, 6], [5, 8], [6, 5], [7, 2], [8, 7]],

[[1, 1], [2, 3], [3, 4], [4, 8], [5, 2], [6, 5], [7, 6], [8, 7]],

[[1, 5], [2, 3], [3, 4], [4, 8], [5, 2], [6, 7], [7, 6], [8, 1]],

[[1, 1], [2, 4], [3, 3], [4, 8], [5, 2], [6, 5], [7, 6], [8, 7]],

[[1, 1], [2, 3], [3, 4], [4, 6], [5, 8], [6, 5], [7, 2], [8, 7]],

[[1, 5], [2, 4], [3, 3], [4, 8], [5, 2], [6, 7], [7, 6], [8, 1]],

[[1, 5], [2, 4], [3, 1], [4, 8], [5, 2], [6, 7], [7, 6], [8, 3]],

[[1, 5], [2, 3], [3, 4], [4, 6], [5, 8], [6, 7], [7, 2], [8, 1]],

[[1, 1], [2, 4], [3, 3], [4, 6], [5, 8], [6, 5], [7, 2], [8, 7]],

[[1, 5], [2, 4], [3, 3], [4, 6], [5, 8], [6, 7], [7, 2], [8, 1]],

[[1, 5], [2, 8], [3, 3], [4, 6], [5, 7], [6, 4], [7, 2], [8, 1]],

[[1, 5], [2, 4], [3, 1], [4, 6], [5, 8], [6, 7], [7, 2], [8, 3]],

[[1, 5], [2, 8], [3, 1], [4, 6], [5, 7], [6, 4], [7, 2], [8, 3]],

[[1, 7], [2, 8], [3, 1], [4, 6], [5, 3], [6, 4], [7, 2], [8, 5]],

[[1, 7], [2, 8], [3, 2], [4, 1], [5, 6], [6, 4], [7, 3], [8, 5]]]

 

如果刚好你也在研究稳定匹配问题,可以私聊我哈,探讨一下。

 

参考文献:

[1] 王培志,杨依山.劳埃德·沙普利对经济学的贡献——2012年度诺贝尔经济学奖得主学术贡献评介[J].经济学动态, 2012(12):94-100.

[2]Irving R W, Leather P, Gusfield D. An efficient algorithm for the optimalstable marriage[J]. Journal of the Acm, 1987, 34(3):532-543.

原创粉丝点击