Рубрики
Uncategorized

Максимальный бипарттный график

Это самый известный вопрос в теории графика, где вы должны найти максимальное количество точек I … Помечено CodeNewie, компьютерная наука, дежопт, качество кода.

Это самый известный вопрос в теории графика, где вы должны найти максимальное количество точек в первом наборе, чтобы быть подключенным к точкам во втором наборе, с условием, что никакие два узла не могут быть подключены от первого до второго и наоборот.

Позвольте мне сначала дать краткое введение в заявление о проблеме. Есть М Количество кандидатов на работу, подать заявку на N Количество рабочих мест. Каждое открытие работы может принять только один заявитель, и заявитель на работу может быть назначен только на одну работу.

Метод BruteForce Чтобы дать работу заявителю, то есть на их первом приоритете, если происходит какой-либо конфликт, то перейти к своему второму наиболее приоритету, и так далее. Но из этого подхода мы не сможем получить максимальное количество рабочих мест для претендентов.

Оптимизированный подход

Нам дают 2-D Matrix, в которой, если заявитель задания подал заявку на определенную работу, то она равна 1 иначе 0. Прежде всего, мы сделаем Matchr [] массив размера n (количество общего доступных рабочих мест) и инициализируйте его с -1 следующим образом:

Теперь, петлю через кандидаты на работу и инициализируйте еще один логический массив с FALSE, названным, он будет отслеживать, если одинаковая работа не отдается двум заявителям.

Теперь позвоните в функцию BPM

Это проверит первый приоритет первого заявителя, он обычно назначит ему работу. Тогда мы отправим вторую заявителя на работу, это проведет это первый приоритет, если его первый приоритет такой же, как и предыдущий заявитель, то мы рекурсивно вызовете функцию снова и проверьте, если Второй приоритет предыдущего доступен, Если доступно { Тогда он будет назначен ему, и наш нынешний заявитель может получить свою первую приоритетную работу.} в противном случае { Проверьте на следующий приоритетную работу одинакового предыдущего заявителя. } Теперь рассмотрим, если предыдущий заявитель не имеет второго приоритета, то мы не даем работу на нынешние Заявитель на работу и вернет ложь и перейти к следующему.

Таким образом, мы можем получить максимальное количество рабочих мест, которые могут быть предоставлены заявителям. Это все. Продолжайте читать:) Продолжайте кодирование:)

Оригинал: «https://dev.to/salonix__/maximum-bipartite-graph-4k7j»