Está en la página 1de 18

Gale-Shapley Algorithm - for Stable Matching -

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

What is a stable match?


A couple C and a child K are in a stable match if

at least one of the following conditions is met:

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.

In the result match there must not be a kid and a

couple that would prefer each other over their current matches.

How do we match the kids and the couples?


Using Gale-Shapley Algorithm: Developed by Lloyd Shapley and David Gale. Published 1962. Also known as Algorithm of Happiness.

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 4

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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 4

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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 4

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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 4

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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 4

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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 4

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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Kid 1 Kid 2 Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 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

How does it work?


1st preference Couple 1 Couple 2 Couple 3 Couple 4 Kid 1 Kid 2 Kid 3 Kid 2 Kid 2 Kid 4 1st preference Couple 2 Couple 1 2nd preference Kid 2 Kid 4 Kid 3 Kid 1 2nd preference Couple 3 Couple 2 3rd preference Kid 4 Kid 1 Kid 4 Kid 3 3rd preference Couple 1 Couple 3 4th preference Kid 1 Kid 3 Kid 1 Kid 2 4th preference Couple 4 Couple 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.

También podría gustarte