星火网
首页 灵感 学院 工具 投稿

揭秘“相亲算法”:如何用数学找到让没人想出轨的完美匹配?|匹配理论深度攻略:典型例题精讲

适用年级

奥数

难度等级

⭐⭐⭐

资料格式

PDF 可打印

最近更新

2025-12-20

💡 阿星精讲:匹配理论 的本质

想象一下,你是一个天才红娘,手上有 \( n \) 位男生和 \( n \) 位女生。每个人心里都有一个“理想对象排行榜”。你的任务不是简单地乱点鸳鸯谱,而是要设计一套无可挑剔的相亲算法,确保最终配成的 \( n \) 对情侣中,没有人会“出轨”——也就是不存在一对不是情侣的男女,彼此喜欢对方胜过喜欢自己现在的伴侣。这种状态就叫 “稳定匹配”

1962年,盖尔(Gale)和沙普利(Shapley)证明,无论大家的偏好列表如何,稳定匹配总是存在的。他们设计的“延迟接受算法”(俗称“求婚算法”),就像一场精心设计的舞会:男生轮流向自己最心仪的女生求婚,女生则暂时接受她目前遇到的最好选择,并婉拒更差的。这个过程保证了最终没人想破坏现有关系去私奔。这个深刻而优美的理论在2012年为他们赢得了诺贝尔经济学奖。它不仅在婚恋市场成立,更广泛应用于大学招生、医院实习分配、器官移植等关键社会领域。

数学上,我们定义男生集合 \( M = \{m_1, m_2, ..., m_n\} \),女生集合 \( W = \{w_1, w_2, ..., w_n\} \),以及每个人的严格偏好排序。匹配 \( \mu \) 是一个一一对应的映射。稳定匹配的核心条件是:不存在一对 \( (m, w) \),使得 \( m \) 相对于 \( \mu(m) \) 更偏好 \( w \),同时 \( w \) 相对于 \( \mu(w) \) 更偏好 \( m \)

🔥 经典例题精析

题目:现有三位男生 \( A, B, C \) 和三位女生 \( X, Y, Z \)。他们的偏好顺序如下表所示(1为最喜欢)。请运用Gale-Shapley算法(男生主动求婚),找出一个稳定匹配。

男生偏好:
A: \( Y > X > Z \)
B: \( X > Y > Z \)
C: \( X > Y > Z \)

女生偏好:
X: \( B > A > C \)
Y: \( A > C > B \)
Z: \( A > B > C \)

🔍

阿星拆解:我们模拟一场“男生单膝跪地,女生谨慎选择”的求婚大会。

第一轮:男生向自己榜单首位求婚。
- \( A \) → \( Y \)(Y收到:A)
- \( B \) → \( X \)(X收到:B)
- \( C \) → \( X \)(X收到:B, C)
女生决策:
- \( Y \) 暂时接受 \( A \),状态 \( (A, Y) \)。
- \( X \) 比较 \( B \) 和 \( C \),更爱 \( B \)(因为 \( B > C \)),故接受 \( B \),拒绝 \( C \)。状态 \( (B, X) \)。
- \( Z \) 无人问津。

第二轮:被拒的 \( C \) 向榜单第二的 \( Y \) 求婚。
- \( C \) → \( Y \)(Y现有伴侣A,收到C的求婚)
女生决策:
- \( Y \) 比较 \( A \) 和 \( C \),更爱 \( A \)(\( A > C \)),故拒绝 \( C \)。
- \( C \) 被拒,转向榜单第三的 \( Z \)。

第三轮:
- \( C \) → \( Z \)(Z收到:C)
女生决策:
- \( Z \) 无人问津,欣然接受 \( C \)。状态 \( (C, Z) \)。

算法终止:所有男生都有伴侣,算法结束。
最终稳定匹配为:\( \{ (A, Y), (B, X), (C, Z) \} \)。

稳定性验证:检查所有可能“出轨组合”:
- \( (A, X) \): A 更爱 Y(现伴侣)而非 X;不构成威胁。
- \( (B, Y) \): B 更爱 X(现伴侣)而非 Y。
- \( (C, X) \) 或 \( (C, Y) \): C 最爱X和Y,但X更爱B,Y更爱A,均拒绝C。
因此,匹配稳定。

