Я не теоретик інформатики, але думаю, що ця проблема справжнього світу належить саме тут.
Проблема
Моя компанія має кілька підрозділів по всій країні.
Ми запропонували працівникам можливість працювати в іншому підрозділі. Але є умова: загальна кількість робітників у підрозділі не може змінюватися.
Це означає: ми дозволимо працівникові залишити свій підрозділ, якщо хтось захоче його місця.
Приклад (вигаданих) даних запиту:
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 запит. Будь ласка, погляньте на візуалізацію
Мета
Зібравши всі запити, як задовольнити більшість із них?
Теорія (?) Застосування
Маючи графік , нехай кожна одиниця буде вершиною V, а запит - направленим краєм E , успішний обмін прийме форму спрямованого кілець.
Кожен цикл повинен використовувати лише один раз ( працівник не може залишити свою одиницю двічі ), але може відвідувати V кілька разів ( у підрозділі може бути багато працівників, які бажають виїхати ).
Питання
Якщо ця проблема виражається як
"Як знайти цикли, які разом включають найбільшу кількість неподілених ребер у спрямованому графіку"?
Чи задовольнимо ми більшість запитувачів?
Щоправда, існує алгоритм, щоб знайти той оптимальний набір циклів?
Чи вирішить цей ґредді підхід проблему?
- Знайдіть найбільший спрямований цикл на ;
- Видаліть його краї з ;
- Повторюйте 1, поки на не буде направлений цикл ;
Можеш мені допомогти?
Чи знаєте ви інший спосіб описати початкову проблему (зробити щасливою більшість запитувачів)?
Редагувати : змінив відділ на підрозділ, щоб краще описати проблему.