<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=212.116.101.78&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=212.116.101.78&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/212.116.101.78"/>
		<updated>2026-06-15T11:28:30Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE%D0%B1_%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8&amp;diff=57987</id>
		<title>Задача об устойчивом паросочетании</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE%D0%B1_%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8&amp;diff=57987"/>
				<updated>2016-12-19T09:40:46Z</updated>
		
		<summary type="html">&lt;p&gt;212.116.101.78: /* Основная задача */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основная задача ==&lt;br /&gt;
&lt;br /&gt;
Есть N мужчин и N женщин. Они обладают следующими особенностями:&lt;br /&gt;
# Каждый человек оценивает лишь людей противоположного пола (все гетеросексуальны)&lt;br /&gt;
# Каждый мужчина может отсортировать женщин от &amp;quot;наименее привлекательной&amp;quot; к &amp;quot;наиболее привлекательной&amp;quot;, причем его предпочтения не меняются (у каждого мужчины своя функция оценки)&lt;br /&gt;
# Каждая женщина может отсортировать мужчин от &amp;quot;наименее привлекательного&amp;quot; к &amp;quot;наиболее привлекательному&amp;quot;, причем её предпочтения не меняются (у каждой женщины своя функция оценки)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Очевидным образом по такому определению строится полный двудольный граф (левая доля — мужчины, правая — женщины), назовем его МЖ.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим некоторое [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85#matching_def паросочетание] в МЖ. Пара A — b называется неустойчивой (unstable pair), если:&lt;br /&gt;
# В паросочетании есть пары A — a и B — b (A женат на a, B женат на b)&lt;br /&gt;
# A считает b привлекательней, чем a&lt;br /&gt;
# b считает A привлекательней, чем B&lt;br /&gt;
(неформально это означает потенциальную возможность измены)&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Устойчивое паросочетание (stable matching) — паросочетание без неустойчивых пар.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Задача заключается в нахождении полного устойчивого паросочетания по данным спискам предпочтений.&lt;br /&gt;
&lt;br /&gt;
== Агоритм Гейла-Шепли ==&lt;br /&gt;
&lt;br /&gt;
Решение задачи было описано в 1962 году математиками Девидом Гейлом (Университета Брауна) и Ллойдом Шепли (Принстонский университет) в статье «Поступление в колледж и стабильность браков» (College admissions and the stability of marriage) в журнале American Mathematical Monthly. Набор правил, следование которым всегда приводит к образованию стабильных пар, получил название алгоритма Гейла-Шепли или «алгоритма отложенного согласия» (алгоритм предложи-и-откажи).&lt;br /&gt;
&lt;br /&gt;
=== Интуитивное описание ===&lt;br /&gt;
&lt;br /&gt;
# мужчины делают предложение наиболее предпочитаемой женщине;&lt;br /&gt;
# каждая женщина из всех поступивших предложений выбирает наилучшее и отвечает на него «может быть» (помолвка), на все остальные отвечает «нет» (отказ)&lt;br /&gt;
# мужчины, получившие отказ, обращаются к следующей женщине из своего списка предпочтений, мужчины, получившие ответ «может быть», ничего не делают;&lt;br /&gt;
# если женщине пришло предложение лучше предыдущего, то она прежнему претенденту (которому ранее сказала «может быть») говорит «нет», а новому претенденту говорит «может быть»;&lt;br /&gt;
# шаги 1-4 повторяются, пока у всех мужчин не исчерпается список предложений, в этот момент женщины отвечают «да» на те предложения «может быть», которые у них есть в настоящий момент.&lt;br /&gt;
&lt;br /&gt;
=== Описание в псевдокоде ===&lt;br /&gt;
&lt;br /&gt;
   Изначально все мужчины и все женщины не женаты (не замужем)&lt;br /&gt;
   '''while''' Существует m &amp;lt;- некоторый свободный мужчина, не делавший предложения всем женщинам&lt;br /&gt;
      w &amp;lt;- первая женщина из списка m, которой m еще не делал предложения&lt;br /&gt;
      '''if''' w свободна&lt;br /&gt;
         помечаем m и w помолвленными&lt;br /&gt;
      '''else if''' w предпочитает m своему &amp;quot;текущему&amp;quot; жениху m'&lt;br /&gt;
         помечаем m и w помолвленными, m' - свободным&lt;br /&gt;
      '''else'''&lt;br /&gt;
         w отказывает m&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=observation1&lt;br /&gt;