口诀:
男生主动求,心仪排前头。
女生备选中,择优暂牵手。
被拒往下走,全员成对休。
自此无怨偶,稳定解自留。

🚀 举一反三:变式挑战

变式一:基础转换

“医院与实习生”模型:3家医院 \( H_1, H_2, H_3 \) 和3名医学生 \( S_1, S_2, S_3 \)。医院有学生偏好,学生有医院偏好。规则改为“医院主动提供offer”(即医院主动版G-S算法)。给定偏好列表,请找出稳定匹配。这考察了你对算法“主动方”角色互换的理解。

变式二:逆向思维

在一个已知的稳定匹配 \( \{ (m_1, w_3), (m_2, w_1), (m_3, w_2) \} \) 中,如果男生 \( m_1 \) 的偏好列表是 \( w_2 > w_1 > w_3 \),女生 \( w_3 \) 的偏好列表是 \( m_2 > m_3 > m_1 \)。试分析:这对 \( (m_1, w_3) \) 可能是一个“稳定匹配对”吗?为什么?这考察你对“稳定性”定义的深层理解。

变式三:综合拔高

“不完全列表”与“单身”问题:有4个男生 \( A,B,C,D \) 和3个女生 \( X,Y,Z \)。这意味着必然有一人单身。每个人的偏好列表中只包含自己可接受的异性(如A的列表:\( Y > X \))。请设计规则,并找到一个匹配,使得没有(可接受的)两人同时更喜欢对方胜过自己的当前状态(单身视为与“空位”匹配)。这触及了匹配理论在现实中的复杂扩展。


答案与解析

经典例题答案: 稳定匹配为 \( \{(A, Y), (B, X), (C, Z)\} \)。(解析见上方阿星拆解部分)

变式一解析(思路): 算法流程与男生主动版完全对称。医院 \( H_i \) 依次向自己最心仪且尚未被拒绝的学生发出offer。学生 \( S_j \) 在收到的所有offer和当前暂接受的offer中选择最好的一个,拒绝其他。重复直至所有医院席位满员或无法再发出offer。最终匹配对医院(主动方)是最优的,对学生(被动方)是最劣的(在所有稳定匹配中)。

变式二解析:
不可能。我们来检查稳定性条件。
- 对于 \( m_1 \):他的现伴侣是 \( w_3 \),但他更偏好 \( w_2 \)(因为 \( w_2 > w_3 \))。
- 对于 \( w_2 \):她的现伴侣是 \( m_3 \)。
- 我们需要检查 \( w_2 \) 是否也更偏好 \( m_1 \) 胜过 \( m_3 \)?题目未给出 \( w_2 \) 的偏好列表,所以无法判断
- 但是,关键点在于:\( m_1 \) 单方面已经更偏好别人(\( w_2 \)),这本身不破坏稳定。破坏稳定需要双方都更偏好对方。然而,我们分析 \( m_1 \) 和 \( w_3 \) 这一对:\( m_1 \) 把 \( w_3 \) 排在最后,\( w_3 \) 把 \( m_1 \) 排在最后。他们都没有从这段匹配中获得任何可能更差的选择(因为彼此都是对方清单上的最后一名)。在他们的偏好视角下,找不到比对方更差的伴侣了。所以,他们在一起是可能的,并且这一对本身不构成对任何其他对的威胁。因此,仅凭给出的信息,不能断定这不是稳定匹配的一部分。此题陷阱在于引导我们仅凭一方不满意就判定不稳定,而忽略了稳定性的定义是“不存在相互更偏好”的破坏对。

变式三解析(思路):
这是一个“一方多于另一方”的匹配问题,常用“医院-实习生”(HR)模型解决,它是G-S算法的扩展。我们可以引入一个“虚拟女生” \( \emptyset \) 来平衡人数,所有男生将其排在可接受列表末尾,且该虚拟女生接受所有人但偏好最低。然后运行男生主动的G-S算法。最终与 \( \emptyset \) 匹配的男生即为单身。匹配的“稳定性”定义为:不存在一个男生 \( m \) 和一个女生 \( w \),使得 \( m \) 更偏好 \( w \) 而非他当前的伴侣(或单身),并且 \( w \) 也更偏好 \( m \) 而非她当前的伴侣。这样就能找到一个稳定匹配。

PDF 典型例题打印版

为了节省资源,点击后将为您即时生成 PDF