算法设计系列笔记(一)


算法的起源:在1962年,两个数学经济学家David Gale和Lloyd Shapley问了这样一个问题:能否设计一个学院招生或者工作招聘等自动实施(self-enforcing)的过程即给一组招聘者和应聘者的优先列表,我们能否设计这样一个算法:对于每一个招聘方E和每一个没有为E工作的应聘方A,使得下面两种情况中的一个成立:
  1. E相对于A更喜欢每一个接受它的应聘者;
  2. A相对于为E工作更喜欢为现在的公司工作;
如果这个成立,那么结果就是稳定的
为了简化这个问题,我们考虑一一匹配的情况。n个男人M={m1,m2,...,mn}和n个女人W={w1,w2,...,wn}匹配结婚的事情。
完美匹配S'(perfert matching)是指M中的每个成员和W中的每个成员在集合S’中只出现一次的匹配。
对于S,不稳定的对(instability)是指在S中有两对(m,w),(m',w')有以下的性质:m相对与w更喜欢w',w'相对于m'更喜欢m。那么(m,w')是一个不稳定对(instability)
一个匹配是稳定的要满足两个条件(1)它是完美的(2)在该匹配中没有不稳定的对(instability)
注:对于通过一种情况可能会有多种稳定匹配的方式。

算法设计:
 initially all m belongs to M and w belong to W are free
 while there is a man m who is free and hasn't proposed to every woman
    choose such a man m
    let w be the highest-ranked woman in m's preference list to 
        whom m has not yet proposed
    if w is free then
        (m,w) become engaged
    else w is currently engaged to m'
        if w prefers m' to m then
            m remains free
        else w prefers m to m'
            (m,w) become engaged
            m' become free
        endif
    endif
endwhile
return the set S of engaged pairs

算法分析:
view:
    (1)w开始进入配对状态直到她收到第一男人的求婚,而且与她配对的男人会越来越好(根据她的喜爱列表)
    (2)男人求婚的对象越来越差(根据他的喜爱列表)
    (3)G-S算法至多进行n^2次遍历while循环后结束
    (4)在算法执行过程中的某点m是单身,那么存在一个他还没有求过婚的女人
            proof:
            假设存在一个m是单身但是已经向每一个女人求过婚,根据(1),我们知道每一个女人已经配对完成,那么必须需要n个男人与她配对,
            但是总共只有n个男人,而且m没有配对,所以矛盾产生了
    (5)算法执行结束后返回的集合S是一个完美匹配
            proof:
            假设算法执行结束后仍有一个男人m是单身,则m肯定已经向每一个女人求婚过,否则while循环不会退出。根据(4)中的矛盾,不存一个男人是单身而且已经向每一个女人求婚过,所以矛盾产生了
    (6)算法执行结束后返回的集合S是一个稳定匹配
            proof:
            S是一个稳定匹配有两个条件,一个是它是一个完美匹配,另一个是它是一个不存在不稳定对的匹配。
            在(5)中我们已经证明算法执行结束后返回的集合S是一个完美匹配,接下来,我们只要证明S中不存在不稳定对即可。
            假设S中存在不稳定对(m,w),(m',w'),其中
            m相对与w更喜欢w',并且w'相对于m'更喜欢m
            那我们问一个问题:m在执行过程中有没有向w求过婚?
            如果没有,那么在m的喜爱列表中,w必须高于w',这与我们的假设矛盾;
            如果有,那么意味着m被拒绝了因为w'当前的配对者m''高于m,但是w'最后的配对者是m',说明m'在w'的喜爱列表中高于m'’,也就是m'高于m,这与我们的假设矛盾。

有效伴侣:如果存在一个稳定匹配包含一个配对(m,w),那么w是m的一个有效伴侣
最佳有效伴侣:如果w是m的有效伴侣,而且在m的喜爱列表中没有一个是m的有效伴侣的女人等级比w高,那么w是m的最佳有效伴侣
                        用best(m)来表示m的最佳有效伴侣

    (7)用S*来表示集合{(m,best(m));m 属于M}
            每一个G-S算法执行得到的结果在集合S*中
            proof:
            假设在一个G-S算法的执行过程E中,一个男人没有和他的最佳有效伴侣进行配对。
            因为男人是按照他的喜爱列表递减进行求婚的,所以在执行过程E中他一定被他的最佳有效伴侣拒绝过。
            考虑在E中,m是第一个被他的有效伴侣w拒绝的男人,再次因为男人是按照他的喜爱列表递减进行求婚的,所以w一定是m的最佳有效伴侣。

              m被w拒绝有两种可能,一个是w现在的配对者更有好感而拒绝m,另一个是w切断了与m的联系而接受了另一个男人m’的求婚因为相对于m,w更喜欢m‘

           因为w是m的一个有效伴侣,那么存在一个稳定匹配S' 包含匹配对(m,w),那么在稳定匹配S’中,假设m‘与w'配对

            因为在E中,m是第一个被有效伴侣拒绝的人,所以m’没有被拒绝过,就与w进行了配对。因为m‘是按照自己的喜爱列表递减进行配对的,而且w’也是m'的有效伴侣,那么m'相对与w'更喜欢               w,而且我们早已知道w相对于m更喜欢m',那么在稳定匹配S'中(m',w)是一个不稳定对。这与S'是一个稳定匹配相矛盾。

最差有效伴侣:m是w的最差有效伴侣如果m是w的有效伴侣,而且没有一个是w有效伴侣的男人排名比m低。

    (8)在稳定匹配S*中,每一个女人和她的最差有效伴侣配对。
            proof:
             假设在稳定匹配S*中包含(m,w),而且m并不是w的最差有效伴侣。
            那么存在一个稳定匹配S'包含(m',w)而w相对于m'更喜欢m,
            在S'中m与w'进行配对,而w是m的最佳有效伴侣,所以m相对于w'更喜欢w
            所以在S'中,存在一个不稳定对(m,w),产生了矛盾。

            


    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值