私はコンピューター科学の理論家ではありませんが、この現実の問題はここにあると思います。
問題
私の会社には、全国にいくつかのユニットがあります。
従業員に別のユニットで作業する可能性を提供しました。しかし、条件があります:ユニットの労働者の総数は変更できません。
つまり、誰かが自分の場所を望んでいる場合、従業員が自分の部署を離れることを許可します。
(架空の)リクエストデータの例:
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個のリクエストがあるため、実際の問題はもう少し複雑です。視覚化を見てください
目標
すべての要求を収集したら、それらのほとんどをどのように満たすのでしょうか?
Theory(?)アプリケーション
グラフを持ち、すべてのユニットを頂点Vとし、リクエストを有向エッジEとするとし、交換が成功すると有向サイクルの形をとります。
各サイクルは 1回だけ使用する必要があります(労働者はユニットを2回離れることはできません)が、Vを数回訪問できます(ユニットは多くの労働者を退去させたい場合があります)。
質問
この問題が次のように表現される場合
「有向グラフで非共有エッジの最大数を一緒に含むサイクルを見つける方法」
ほとんどの要求者を満足させますか?
それは本当です、そのサイクルの最適なセットを見つけるアルゴリズムがありますか?
この貪欲なアプローチは問題を解決しますか?
- Gで最大の有向サイクルを見つけるます。
- からエッジを削除します;
- 有向サイクルがなくなるまで1を繰り返します。
手伝って頂けますか?
元の問題を説明する別の方法を知っていますか(リクエスターのほとんどを幸せにします)?
編集:部門をユニットに変更し、問題をより適切に説明します。