Изменения

Перейти к: навигация, поиск

Задача об устойчивом паросочетании

439 байт убрано, 12:15, 20 марта 2018
Доказательство корректности
{{Определение
|definition =
Пара <tex>\langle A, b\rangle</tex> называется '''неустойчивой''' (англ. ''unstable pair''), если:
# В паросочетании есть пары <tex>\langle A, a\rangle</tex> и <tex>\langle B, b\rangle</tex> (<tex>A</tex> женат на <tex>a</tex>, <tex>B</tex> женат на <tex>b</tex>);
# <tex>A</tex> предпочитает <tex>b</tex> элементу <tex>a</tex>;
# <tex>b</tex> предпочитает <tex>A</tex> элементу <tex>B</tex>.
}}
{{Определение
|definition='''Устойчивое паросочетание''' (англ. ''stable matching'') — [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях| паросочетание]] без неустойчивых пар.
{{Задача
|definition=
Найти полное устойчивое паросочетание между элементами двух множеств размера <tex>Nn</tex>, имеющими свои предпочтения.}}
== Основная задача ==
Рассмотрим некоторое [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях| паросочетание]]
в МЖ.
{{Определение
|definition =
Пара <tex>\langle A, b\rangle</tex> называется '''неустойчивой''' (англ. ''unstable pair''), если:
# В паросочетании есть пары <tex>\langle A, a\rangle</tex> и <tex>\langle B, b\rangle</tex> (<tex>A</tex> женат на <tex>a</tex>, <tex>B</tex> женат на <tex>b</tex>)
# <tex>A</tex> считает <tex>b</tex> ''привлекательней'', чем <tex>a</tex>
# <tex>b</tex> считает <tex>A</tex> ''привлекательней'', чем <tex>B</tex>
}}
== Алгоритм Гейла-Шепли ==
Решение задачи было описано в <tex>1962</tex> году математиками Девидом Гейлом (Университета Университет Брауна) и Ллойдом Шепли (Принстонский университет) в статье «Поступление в колледж и стабильность браков» (College admissions and the stability of marriage) в журнале American Mathematical Monthly
<ref>https://ru.wikipedia.org/wiki/American_Mathematical_Monthly American Mathematical Monthly 69, 9-14, 1962.</ref>. Набор правил, следование которым всегда приводит к образованию стабильных пар, получил название алгоритма Гейла-Шепли или «алгоритма отложенного согласия» (алгоритм предложи-и-откажи).
=== Описание в псевдокоде ===
Здесь мы воспользуемся вспомогательной константой <tex>\Omega</tex>, которая будет означать худший выбор для всех женщин, очень нежелательного мужчину. Изначально все женщины помолвлены с <tex>\Omega</tex>. По завершении алгоритма все мужчины будут заняты, поэтому каждая женщина будет замужем не за <tex>\Omega</tex>.
<font color="green">// Изначально все мужчины не женаты и все женщины незамужние.</font>
'''while''' Существует m <- некоторый свободный мужчина, не делавший предложения всем женщинам
w <- первая женщина из списка m, которой m ещё не делал предложения
'''if''' w свободна
помечаем m и w помолвленными
'''else if''' w предпочитает m своему "текущему" жениху m'
помечаем m и w помолвленными, m' — свободным
'''else'''
w отказывает m
<font color="green">// Изначально все мужчины не женаты и все женщины незамужние.</font> '''while''' существует свободный мужчина M = некоторый свободный мужчина w = первая женщина из текущего списка M '''if''' w свободна помечаем M и w помолвленными '''else if''' w предпочитает M своему текущему жениху M' помечаем M и w помолвленными вычёркиваем w из списка предпочтений M' помечаем M' свободным '''else''' вычёркиваем w из списка предпочтений M Время работы алгоритма {{---}} <tex>O(n^2)</tex>, так как количество итераций цикла <tex>\mathrm {while}</tex> не превосходит <tex>O(n^2)</tex>, где <tex>n</tex> равно размеру каждого из данных множеств.
=== Доказательство корректности ===
|proof=
Предположим <tex>\langle A, b\rangle</tex> (где <tex>A</tex>, <tex>B</tex> — мужчины; <tex>a</tex>, <tex>b</tex> — женщины; <tex>A</tex> женат на <tex>a</tex>, <tex>B</tex> женат на <tex>b</tex>) — нестабильная пара в паросочетании, найденном алгоритмом Гейла-Шепли. Возможны два случая:
# <tex>A</tex> не делал предложения предложение <tex>b</tex>. Значит, <tex>A</tex> находит <tex>a</tex> более привлекательной, чем <tex>b</tex>. Но чтобы рассматриваемая пара была неустойчивой, необходимо, чтобы <tex>b</tex> для <tex>A</tex> была более привлекательна, чем <tex>a</tex>. Следовательно, <tex>\langle A, b\rangle</tex> — устойчивая пара.
# <tex>A</tex> делал предложение <tex>b</tex>. Тогда был такой момент, когда <tex>b</tex> отказала <tex>A</tex>, значит, <tex>b</tex> находит <tex>B</tex> более привлекательным, чем <tex>A</tex>. Снова получается, что <tex>\langle A, b\rangle</tex> — устойчивая пара.
Анонимный участник

Навигация