Я пытаюсь решить следующую проблему, но мой алгоритм работает слишком медленно. Это потому, что я использую алгоритм Эдмондса-Карпа, чтобы найти максимальный поток что в применении к двудольным графам также дает максимальное соответствие. Время работы n ^ 5. Я хотел бы знать какие-либо более быстрые алгоритмы для решения этой проблемы (особенно для двудольных графов). Один алгоритм, который я сейчас изучаю, - это Изменить метку на передний план, что равно n ^ 3.
Алгоритм быстрого максимального соответствия для двудольных графов
Ответы (3)
Я пишу двустороннее сопоставление, используя алгоритм Диница. Также существует теорема, согласно которой для графов типа задач максимального двудольного сопоставления она имеет ту же сложность, что и перемаркировка на передний план (и ее гораздо проще реализовать).
В сетях, возникающих при решении задачи двустороннего согласования, количество фаз ограничено O (\ sqrt {V}), что приводит к ограничению времени O (\ sqrt {V} E). Полученный алгоритм также известен как алгоритм Хопкрофта – Карпа. В более общем смысле, эта граница верна для любой единичной сети - сети, в которой каждая вершина, за исключением источника и приемника, либо имеет одно входное ребро с пропускной способностью один, либо одно исходящее ребро с пропускной способностью единица, а все остальные пропускные способности являются произвольными целыми числами. .
К сожалению, статьи в Википедии об алгоритме недостаточно для его реализации, и я не смог найти лучшего ресурса в Интернете. У меня есть собственная реализация, но я уже давно создал ее, используя рекомендации других сотрудников моего университета.
Так называемый венгерский алгоритм для двустороннего сопоставления может быть реализован с меньшей сложностью выполнения.
Алгоритм Хопкрофта – Карпа обеспечивает наименьшую временную сложность для поиска максимального совпадения (или минимального покрытия вершин) для Bipartite graph
.
Согласно wikipidea, он выполняется в O(E * (V^0.5))
, E
- это общее количество ребер, а V
- это общее количество вершин. В худшем случае (плотный граф) это будет O(V^2.5)
.