Я не теоретик информатики, но думаю, что проблема реального мира здесь.
Проблема
У моей компании есть несколько подразделений по всей стране.
Мы предложили сотрудникам возможность работать на другом блоке. Но есть условие: общее количество работников на единицу не может измениться.
Это означает: мы позволим сотруднику покинуть свое подразделение, если кто-то захочет его занять.
Пример (вымышленный) запроса данных:
Name Origin Destination
Maria 1 -> 2
Marcos 2 -> 3
Jones 3 -> 4
Terry 4 -> 5
Joe 5 -> 6
Rodrigo 6 -> 1
Barbara 6 -> 1
Marylin 1 -> 4
Brown 4 -> 6
Benjamin 1 -> 3
Lucas 4 -> 1
Выше, построено:
Посмотрите, как мы должны выбирать между красным, синим или черным вариантами?
Реальная проблема немного сложнее, потому что у нас есть 27 единиц и 751 запрос. Пожалуйста, посмотрите на визуализацию
Цель
Собрав все запросы, как удовлетворить большинство из них?
Теория (?) Приложения
Имея граф , пусть каждая единица будет вершиной а запрос - направленным ребром , успешный обмен примет форму направленного cyle.
Каждый цикл должен использовать только один раз ( работник не может покинуть свое подразделение дважды ), но может посещать несколько раз ( в подразделении может быть много работников, желающих уйти ).
Вопрос
Если эта проблема выражается как
«Как найти циклы, которые вместе содержат наибольшее количество не общих ребер в ориентированном графе»?
Удовлетворим ли мы большинство заказчиков?
Что правда, есть алгоритм, чтобы найти этот оптимальный набор циклов?
Этот подход Гредди решит проблему?
- Найдите самый большой направленный цикл на ;
- Удалить его края от ;
- Повторяйте 1, пока не будет направленного цикла на ;
Можете ли вы мне помочь?
Знаете ли вы другой способ описать исходную проблему (осчастливить большинство заказчиков)?
Изменить : изменил отдел на единицу, чтобы лучше описать проблему.