Любые идеи о том, как реализовать эффективный алгоритм (лучше, чем O (n 2 )) для решения задачи присваивания в двудольном графе?
Основная идея заключается вследующее:
У меня есть два идентичных набора, скажем, S1 = [A,B,C,D]
и S2 = [A,B,C,D]
, и есть некоторые ребра между различными элементами наборов с заданной стоимостью, например, A->B (cost 4)
, B->C (cost 3)
, C->A (cost 10)
, D->A (cost 6)
.
Я хочу найти лучшее назначение так, чтобы: количество назначенных элементов было максимальным с наименьшей общей стоимостью.(Количество назначенных элементов является более важным).
Таким образом, для этого примера лучшим назначением будет:
A->D (cost 6)
B->C (cost 3)
[A,B,C,D]
там, где назначено, а стоимость минимальна: 9
Еще один, но не лучший вариант:
A->B (cost 4)
Остальные не могут быть назначены, поскольку A
уже назначено, таким образом, назначение не максимально максимально
Я разработал жадное решение в O (n 2 ), которое слишком медленное.
Размеры комплектов обычно небольшие (5-10) элементов.