|about=Наблюдение 1&lt;br /&gt;
|statement=Мужчины делают предложения женщинам в порядке убывания симпатии&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=observation2&lt;br /&gt;
|about=Наблюдение 2&lt;br /&gt;
|statement=Как только женщина была помолвлена, она не может стать непомолвленной, она может только улучшить свой выбор (сказать «может быть» более предпочтительному кандидату)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Для начала покажем, что алгоритм завершит свою работу.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma1&lt;br /&gt;
|about=Лемма 1&lt;br /&gt;
|statement=&lt;br /&gt;
	Алгоритм завершается после максимум n^2 итераций цикла '''while'''&lt;br /&gt;
|proof=&lt;br /&gt;
	На каждой итерации мужчина делает предложение очередной женщине. Но всего может быть не более n^2 предложений.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь покажем, что по завершении алгоритма задача будет решена.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma2&lt;br /&gt;
|about=Лемма 2&lt;br /&gt;
|statement=&lt;br /&gt;
	Все мужчины и женщины будут заняты.&lt;br /&gt;
|proof=&lt;br /&gt;
	1. Предположим, что некоторый мужчина, Ян, не женат по завершении алгоритма.&lt;br /&gt;
&lt;br /&gt;
	2. Тогда некоторая женщина, Антонина не замужем&lt;br /&gt;
