zoukankan      html  css  js  c++  java
  • GaleShapley算法

     Gale-Shapley算法
    来源: 刘进的日志

    Gale-Shapley算法

    近来学习了很有趣的Gale-Shapley算法,又名求婚-拒绝算法。

    n个男人和n个女人相互配对。每个男人m对所有的女人排名,如果m给w的排名高于w’,就说m偏爱w超过w’。把m的按顺序的排名作为他的优先表。类似的,每个女人也对所有的男人排名。要求求他们的一个稳定匹配。

    所谓稳定匹配是这样的:给定一个完美匹配S,如果在S中存在两个对(m,w),(m’,w’),其中m更爱w’,且w’更爱m,那么配对(m,w’)就是一个不稳定的因素,他们原来的婚姻都将不稳定。我们的目标就是建立一个不含有上述不稳定因素的配对集合。

    算法如下:

     

    初始所有的m∈M和w∈W都是自由的

    While 存在男人m是自由的且还没对n个中每个女人都求过婚

       选择一个这样的男人m

       令w是m的优先表中m还没求过婚的最高排名的女人

       If  (w是自由的)

         (m,w)变成约会状态

       Elseif(w当前与m’)约会

              If  w是更偏爱m’then

                  m保持自由

              Else w更偏爱m  then

                  (m,w)变成约会状态

                   m’变成自由

              endif

        endif

    Endwhile

    输出已约会的配对的集合,即为稳定匹配。

     

    算法分析得知,这个算法带有某种不公平性,即如果男的求婚,女的就是不幸的;而如果女的求婚,男的也是如此。例子如下:

    有这样的优先表:

    m更加偏爱w甚于w’,即在m的表中w排在w’的前面

    m’更加偏爱w’甚于w

    w更加偏爱m’甚于m

    w’更加偏爱m甚于m’

    那么执行这个算法将得到(m,w),(m’,w’)这样的稳定配对,然而女人的偏爱被忽略了。w是更加偏爱m’的,w’更加偏爱m的,但是她们都没能得到满意的。
  • 相关阅读:
    HDU 2089 不要62 【数位dp】
    HDU 3507 Print Article(dp+斜率优化)
    HDU 1078 FatMouse and Cheese【记忆化搜索】
    codeforces 366C Dima and Salad 【限制性01背包】
    HDU
    HDU 2844 Coins 【多重背包】(模板)
    hdu 2167 方格取数 【状压dp】(经典)
    poj 1160 Post Office 【区间dp】
    Poj
    HDU 1542 矩形面积并【离散化+线段树+扫描线】
  • 原文地址:https://www.cnblogs.com/acSzz/p/2728461.html
Copyright © 2011-2022 走看看