算法设计与分析:稳定配对(Stable Matching)问题

引言

想象一场盛大的相亲派对:有n位男士和n位女士参加,每个人都对异性有自己的偏好排序。组织者希望将他们配成n对夫妻,但要求配对结果必须是稳定 的------也就是说,不存在这样一对男女:他们各自都有配偶,但彼此更喜欢对方,从而可能"私奔"破坏现有婚姻。

这就是经典的稳定婚姻问题(Stable Marriage Problem),由David Gale和Lloyd Shapley于1962年提出,并因此获得了2012年诺贝尔经济学奖。今天,我们就来深入探讨这个将数学、计算机科学和经济学完美结合的经典问题。

1、问题形式化:"稳定"的婚姻

1.1 基本定义

稳定婚姻问题可以形式化描述为:

  • 两个大小相等的集合:M = {m₁, m₂, ..., mₙ}(男士)和 W = {w₁, w₂, ..., wₙ}(女士)

  • 每个男士对所有女士有一个完整的偏好排序

  • 每个女士对所有男士有一个完整的偏好排序

  • 目标是找到一个完美匹配(一对一配对)μ,使得不存在不稳定配对

1.2 不稳定配对

一对男女(m, w)构成不稳定配对,如果满足:

  1. 在匹配μ中,m与μ(m)配对,w与μ(w)配对

  2. m比起μ(m)更喜欢w

  3. w比起μ(w)更喜欢m

如果存在这样的不稳定配对,这对男女就有动机离开各自配偶而在一起,匹配μ就不是稳定的。

2、Gale-Shapley算法

这个算法通常被称为"延迟接受算法",其核心思想可以用传统的求婚过程来理解。

2.1 算法伪代码

复制代码
初始化所有男士和女士均为自由状态
while 存在自由男士且该男士还有未求婚过的女士:
    选择一位自由男士m
    m向自己偏好列表中还未拒绝过他的最高排名女士w求婚
    if w是自由状态:
        m和w订婚(暂时配对)
    else (w已与m'订婚):
        if w比起m'更喜欢m:
            w与m'解除婚约,与m订婚
            m'变为自由状态
        else:
            w拒绝m,m保持自由状态
返回所有订婚配对

2.2 算法步骤说明

  1. **初始化阶段**:所有参与者和所有可能的求婚意向都被标记为"自由"状态
  2. **求婚阶段**:每位自由男士按照自己的偏好顺序,向尚未拒绝过他的女士求婚
  3. **回应阶段**:女士收到求婚后,如果她是自由的,则暂时接受;如果已订婚,则比较新旧两位男士在她偏好列表中的位置,保留更偏好的一位
  4. **迭代循环**:重复求婚-回应过程,直到所有男士都订婚(或所有男士都已向所有女士求过婚)
  5. **输出结果**:返回最终的订婚配对作为稳定婚姻匹配

3、具体例子

假设有3位男士(A,B,C)和3位女士(X,Y,Z),偏好如下:```

复制代码
男士偏好:
A: X > Y > Z
B: Y > X > Z
C: X > Y > Z

女士偏好:
X: B > A > C
Y: A > B > C
Z: A > B > C

执行步骤:

第一轮:A向X求婚,X接受(自由状态)

第二轮:B向Y求婚,Y接受(自由状态)

第三轮:C向X求婚,X已与A订婚,比较A和C,X更喜欢A(拒绝C)

第四轮:C向Y求婚,Y已与B订婚,比较B和C,Y更喜欢B(拒绝C)

第五轮:C向Z求婚,Z接受(自由状态)

最终匹配:A-X, B-Y, C-Z

4、正确性分析

(1) 算法总是终止

证明:每个男士最多向每位女士求婚一次,因此算法最多进行n²次求婚后终止。

(2)算法产生完美匹配

证明:结束时,每位男士都与一位女士配对,且配对是一一对应的。

(3)算法产生稳定匹配

证明:假设存在不稳定配对(m, w),其中m与w'配对,w与m'配对,且m更喜欢w,w更喜欢m。那么在算法执行过程中,m一定向w求过婚(因为他更喜欢w)。当m向w求婚时,w要么拒绝了m,要么接受了m后又抛弃了他。无论哪种情况,w最终都与一个她认为不如m的男士配对,这与w更喜欢m矛盾。

(4)男士最优性

在所有可能的稳定匹配中,算法给出的匹配对求婚方(男士)是最优的:每位男士得到的配偶至少与他在其他任何稳定匹配中可能得到的配偶一样好。

(5)女士最劣性

对称地,在所有可能的稳定匹配中,算法给出的匹配对接受方(女士)是最劣的:每位女士得到的配偶至多与她在其他任何稳定匹配中可能得到的配偶一样好。

5、复杂度分析

(1)时间复杂度

  • 基本Gale-Shapley算法:O(n²)

  • 每次求婚操作是O(1),最多n²次求婚

(2)空间复杂度

  • O(n²)存储偏好矩阵

  • 可以优化为O(n)存储偏好排名

6、总结与启示

稳定婚姻问题及其Gale-Shapley算法为我们提供了一个优雅的数学工具,用于解决现实世界中各种资源分配和双边匹配问题。从医学院实习匹配到学校招生,从肾脏交换到网络资源分配,这个简单的算法在各个领域发挥着重要作用。

相关推荐
孞㐑¥37 分钟前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风41 分钟前
代码随想录第十五天
数据结构·算法·leetcode
XX風1 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT061 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
想进个大厂2 小时前
代码随想录day37动态规划part05
算法
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
子春一2 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
人道领域2 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
TracyCoder1233 小时前
LeetCode Hot100(34/100)——98. 验证二叉搜索树
算法·leetcode