&lt;br /&gt;
	3. По [[#observation2|наблюдению 2]], Антонине никто не делал предложения&lt;br /&gt;
&lt;br /&gt;
	4. Но Ян сделал предложения всем женщинам, т.к. он остался не женат&lt;br /&gt;
&lt;br /&gt;
	5. Получаем противоречие&lt;br /&gt;
	&lt;br /&gt;
	6. Аналогичные утверждения можно повторить и отталкиваясь от того, что не занята некоторая девушка, поэтому предложение доказано&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma3&lt;br /&gt;
|about=Лемма 3&lt;br /&gt;
|statement=&lt;br /&gt;
	Нет неустойчивых пар.&lt;br /&gt;
|proof=&lt;br /&gt;
	1. Предположим A-b (A, B - мужчины; a, b - женщины; A женат на a, B женат на b) - нестабильная пара в паросочетнаии, найденном алгоритмом Гейла-Шепли&lt;br /&gt;
&lt;br /&gt;
	2. Рассмотрим два случая:&lt;br /&gt;
&lt;br /&gt;
	2.1.   A не делал предложения b&lt;br /&gt;
&lt;br /&gt;
		 =&amp;gt; A находит a более привлекательной, чем b&lt;br /&gt;
&lt;br /&gt;
		 =&amp;gt; A-b - устойчивая пара&lt;br /&gt;
&lt;br /&gt;
	2.2.  A делал предложение b&lt;br /&gt;
&lt;br /&gt;
		 =&amp;gt; b отказала A (сразу или на одной из последующих итераций)&lt;br /&gt;
&lt;br /&gt;
		 =&amp;gt; b находит B более привлекательным, чем A&lt;br /&gt;
&lt;br /&gt;
		 =&amp;gt; A-b - устойчивая пара&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Асимптотика алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Не представляет проблемы реализовать внутренний цикл while за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; (с предварительным предпроцессингом не более, чем за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;). Таким образом, итоговая асимптотика составляет &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Анализ полученного алгоритмом паросочетания ===&lt;br /&gt;
&lt;br /&gt;
Агоритм Гейла-Шепли гарантирует, что будет найдено некоторое решение задачи. Но решений может быть более одного. Зададимся вопросом, какими свойствами обладает решение, найденное алгоритмом.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma4&lt;br /&gt;
|about=Лемма 4 (man-optimality)&lt;br /&gt;
|statement=&lt;br /&gt;
	Из всех возможных решений алгоритмом Гейла-Шепли будет найдено решение, наилучшее для мужчин (каждый мужчина получает в жены женщину, наилучшую из всех возможных при условии корректности решения).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma5&lt;br /&gt;
|about=Лемма 5 (woman-pessimality)&lt;br /&gt;
|statement=&lt;br /&gt;
	Из всех возможных решений алгоритмом Гейла-Шепли будет найдено решение, наихудшее для женщин.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Эти две леммы оставим без доказательства, интересющиеся могут обратится к документу http://www.cs.princeton.edu/courses/archive/spring05/cos423/lectures/01stable-matching.pdf (с.5)&lt;br /&gt;
&lt;br /&gt;
== Обобщения задачи ==&lt;br /&gt;
&lt;br /&gt;
Интересно, что данная задача не всегда имеет решение, если допустить однополые пары (устойчивого паросочетания может не быть). (см. [[http://ru.wikipedia.org/wiki/Задача_о_соседях_по_комнате|Задача о соседях по комнате]])&lt;br /&gt;
&lt;br /&gt;
Случай же, когда у нас есть &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; мужчин и &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; женщин (&amp;lt;tex&amp;gt;N \neq M&amp;lt;/tex&amp;gt;) легко сводится к описанной выше задаче. Рассмотрим &amp;lt;tex&amp;gt;M &amp;gt; N&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;M &amp;lt; N&amp;lt;/tex&amp;gt; аналогично). Добавим &amp;lt;tex&amp;gt;M - N&amp;lt;/tex&amp;gt; фиктивных мужчин, которые являются наименее привлекательными с точки зрения каждой из женщин. Тогда если в найденном алгоритмом Гейла-Шепли паросочетании некоторая женщина будет замужем за таким фиктивным мужчиной, это будет де-факто означать, что она осталась не замужем.&lt;br /&gt;
&lt;br /&gt;
Также интересна задача о выборе учебного заведения: вместо множества мужчин введем множество университетов, а вместо множества женщин - множество кандидатов, подающих заявления на поступление. Причем в каждом университете есть квота на количество студентов, которое университет может принять. Задача очевидно сводится к основной добавлением &amp;lt;tex&amp;gt;(K-1)&amp;lt;/tex&amp;gt; &amp;quot;филиалов&amp;quot; для каждого университета (&amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; - квота). И добавлением фиктивного увниерситета (поступление в который означает, что кандидату придется попробовать поступить через год).&lt;br /&gt;
&lt;br /&gt;
== Применения в реальной жизни ==&lt;br /&gt;
&lt;br /&gt;
Задача о нахождении устойчивого паросочетания и её решение имеют множество применений в реальной жизни, лишь некоторые из них:&lt;br /&gt;
* Распределение студентов по коллеждам в США&lt;br /&gt;
* Распределение интернов по больницам&lt;br /&gt;
* Распределение донорских органов по нуждающимся в них людям&lt;br /&gt;
&lt;br /&gt;
Решение данной задачи было отмечено при вручении Нобелевской премии по экономике в 2012 году за «теорию стабильного распределения и практическое применение рыночных моделей». Её получили один из создателей алгоритма, Ллойд Шепли, а также Элвин Рот, во многом развивший исследования Ллойда Шепли и Дэвида Гейла. Сам Гейл не был удостоен премии, вероятно, лишь в силу того, что умер в 2008 году.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cs.princeton.edu/courses/archive/spring05/cos423/lectures/01stable-matching.pdf Stable matching, Prinston lecture's presentation]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Stable_marriage_problem Stable marriage problem]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BC%D0%B0%D1%80%D1%8C%D1%8F%D0%B6%D0%B5 Задача о марьяже]&lt;br /&gt;
* [http://ge.tt/api/1/files/4LU3zaD1/0/blob?download Устойчивость супружеских пар и другие комбинаторные задачи (Статья Дональда Кнута)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Задача о паросочетании]]&lt;/div&gt;</summary>
		<author><name>212.116.101.78</name></author>	</entry>

	</feed>