当前课程知识点:算法设计与分析 > 1 Introduction of Algorithm > 1.3 Gale-Shapley Algorithm > Gale-Shapley Algorithm
对于这一问题
Gale和Shapley在1962年给出了
追求-拒绝算法
可以保证找到一个稳定匹配
算法伪代码描述如下
初始化S为一个空的匹配
当有男人m还没有配偶
且并没有追求过所有女人时进行循环
找到m还没有追求过的偏好最高的女人w
若w没有配偶
则将配对m-w加入S
否则若w喜欢m胜于当前的配偶m’
则将配对m-w替换S中的配对m’-w
否则w拒绝m的追求
循环结束
返回稳定匹配S
我们通过一个实例来演示Gale-Shapley算法
男人和女人分别给出了自己的偏好列表
V追求B
因为B目前单身
她接受V的追求
W追求D
D接受W的追求
X追求B
因为更喜欢X
B拒绝掉当前的配偶V 接受X
V重新处于单身状态
追求当前列表中最喜欢的A
A接受V的追求
Y追求A
因为更喜欢V
A拒绝了Y
Y追求D
因为更喜欢Y
D拒绝掉当前的配偶W
接受Y
如此进行
直到所有人都找到了-----配偶
算法结束
先来证明算法有限步终止
我们有2个简单的发现
发现1
男人追求女人的顺序
总是在自己的偏好列表上从高到低的
发现2
一旦女人有了配偶
她就不会再回到单身状态
我们证明算法会在至多n^2次迭代后终止
这是因为
每次迭代中每个男人追求的女人都不一样
而这样的追求过程至多有n^2种
再来证明算法得到的匹配是完美的
我们证明
算法结束时
所有的男女都找到了自己的配偶
用反证法
假设有一个男人Z在算法终止时
仍然没有找到配偶
因为男女数目一样
那么必定存在一个女人
不妨称为A
她在算法终止时也没有找到配偶
由发现2可知 A从未被追求过
但由算法可知
Z追求过每一个女人
导出矛盾
最后证明 算法得到的匹配是稳定的
我们证明 算法返回的匹配中
不存在不稳定对
用反证法
假设A-Z是一个不稳定对
即 他们都喜欢对方更胜于
Gale-Shapley算法给出的
匹配S^*中的配偶
我们分两种情况讨论
1 若Z从未追求过A
则由发现1
Z对S^*中的配偶的偏好更胜于A
因此A-Z是稳定的
2 若Z追求过A
则A必然立刻或之后拒绝了Z
拒绝Z时
A一定遇到了她更喜欢的男人
之后 她只会接受更喜欢的男人
因此A-Z是稳定的
上述情况都会导出矛盾
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam