Stable marriage problem

From Wikipedia, the free encyclopedia
  (Redirected from Gale-Shapley algorithm)
Jump to navigation Jump to search

In mathematics, economics, and computer science, the stable marriage problem (also stable matching problem or SMP) is the problem of finding a stable matching between two equally sized sets of elements given an ordering of preferences for each element. A matching is a mapping from the elements of one set to the elements of the other set. A matching is not stable if:

  1. There is an element A of the first matched set which prefers some given element B of the second matched set over the element to which A is already matched, and
  2. B also prefers A over the element to which B is already matched.

In other words, a matching is stable when there does not exist any match (A, B) by which both A and B would be individually better off than they are with the element to which they are currently matched.

The stable marriage problem has been stated as follows:

Given n men and n women, where each person has ranked all members of the opposite sex in order of preference, marry the men and women together such that there are no two people of opposite sex who would both rather have each other than their current partners. When there are no such pairs of people, the set of marriages is deemed stable.

Note that the existence of two classes that need to be paired with each other (heterosexual men and women in this example), distinguishes this problem from the stable roommates problem.


Algorithms for finding solutions to the stable marriage problem have applications in a variety of real-world situations, perhaps the best known of these being in the assignment of graduating medical students to their first hospital appointments.[1] In 2012, the Nobel Memorial Prize in Economics was awarded to Lloyd S. Shapley and Alvin E. Roth "for the theory of stable allocations and the practice of market design."[2]

An important and large-scale application of stable marriage is in assigning users to servers in a large distributed Internet service.[3] Billions of users access web pages, videos, and other services on the Internet, requiring each user to be matched to one of (potentially) hundreds of thousands of servers around the world that offer that service. A user prefers servers that are proximal enough to provide a faster response time for the requested service, resulting in a (partial) preferential ordering of the servers for each user. Each server prefers to serve users that it can with a lower cost, resulting in a (partial) preferential ordering of users for each server. Content delivery networks that distribute much of the world's content and services solve this large and complex stable marriage problem between users and servers every tens of seconds to enable billions of users to be matched up with their respective servers that can provide the requested web pages, videos, or other services.[3]


Animation showing an example of the Gale–Shapley algorithm

In 1962, David Gale and Lloyd Shapley proved that, for any equal number of men and women, it is always possible to solve the SMP and make all marriages stable. They presented an algorithm to do so.[4][5]

The Gale–Shapley algorithm involves a number of "rounds" (or "iterations"):

  • In the first round, first a) each unengaged man proposes to the woman he prefers most, and then b) each woman replies "maybe" to her suitor she most prefers and "no" to all other suitors. She is then provisionally "engaged" to the suitor she most prefers so far, and that suitor is likewise provisionally engaged to her.
  • In each subsequent round, first a) each unengaged man proposes to the most-preferred woman to whom he has not yet proposed (regardless of whether the woman is already engaged), and then b) each woman replies "maybe" if she is currently not engaged or if she prefers this man over her current provisional partner (in this case, she rejects her current provisional partner who becomes unengaged). The provisional nature of engagements preserves the right of an already-engaged woman to "trade up" (and, in the process, to "jilt" her until-then partner).
  • This process is repeated until everyone is engaged.

The runtime complexity of this algorithm is where is number of men or women.[6]

This algorithm guarantees that:

Everyone gets married 
At the end, there cannot be a man and a woman both unengaged, as he must have proposed to her at some point (since a man will eventually propose to everyone, if necessary) and, being proposed to, she would necessarily be engaged (to someone) thereafter.
The marriages are stable 
Let Alice and Bob both be engaged, but not to each other. Upon completion of the algorithm, it is not possible for both Alice and Bob to prefer each other over their current partners. If Bob prefers Alice to his current partner, he must have proposed to Alice before he proposed to his current partner. If Alice accepted his proposal, yet is not married to him at the end, she must have dumped him for someone she likes more, and therefore doesn't like Bob more than her current partner. If Alice rejected his proposal, she was already with someone she liked more than Bob.


function stableMatching {
    Initialize all m ∈ M and w ∈ W to free
    whilefree man m who still has a woman w to propose to {
       w = first woman on m’s list to whom m has not yet proposed
       if w is free
         (m, w) become engaged
       else some pair (m', w) already exists
         if w prefers m to m'
            m' becomes free
           (m, w) become engaged 
           (m', w) remain engaged

Optimality of the solution[edit]

While the solution is stable, it is not necessarily optimal from all individuals' points of view. The traditional form of the algorithm is optimal for the initiator of the proposals and the stable, suitor-optimal solution may or may not be optimal for the reviewer of the proposals. An example is as follows:

There are three suitors (A,B,C) and three reviewers (X,Y,Z) which have preferences of:

A: YXZ   B: ZYX   C: XZY   X: BAC   Y: CBA   Z: ACB

There are 3 stable solutions to this matching arrangement:

suitors get their first choice and reviewers their third (AY, BZ, CX)
all participants get their second choice (AX, BY, CZ)
reviewers get their first choice and suitors their third (AZ, BX, CY)

All three are stable because instability requires one of the participants to be happier with an alternative match. Giving one group their first choices ensures that the matches are stable because they would be unhappy with any other proposed match. Giving everyone their second choice ensures that any other match would be disliked by one of the parties. The algorithm converges in a single round on the suitor-optimal solution because each reviewer receives exactly one proposal, and therefore selects that proposal as its best choice, ensuring that each suitor has an accepted offer, ending the match. This asymmetry of optimality is driven by the fact that the suitors have the entire set to choose from, but reviewers choose between a limited subset of the suitors at any one time.

Stable marriage with indifference[edit]

In the classical version of the problem, each person must rank the members of the opposite sex in strict order of preference. However, in a real-world setting, a person may prefer two or more persons as equally favorable partner. Such tied preference is termed as indifference. Below is such an instance where finds tie between and finds tie between .

If tied preference lists are allowed then the stable marriage problem will have three notions of stability which are discussed in the below sections.

A matching will be called weakly stable unless there is a couple each of whom strictly prefers the other to his/her partner in the matching. Robert W. Irving[7] has extended Gale–Shapley algorithm as below to provide such weakly stable matching in time where n is size of stable marriage problem. Ties in men and women's preference list are broken arbitrarily. Preference lists are reduced as algorithm proceeds.

 1 Assign each person to be free;
 2 	while (some man m is free) do
 3 	begin
 4 		w := first woman on ms list;
 5 		m proposes, and becomes engaged, to w;
 6 		if (some man m' is engaged to w) then
 7 		    assign m' to be free;
 8 		for each (successor m'' of m on ws list) do
 9 			delete the pair (m'', w)
10 	end;
11 	output the engaged pairs, which form a stable matching

A matching is super-stable if there is no couple each of whom either strictly prefers the other to his/her partner or is indifferent between them. Robert W. Irving[7] has modified the above algorithm to check whether such super stable matching exists and outputs matching in time if it exists. Below is the pseudo-code.

 1 assign each person to be free;
 2 repeat
 3 	while (some man m is free) do
 4 	  for each (woman w at the head of ms list) do
 5 	  begin
 6 	  m proposes, and becomes engaged, to w;
 7 		for each (strict successor m' of m on ws list) do
 8 		begin
 9 			if (m' is engaged) to w then
10 			   break the engagement;
11 			delete the pair (m'. w)
12 		end
13 	  end
14 	for each (woman w who is multiply engaged) do
15 	begin
16 		break all engagements involving W;
17 		for each (man m at the tail of ws list) do
18 		  delete the pair (m. w)
19     end;
20 until (some mans list is empty) or (everyone is engaged);
21 if everyone is engaged then
22 	the engagement relation is a super-stable matching
23 else
24 	no super-stable matching exists

A matching is strongly stable if there is no couple x, y such that x strictly prefers y to his/her partner and y either strictly prefers x to his/her partner or is indifferent between them. Robert W. Irving[7] has provided the algorithm which checks if such strongly stable matching exists and outputs the matching if it exists. The algorithm computes perfect matching between sets of men and women, thus finding the critical set of men who are engaged to multiple women. Since such engagements are never stable, all such pairs are deleted and the proposal sequence will be repeated again until either 1) some man's preference list becomes empty (in which case no strongly stable matching exists) or 2) strongly stable matching is obtained. Below is the pseudo-code for finding strongly stable matching. It runs in time which is explained in the Lemma 4.6 of .[7]

 1 Assign each person to be free;
 2 repeat
 3 	while (some man m is free) do
 4 	  for each (woman w at the head of m's list) do
 5 	  begin
 6 	  m proposes, and becomes engaged, to w;
 7 		for each (strict successor m' of m on ws list) do
 8 		begin
 9 			if (m' is engaged) to w then
10 			   break the engagement;
11 			delete the pair (m'. w)
12 		end
13 	  end
14     if (the engagement relation does not contain a perfect matching) then	
15     begin
16 	    find the critical set Z of men;
17 	    for each (woman w who is engaged to a man in Z) do
18 	    begin
19 	        break all engagements involving w;	
20   	        for each man m at the tail of ws list do
21 	            delete the pair (m, w)
22 	    end;
23     end;
24 until (some mans list is empty) or (everyone is engaged);
25 if everyone is engaged then
26 	the engagement relation is a super-stable matching
27 else
28 	no strongly stable matching exists

Similar problems[edit]

The assignment problem seeks to find a matching in a weighted bipartite graph that has maximum weight. Maximum weighted matchings do not have to be stable, but in some applications a maximum weighted matching is better than a stable one.

The stable roommates problem is similar to the stable marriage problem, but differs in that all participants belong to a single pool (instead of being divided into equal numbers of "men" and "women").

The hospitals/residents problem – also known as the college admissions problem – differs from the stable marriage problem in that a hospital can take multiple residents, or a college can take an incoming class of more than one student. Algorithms to solve the hospitals/residents problem can be hospital-oriented (as the NRMP was before 1995)[8] or resident-oriented. This problem was solved, with an algorithm, in the same original paper by Gale and Shapley, in which the stable marriage problem was solved.[9]

The hospitals/residents problem with couples allows the set of residents to include couples who must be assigned together, either to the same hospital or to a specific pair of hospitals chosen by the couple (e.g., a married couple want to ensure that they will stay together and not be stuck in programs that are far away from each other). The addition of couples to the hospitals/residents problem renders the problem NP-complete.[10]

The matching with contracts problem is a generalization of matching problem, in which participants can be matched with different terms of contracts.[11] An important special case of contracts is matching with flexible wages.[12]

Implementation in software packages[edit]

  • R: The Gale–Shapley algorithm (also referred to as deferred-acceptance algorithm) for the stable marriage and the hospitals/residents problem is available as part of the matchingMarkets[13][14] and matchingR[15] packages.
  • API: The MatchingTools API provides a free application programming interface for the Gale–Shapley algorithm.[16]
  • Python: The Gale–Shapley algorithm is included along with several others for generalized matching problems in the QuantEcon/ package [17]

See also[edit]


  1. ^ Stable Matching Algorithms
  2. ^ "The Prize in Economic Sciences 2012". Retrieved 2013-09-09.
  3. ^ a b Bruce Maggs and Ramesh Sitaraman (2015). "Algorithmic nuggets in content delivery" (PDF). ACM SIGCOMM Computer Communication Review. 45 (3).
  4. ^ Gale, D.; Shapley, L. S. (1962). "College Admissions and the Stability of Marriage". American Mathematical Monthly. 69: 9–14. doi:10.2307/2312726. JSTOR 2312726.
  5. ^ Harry Mairson: "The Stable Marriage Problem", The Brandeis Review 12, 1992 (online).
  6. ^ Iwama, Kazuo; Miyazaki, Shuichi (2008). "A Survey of the Stable Marriage Problem and Its Variants". International Conference on Informatics Education and Research for Knowledge-Circulating Society (icks 2008): 131–136. doi:10.1109/ICKS.2008.7.
  7. ^ a b c d Irving, Robert W. (1994-02-15). "Stable marriage and indifference". Discrete Applied Mathematics. 48 (3): 261–272. doi:10.1016/0166-218X(92)00179-P.
  8. ^ Robinson, Sara (April 2003). "Are Medical Students Meeting Their (Best Possible) Match?" (PDF). SIAM News (3): 36. Retrieved 2 January 2018.
  9. ^ Gale, D.; Shapley, L. S. (1962). "College Admissions and the Stability of Marriage". American Mathematical Monthly. 69: 9–14. doi:10.2307/2312726. JSTOR 2312726.
  10. ^ Gusfield, D.; Irving, R. W. (1989). The Stable Marriage Problem: Structure and Algorithms. MIT Press. p. 54. ISBN 0-262-07118-5.
  11. ^ Hatfield, John William; Milgrom, Paul (2005). "Matching with Contracts". American Economic Review. 95 (4): 913–935. doi:10.1257/0002828054825466. JSTOR 4132699.
  12. ^ Crawford, Vincent; Knoer, Elsie Marie (1981). "Job Matching with Heterogeneous Firms and Workers". Econometrica. 49 (2): 437–450. doi:10.2307/1913320. JSTOR 1913320.
  13. ^ Klein, T. (2015). "Analysis of Stable Matchings in R: Package matchingMarkets" (PDF). Vignette to R Package matchingMarkets.
  14. ^ "matchingMarkets: Analysis of Stable Matchings". R Project.
  15. ^ "matchingR: Matching Algorithms in R and C++". R Project.
  16. ^ "MatchingTools API".
  17. ^ "". Python package.
  18. ^ "Tracker Component Library". Matlab Repository. Retrieved January 5, 2019.

Textbooks and other important references not cited in the text[edit]

External links[edit]