Можно ли удовлетворить всех? - PullRequest
1 голос
/ 03 мая 2020

Вам предоставляется два набора узлов, каждый из которых имеет одинаковое количество узлов. Набор А содержит список людей. Набор B содержит список элементов. У каждого человека есть предпочтение для любого количества элементов в наборе B. Если мы представим эти предпочтения как соединения между узлами человека и узлами элементов, у каждого узла должно быть хотя бы одно соединение.

Сначала я думал, что каждый человек всегда может получить желаемый предмет, но это не всегда так, например, может произойти что-то подобное:

enter image description here

Одна мысль, которая у меня была, была то, что как До тех пор, пока на графике есть (установить размер А + установить размер В-1) или более соединений, всегда можно сформировать действительные соединения. Однако у меня возникли проблемы с доказательством правильности этого. Знаете ли вы, если это правильно? Или полностью другое решение?

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Я хотел бы подойти к этой проблеме следующим образом:

  • Сортировать людей А по количеству ребер, которые у них есть (от нижнего к большему).

  • Если у человека в A есть только один предпочтительный элемент в B, назначьте его.

  • Когда у человека в A есть более одного предпочтительного элемента в B, выберите элемент с Наименьшее количество людей в А, которые предпочитают это.

Я бы сделал это с возвратом.

0 голосов
/ 03 мая 2020

Боюсь, ваша теория не верна. Представьте, что в наборе А 10 человек, а в наборе 10 предметов. Ваша теория говорит, что необходимо 19 соединений. Но на самом деле, вы могли бы иметь гораздо больше, не имея решения.

Например, разбейте наборы на группы по 7 и 3. Затем подключите каждого человека в группе из 7 человек к каждому элементу в группе. 7 предметов. Это 49 соединений.

И две группы из 3 все еще могут быть связаны, как показано в вопросе. Таким образом, с 10 людьми и 10 предметами вы можете иметь 53 соединения, не имея решения.


Спасибо @ PaulHankin за указание теорему Холла о браке в комментариях.

Я перефразирую теорему здесь. Доказательство находится в связанной статье.

Учитывая два набора A и B одинакового размера, насыщающее совпадение - это сопоставление, которое охватывает каждый элемент обоих наборов.

Для подмножества {b} в B пусть {a} обозначает подмножество A, которое имеет соединения с {b}. Теорема о браке гласит, что A и B имеют насыщающее соответствие тогда и только тогда, когда для каждого подмножества b в B:

| b | <= | a | </p>

Другими словами: каждое подмножество B имеет достаточно много связей с A.

Давайте применим это к графику в вопросе.

enter image description here

Мы видим, что подмножество b = {b1, b3} в B связано с подмножеством a = {a2} в A. Заметим, что | b | = = 2 и | a | == 1, поэтому условие | b | <= | a | не выполняется, и график не имеет насыщающего соответствия. </p>

Чтобы использовать теорему Холла о браке в качестве основы для алгоритма проверки существования насыщающего соответствия, нам необходимо проверить каждое подмножество B. Сколько подмножеств существует? Набор всех подмножеств B известен как powerset из B. Powerset содержит 2 ^ n подмножеств B (где n - количество элементов в B). Таким образом, использование теоремы напрямую приводит к алгоритму O (2 ^ n).

Алгоритмы, которые решают задачу максимального соответствия или проблему сбалансированного присваивания , могут использоваться для решить эту проблему более эффективно.

...