Я пытаюсь решить следующую проблему, но мой алгоритм работает слишком медленно. Это потому, что я использую алгоритм Эдмондса - Карпа, чтобы найти максимальный поток что в применении к двудольным графам также дает максимальное соответствие. Время работы n ^ 5. Я хотел бы знать какие-либо более быстрые алгоритмы для решения этой проблемы (особенно для двудольных графов). Один алгоритм, который я сейчас изучаю, - это Изменить метку на передний план, что равно n ^ 3.

4
Varun Sharma 14 Апр 2014 в 16:09

3 ответа

Лучший ответ

Я пишу двустороннее сопоставление, используя алгоритм Диница. Также существует теорема, согласно которой для графов типа задач максимального двудольного сопоставления она имеет ту же сложность, что и перемаркировка на передний план (и ее гораздо проще реализовать).

В сетях, возникающих при решении задачи двустороннего согласования, количество фаз ограничено O (\ sqrt {V}), что приводит к ограничению времени O (\ sqrt {V} E). Полученный алгоритм также известен как алгоритм Хопкрофта – Карпа. В более общем смысле, эта граница верна для любой единичной сети - сети, в которой каждая вершина, за исключением источника и приемника, либо имеет одно входное ребро с пропускной способностью один, либо одно исходящее ребро с пропускной способностью единица, а все остальные мощности являются произвольными целыми числами .

К сожалению, статьи в Википедии об алгоритме недостаточно для его реализации, и я не смог найти лучшего ресурса в Интернете. У меня есть собственная реализация, но я уже давно создал ее, используя рекомендации других сотрудников моего университета.

7
Ivaylo Strandjev 14 Апр 2014 в 12:24

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

2
Codor 14 Апр 2014 в 12:14

Алгоритм Хопкрофта – Карпа обеспечивает наименьшую временную сложность для поиска максимального соответствия (или минимального покрытия вершин) для Bipartite graph.

Согласно wikipidea, он выполняется в O(E * (V^0.5)), E - это общее количество ребер, а V - это общее количество вершин. В худшем случае (плотный граф) это будет O(V^2.5).

1
User_67128 26 Фев 2020 в 20:40