Non sono un teorico dell'informatica, ma penso che questo problema del mondo reale appartenga qui.
Il problema
La mia azienda ha diverse unità in tutto il paese.
Abbiamo offerto ai dipendenti la possibilità di lavorare su un'altra unità. Ma c'è una condizione: il numero totale di lavoratori in un'unità non può cambiare.
Ciò significa: permetteremo a un dipendente di lasciare la sua unità se qualcuno vuole il suo posto.
Dati di richiesta (fittizi) di esempio:
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
Quanto sopra, tracciato:
Vedi come dobbiamo scegliere tra le opzioni rosso, blu o nero?
Il vero problema è un po 'più complesso, perché abbiamo 27 unità e 751 richieste. Dai un'occhiata alla visualizzazione
L'obiettivo. il gol
Dopo aver raccolto tutte le richieste, come soddisfare la maggior parte di esse?
Teoria (?) Applicazione
Avendo il grafico , lascia che ogni unità sia un vertice e una richiesta sia un bordo diretto , uno scambio riuscito prenderà la forma di un cyle diretto.V E
Ogni ciclo deve usare una sola volta ( un lavoratore non può lasciare la sua unità due volte ), ma può visitare più volte ( un'unità può avere molti lavoratori che vogliono andarsene ).V
La domanda
Se questo problema è espresso come
"Come trovare i cicli che, insieme, coinvolgono il maggior numero di spigoli non condivisi in un grafico diretto"?
Soddisferemo la maggior parte dei richiedenti?
Detto questo, esiste un algoritmo per trovare quell'insieme ottimale di cicli?
Questo approccio greddy risolverà il problema?
- Trova il più grande ciclo diretto su ;
- Rimuovi i suoi bordi da ;
- Ripeti 1 fino a quando non c'è un ciclo diretto su ;
Mi potete aiutare?
Conosci un altro modo per descrivere il problema originale (rendere felice la maggior parte dei richiedenti)?
Modifica : cambiato reparto in unità, per descrivere meglio il problema.