Gale Shapley Algorithm
Gale Shapley Algorithm
The problem
Scenario: N couples want to adopt N kids. Each couple lists all the kids in the order of their preference. Each kid lists all the couples in the order of their preference. A couple cannot have 2 different kids on the same level of preference. A kid cannot have 2 different couples on the same level of preference. What we have to do: Assign each couple a kid such that you a stable matching is achieved.
Unstable Match
Couple A
Kid A
Couple B
Kid B
Unstable Match
Couple A
Kid A
Couple B
Kid B
Unstable Match
Couple A
Kid A
Couple B
Kid B
C prefers K over any other child that can be adopted. C prefers a different kid K1 over K but K1 is already adopted by C1 and he prefers C1 over C.
couple that would prefer each other over their current matches.
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Kid 2
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Kid 2 Kid 3
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Kid 2 Kid 3
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 2
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Kid 2 Kid 3
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 2
Kid 4
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Kid 2 Kid 3 Kid 4
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 2
Kid 4
Kid 3
Kid 4
Couple 1
Couple 2 Couple 3 Couple 4
Couple 3
Couple 4
Kid 3
Kid 2 Kid 3 Kid 4
Couple 1
Couple 2
Couple 3
Couple 1
Couple 2
Couple 3
Kid 2
Kid 4 Kid 1
The algorithm
Let Couples be the set of couples and Kids be the set of kids; function stableMatching { Initialize all c Couples and k Kids to free while childless couple C who still has a kid K to propose for adoption { K = C's highest ranked such child to whom he has not yet proposed if C is not adopted (K, C) become a family else some pair (C', K) already exists if K prefers C to C (C, K) become a family K' becomes free for adoption else (C', K) remain together } }
Running Time
Suppose we have N couples and N kids. At each step from start to finish a couple makes a
proposal to a kid. Each proposal takes constant time O(1). Since there are N couples and N kids => maximum n*n possible proposals (a couple does not propose twice to the same kid). Total time complexity is O(n*n).
Other Application
Matching employees with employers. Matching men and women on a Dating website.
Etc.