zoukankan      html  css  js  c++  java
  • 稳定匹配问题学习小记

    问题

    (n)个男人,(n)个女人。每个男的心中都有对这(n)个女的优先级顺序,每个女的心中也有对这(n)个男的优先级顺序。

    现在要找到一种匹配方式,使得不存在一对男女,互相认为对方比自己当前匹配的对象优。


    算法

    每个男人按照优先级顺序降序尝试向女人求婚,尝试过的不会再尝试。

    每次找到一个单身男人(找不到结束),尝试跟下一个没有尝试过的女人求婚。

    如果女人单身或者觉得当前配对对象不如这个男人,就把对象换成当前男人。


    性质

    有穷性:算法一定在(n^2)次内结束。

    完美性:最后不会有单身男女。

    稳定性:

    如果存在(B_0,G_0),当前匹配了((B_0,G_1),(B_1,G_0)),但是(B_0,G_0)都觉得对方比当前对象更优。因为(B_0)在向(G_1)求婚之前,先向(G_0)求婚;但是(G_0)拒绝了它,因此(B_1)应该比(B_0)对于(G_0)更优,矛盾。

    对于所有男性最优(最优定义为,对于某个男性而言,在所有的稳定匹配方案中,最优的对象)

    假设(B_0)的最优匹配是(G_0),然而算法流程中(B_0)(G_0)拒绝了,并且也是第一个被最优对象拒绝的悲惨的男人。假设此时(G_0)匹配到了(B_1)

    因为(B_0)(G_0)表白过但后面被拒绝了,所以在(G_0)心目中(B_1)(B_0)优。

    因为(B_0)是第一个被最优对象拒绝的,所以对于(B_1)来说,(G_0)不会劣于他的最优对象。

    由定义得,存在一种稳定匹配的方案,最终(B_0,G_0)配对,(B_1)匹配的对象不优于(B_1)的最优对象。于是对(B_1)而言,(B_1)匹配的对象劣于(G_0);又因对于(G_0)而言,(B_1)(B_0)优。此时不稳定。

    对于所有女性最劣:

    如果女性(G_0)没有匹配到最劣匹配(B_0),而是匹配到了(B_1)

    对于(G_0)来说(B_1)(B_0)更优。

    又因为男性最优,所以对于(B_1)来说(G_0)是最优的。

    由定义得,存在一种稳定匹配的方案,最终(B_0,G_0)配对。然而在这个方案中,对于(G_0)来说(B_1)更优,对于(B_1)来说(G_0)最优,此时不稳定,矛盾。


    小细节(YYT提醒):在实现的时候,不能在外面循环(n)次,然后对里面的每个单身男人进行操作。因为可能有的男人当前不单身,但后来单身了,最终没有尝试过求婚过所有女人。

  • 相关阅读:
    《张艺谋这个人》较真
    《智能》是真智能
    《解密小米之互联网下的商业奇迹》
    《三毛。。。。》烂漫
    《盛典―― 诺奖之行》
    常用iOS、Mac框架和库及常用中文开发博客
    《人脸识别与人体动作识别技术及应用》
    《程序员第二步从程序员到项目经理》
    《信息安全导论》
    [leetCode]141.环形链表
  • 原文地址:https://www.cnblogs.com/jz-597/p/14730937.html
Copyright © 2011-2022 走看看