Ich las und http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm und habe Probleme zu verstehen. Es scheint, dass das Beispiel unter den Annahmen ist, dass jeder Job nur 1 Person annehmen kann und jede Person 1 Job will. Ich frage mich, wie sich der Algorithmus/Code ändern würde, wenn zum Beispiel das v-Set eine Kapazität von> 1 (kann mehrere Leute für diesen Job einstellen) und das U-Set> 1 (jede Person will mehr als 1 Job) hat?maximale zweiteilige Übereinstimmung (Ford-Fulkerson)
Antwort
Jobs zu ermöglichen, mehr als eine Person, die ihnen zugewiesen haben, dann würden Sie nur Kantenkapazitäten Jobs
-Terminal
(ähnlich wie Niklas B. beschrieben in his comment, aber nicht genau.)
Wie dies ändern :
die Kapazitäten von 1 vom Source
zum People
und 1 People
-Jobs
garantiert, dass eine Person immer nur für eine j ausgewählt werden ob (weil der maximale Fluss, den sie insgesamt beitragen können, 1 ist). Die Kapazitäten > 1
von Jobs
bis Terminal
ermöglichen jedoch, dass diesem Job mehr als eine Person zugewiesen werden kann.
Wenn eine Person auch mehr als 1 Job ausführen kann, dann den maximalen Durchfluss Source
-Person
erhöht dich um diesen Betrag:
Wo i
, j
, k
und x
sind Stand-In für Ganzzahlen mit Werten >= 1
Der Schlüssel, an den man sich hier erinnern muss, ist, dass die Flusskapazitäten links von People
diktieren, wie viele Jobs sie möglicherweise haben nehmen, und die Durchflusskapazitäten rechts von Jobs
diktieren, wie viele Personen dieser Job zugewiesen werden kann. Die Kapazitäten in der Mitte sollten sich nicht ändern.
- 1. Sortieren nach Maximale Bedingung Übereinstimmung
- 2. Zweiteilige Schienen Layouts
- 3. Wie funktionieren zweiteilige Mengenintervalle bei einem EVENT?
- 4. RegEx: Kleinste mögliche Übereinstimmung oder nongreedy Übereinstimmung
- 5. Gibt es einen Polynomalgorithmus, um die maximale gewichtete perfekte Übereinstimmung in einem allgemeinen Diagramm zu finden?
- 6. Jasmine toHaveBeenCalledWith Teilweise Übereinstimmung
- 7. Python String-Übereinstimmung
- 8. Wildcard-String-Übereinstimmung
- 9. scala Liste Übereinstimmung
- 10. ACCESS - Kreuztabellenabfrage - nächste Übereinstimmung
- 11. Strtok(), keine Token-Übereinstimmung
- 12. Elasticsearch query_string genaue Übereinstimmung
- 13. Invert Übereinstimmung mit regexp
- 14. NSPredicate für genaue Übereinstimmung
- 15. Übereinstimmung .jpg Regex
- 16. JQUERY DATATABLE genaue Übereinstimmung
- 17. Solr vorschlagen genaue Übereinstimmung
- 18. Express Route falsche Übereinstimmung
- 19. String.IndexOf genaue Übereinstimmung
- 20. Übereinstimmung Tupel mit null
- 21. Ruby globale Übereinstimmung regexp?
- 22. Python Regex - bedingte Übereinstimmung?
- 23. Übereinstimmung mit regulärer Ausdruck
- 24. MongoDB-Aggregationsframework-Übereinstimmung ODER
- 25. Regex Übereinstimmung Ausrufezeichen Java
- 26. SOLR Genaue Übereinstimmung Ausgabe
- 27. Partielle RegExp Übereinstimmung
- 28. Regulärer Ausdruck Übereinstimmung
- 29. Gesamtmuster Übereinstimmung in Postgres?
- 30. Aggregierte Abfrage ohne $ Übereinstimmung
Sie haben nur Kantenkapazitäten> 1 auf der linken und rechten Seite des Diagramms und finden den maximalen Durchfluss wie gewohnt. Ihr Algorithmus muss etwas allgemeiner sein, um die Engpasskapazität des erweiterten Pfads zu verfolgen. Sie können über Ford-Fulkerson lesen [auf Wikipedia] (http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm) –
So sagen wir, jeder Mensch will genau 2 Jobs und jeder Job hat 3 Plätze zur Verfügung. Würde das Diagramm so aussehen? http://i.imgur.com/B0SvQjU.png – senjougahara
Die Kanten in der Mitte sollten die Kapazität 1 haben, es sei denn, Sie möchten eine Person demselben Job mehrmals zuweisen (was je nach Anwendungsfall sinnvoll sein kann). Dann finden Sie den Max-Flow in diesem Graph und prüfen, ob er gleich 8 ist (Summe der Kapazitäten auf der linken Seite). Wenn nicht, dann können Sie nicht jeden Job erfüllen –