Niente a che fare con l'Inferno di Dante. Piuttosto, date N squadre con N pari, si vuole elaborare il calendario di un campionato con
girone all'italiana (
round-robin tournament), cioè un tipo di campionato in cui ogni partecipante incontra a turno tutti gli altri partecipanti.
Risulta evidente che in ogni giornata si svolgono N/2 partite e che sono necessarie N-1 giornate.
Se dovessimo inventarlo noi, l'algoritmo sarebbe complicato ed andrebbe in loop. Per fortuna ne è stato ideato uno geniale da un campione di scacchi austro-ungarico che si chiamava
Giovanni Nepomuceno Berger e che non immaginava neanche che cosa sarebbe stato un computer. Un esempio molto significativo di che cosa significhi usare il
pensiero laterale.
Cerco di spiegare l'
algoritmo di Berger come se lo dovessimo eseguire manualmente.
Supponiamo che N=6 e che le 6 squadre siano:
- Atalanta
- Bari
- Bologna
- Cagliari
- Catania
- Chievo
Le suddivido così:
Casa |
Trasferta |
Atalanta |
Cagliari |
Bari |
Catania |
Bologna |
Chievo |
La prima giornata è:
- Atalanta-Cagliari
- Bari-Catania
- Bologna-Chievo
Adesso lascio fissa l'Atalanta al suo posto, metto il Bari in prima posizione nella colonna trasferta, scalo in basso di una posizione il Cagliari ed il Catania, scalo in alto il Bologna e metto in ultima posizione della colonna casa il Chievo che era stato spinto fuori dalla colonna trasferta. Ottengo la seconda giornata:
Casa |
Trasferta |
Atalanta |
Bari |
Bologna |
Cagliari |
Chievo |
Catania |
Con lo stesso procedimento di rotazione in senso orario, ottengo le giornate seguenti:
Casa |
Trasferta |
Atalanta |
Bologna |
Chievo |
Bari |
Catania |
Cagliari |
|
Casa |
Trasferta |
Atalanta |
Chievo |
Catania |
Bologna |
Cagliari |
Bari |
|
Casa |
Trasferta |
Atalanta |
Catania |
Cagliari |
Chievo |
Bari |
Bologna |
|
Spettacolare vero? Davvero bravo il vecchietto!
Osservazioni:
- L'algoritmo può essere migliorato bilanciando gli impegni in casa e in trasferta di ciascuna squadra semplicemente condiderando invertite le colonne Casa e Trasferta nelle giornate pari.
- Viene ogni volta un calendario diverso se all'inizio si mischia (shuffle) l'elenco delle squadre.
- Se N è dispari si può applicare ugualmente l'algoritmo inserendo un'ulteriore squadra fittizia e facendo riposare nella giornata quella squadra che dovrebbe incontrare la squadra fittizia.
- L'algoritmo non considera il vincolo dell'impossibilità di occupare lo stesso campo da parte di due squadre della stessa città, ma il problema può essere facilmente risolto invertendo casa/trasferta per una delle due (ad es. se ti capita Roma-Juve e Lazio-Milan risolvi facendo Roma-Juve e Milan-Lazio; ed anche se capitasse Roma-Inter e Lazio-Milan va tutto a posto facendo Roma-Inter e Milan-Lazio)
Non lo conoscevo... pero mi piace
RispondiEliminaPiccola nota che non mi convince: bilanciamento partite casa/trasferta. Se inverti "semplicemente" le posizioni nelle giornate pari, troverai che l'Atalanta otterrà un bilanciamento Casa 3/trasferta 2 ma ad esempio il Bari ne giocherà 4 in casa e 1 in trasferta. per il resto è OK. Ciao
RispondiEliminati ringrazio perche' mi hai tolto dall'imbarazzo. sono riuscito a fare in pochissimi minuti. ci studiavo senza riuscirci da parecchie ore. gaetano savoca
RispondiEliminaspiegato molto meglio rispetto a quello che ho trovato su Wikipedia o qualche altro articolo che purtroppo dava per scontato che si sapeva già il procedimento. grazie
RispondiElimina