算法怎么玩(一): 从直男到渣男

简介:

目录

  • 前言
  • 稳定匹配
  • 不稳定对
  • Propose-And-Reject Algorithm
  • 最后

前言

文章内容取自 http://www.cs.cmu.edu/~arielpro/15896s16/slides/896s16-16.pdf 并有所修改, 如有侵权等问题, 请提示删除(手动感谢). 这次主要是开个系列分享分享有趣的算法.


稳定匹配(The Stable Matching Problem)

不稳定对(Unstable pair)

如果:

  • 男生x相比现有配对更喜欢女生y
  • 女生y相比现有配对更喜欢男生x

这就是一个不稳定对, 很好理解吧.
那么稳定匹配就是不存在不稳定对的匹配.
举个小栗子, 现在给出联谊上3男3女的喜欢表, 提什么男男/女女的, 一对多的, 麻烦关闭页面(手动无奈).

男生喜欢 1st 2nd 3rd
X A B C
Y B A C
Z A B C
女生喜欢 1st 2nd 3rd
A Y X Z
B X Y Z
C X Y Z

这里我们尝试给出一个解, 看是不是稳定匹配. X-C, Y-B, Z-A. 很明显, X, A, B是可能出事情的. 如果X-A, 就出事了, 因为A比起现在匹配的Z更喜欢X; 同理, X-B也出事了, B可是最喜欢X的. 那么GG, 红线崩了.

男生喜欢 1st 2nd 3rd
X A B C
Y B A C
Z A B C
女生喜欢 1st 2nd 3rd
A Y X Z
B X Y Z
C X Y Z

X-A, Y-B, Z-C如何呢? 发现是稳定的, 因为A, B都最不喜欢Z.

男生喜欢 1st 2nd 3rd
X A B C
Y B A C
Z A B C
女生喜欢 1st 2nd 3rd
A Y X Z
B X Y Z
C X Y Z

但是不是每次都这么好运能找到稳定匹配的, 所以需要算法帮助解决问题.


Propose-And-Reject Algorithm

Propose-And-Reject Algorithm(Gale-Shapley 1962)可以解决问题. 贴一下伪代码, 这个算法原本是解决求婚问题的, 但是当成联谊看比较合适, 哪有人日常换未婚夫的(手动滑稽).

Initialize each person to be free.
while (some man is free and hasn't proposed to every woman) {
    Choose such a man m
    w = 1st woman on m's list to whom m has not yet proposed
    if (w is free)
        assign m and w to be engaged
    else if (w prefers m to her fiancé m')
        assign m and w to be engaged, and m' to be free
    else
        w rejects m
}

那么上面那一题就很快得出答案了, 就是我给的稳定匹配.
但是需要证明一下, 当然我引用的文献证明, 我的证明能力就很佛系了.

  • 完整性证明

全部男女都找到了另一半

  • 假设Z凉凉, 没有匹配.
  • 那么由于一对一的限制, 某个妹子A也没人爱. 换句话说, 没人向A表白.
  • 但是Z必须要向全部妹子表白才结束循环.
  • 所以反证成功.
  • 稳定性证明

没有不稳定对

  • 假设A-Z不稳定, 要搞事.
  • 情况1: Z没有向A表白
  • 说明Z更喜欢现有伴侣而不是A.
  • A-Z稳定.
  • 情况2: Z有向A表白
  • A拒绝了Z(立刻或者之后甩了).
  • 那说明A更喜欢现有伴侣.
  • A-Z稳定.
  • 反证成功.

最后

想要代码实现你要加上数据结构, 复杂度是n的平方, 毕竟程序 = 数据结构 + 算法. 然后的话, 所以想要获得幸福, 要主动出击以及保持好形象(手动捂脸). 还有还有, 我不是标题党哈, 你试试跑个10男10女的匹配, 这个算法绝对渣出天际. 喜欢记得点赞, 有意见或者建议评论区见~

目录
相关文章
|
8月前
|
数据挖掘 数据处理 Python
Python:我居然是渣男!万万没想到“渣男”语录排名第一的竟然是这一句!
Python:我居然是渣男!万万没想到“渣男”语录排名第一的竟然是这一句!
|
C++
201812-1小明上学
201812-1小明上学
54 0
201812-1小明上学
|
前端开发 Oracle JavaScript
第23个520情人节,女程序猿送男朋友什么?
第23个520情人节,女程序猿送男朋友什么?
197 0
第23个520情人节,女程序猿送男朋友什么?
|
小程序 程序员
520,来自IT男的浪漫
520,来自IT男的浪漫
360 0
520,来自IT男的浪漫
|
Web App开发 程序员 Python
对于IT男的表白方式,你可能存在什么误解
今天随手翻UC,看到一个关于程序猿520表白的段子。 虽然是17年的老梗,但当时帖子比较火名为“她根本配不上我这么聪明的男人!” [段子链接] 段子是一张长图,想想最近比较无聊,拿它做个Python的练习题呗。
103 0
|
人工智能 算法 BI
算法笔试模拟题精解之“Tom爱吃巧克力”
根据题意,可以得知这道题可以运用贪心算法,策略是每次都去买最便宜的巧克力。
前端玩泥巴 - 体贴用户,拒做渣男
本文以淘宝人生成就页面为例,从前端开发人员的角度对页面交互、动画设计的探讨与思考,不涉及代码与实现。
|
云安全 安全 程序员
解密阿里云安全女程序员维棠 、牵尘代码诗!
2018年已过,我们迎来了新的一年,在机遇与挑战同在的环境下,我们更应勤于学习。为了方便大家学习,小编为大家盘点了2018年云安全 云栖号最火的干货文章分享给大家,让我们在新的一年里共同学习和成长!
5272 0
【智力题】兄弟姐妹的性别
一家人共有兄弟姐妹七人,分别为甲、乙、丙、丁、戊、己、庚。有如下情况:(1)甲有三个妹妹;(2)乙有一个哥哥;(3)丙是女的,她有两个妹妹;(4)丁有两个弟弟;(5)戊有两个姐姐;(6)己也是女的,但她和庚没有妹妹。
1068 0

热门文章

最新文章