Girone all'italiana

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:
  1. Atalanta
  2. Bari
  3. Bologna
  4. Cagliari
  5. Catania
  6. Chievo
Le suddivido così:
Casa Trasferta
Atalanta Cagliari
Bari Catania
Bologna Chievo
La prima giornata è:
  1. Atalanta-Cagliari
  2. Bari-Catania
  3. 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)

Commenti

  1. Piccola 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

    RispondiElimina
  2. ti ringrazio perche' mi hai tolto dall'imbarazzo. sono riuscito a fare in pochissimi minuti. ci studiavo senza riuscirci da parecchie ore. gaetano savoca

    RispondiElimina
  3. spiegato 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

Posta un commento

Post più popolari