Per prima cosa: ho bisogno di scusarmi in anticipo sulla cattiva scelta del titolo per questa domanda, ma davvero non ho potuto trovare qualcosa di significativo. In realtà sto cercando suggerimenti su come chiamare questo tipo di problema, così da poter fare qualche ricerca per conto mio. Cambierò volentieri il titolo una volta che i suggerimenti inizieranno a venire.
Non è nemmeno un problema reale, è solo un esercizio che ho inventato per esplorare algoritmi che non ho mai avuto la possibilità di affrontare.
Diciamo che vogliamo scrivere un programma che ci aiuterà a ottimizzare la logistica di un numero arbitrario di gruppi musicali che devono esibirsi uno dopo l'altro sullo stesso palco durante la stessa notte.
Ecco il problema: le band condividono i giocatori, il che significa che ogni dato giocatore può giocare in più di una band. Se le band fossero tutte composte da giocatori diversi, non avremmo affatto bisogno di un programma, ma dal momento che tutti i musicisti si conoscono, formeranno molte band con diverse combinazioni di esse.
Quello che vogliamo fare è organizzare tutte le band in modo tale che i gruppi che condividono il maggior numero di membri si "raggruppino" insieme e suonino uno dopo l'altro, in modo da ridurre al minimo il numero di musicisti coinvolti ogni cambio di banda. In altre parole, il maggior numero possibile di musicisti dovrebbe essere già sul palco ogni volta che una band finisce il suo set e il prossimo viene sul palco.
Questa è solo un'altra forma del famoso problema di rostering / scheduling dello staff?
O è più semplice?
Devo ammettere che non ho ancora pensato a come si potrebbe risolverlo, è solo un problema a cui ho pensato oggi.
Se dovessi prenderlo a pugni, sembra che il problema si riduce a capire quali gruppi hanno il maggior numero di membri in comune, e ordinarli di conseguenza.
Ma come si chiama questo linguaggio di CS?
E tutto quello che c'è da fare?
Organizzare le bande per numero di musicisti è l'unico requisito che abbiamo. Sento che, se dovessimo prendere in considerazione altri tipi di vincoli come, ad esempio, una particolare band preferirebbe suonare all'inizio e un'altra destra nel mezzo, questo potrebbe trasformarsi in un vero problema di programmazione.
Nella sua forma più semplice, però, questo sembra essere un problema semplice ma, come ho detto, non conosco il nome della famiglia di algoritmi che mi permetterebbe di determinare quali band hanno il maggior numero di musicisti in comune.