Sei sulla pagina 1di 9

CP pensareprogettareprogrammare n.

137 Luglio/Agosto 2004

Torneo a squadre
di Luigi Morelli
Un sistema originale per avvicinarsi alla teoria dei gra

Luigi Morelli ` E un consulente informatico. Si occupa di system & network management, ma da sempre cerca di coniugare il lato ludico di Matematica e Scienza dellInformazione.

pubblicato su WWW.INFOMEDIA.IT stampa digitale da Lulu Enterprises Inc. stores.lulu.com/infomedia


Infomedia
` Infomedia e limpresa editoriale che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori dinformatica italiani. Sono pi` di 800 gli autori che hanno realizzato per le teu state Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni di prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e stratagemmi. Oltre 6 milioni di copie distribuite, trentamila pagine stampate, fanno di questa impresa la pi` grande ed u inuente realt` delleditoria specializzata nel campo della a programmazione e della sistemistica. In tutti questi anni le riviste Infomedia hanno vissuto della passione di quanti vedono nella programmazione non solo la propria professione ma unattivit` vitale e un vero a divertimento. ` Nel 2009, Infomedia e cambiata radicalmente adottando ` un nuovo modello aziendale ed editoriale e si e organizzata attorno ad una idea di Impresa Sociale di Comunit` , a partecipata da programmatori e sistemisti, separando le attivit` di gestione dellinformazione gestite da un board a comunitario professionale e quelle di produzione gesti` te da una impresa strumentale. Questo assetto e in linea con le migliori esperienze internazionali e rende Infomedia ancora di pi` parte della Comunit` nazionale degli u a sviluppatori di software. ` Infomedia e media-partner di manifestazioni ed eventi in ambito informatico, collabora con molti dei pi` imporu tanti editori informatici italiani come partner editoriale e fornitore di servizi di localizzazione in italiano di testi in lingua inglese.

Limpaginazione automatica di questa rivista e realizzata al ` 100% con strumenti Open Source usando OpenOffice, Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp, Python e BASH

For copyright information about the contents of Computer Programming, please see the section Copyright at the end of each article if exists, otherwise ask authors. Infomedia contents is 2004 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is 2004 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di Computer Programming sono riportate nella sezione Copyright alla ne di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e 2004 Infome` dia e rilasciato con Licenza Creative Commons 2.5 BYNC-ND. Il contenuto Turing Club e 2004 Turing Club ` e rilasciato con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. ` E in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a info@infomedia.it o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa

mindware

di Luigi Morelli

Torneo a squadre
Un sistema originale per avvicinarsi alla teoria dei grafi

ramai il campionato di calcio terminato, portando con s gioie e veleni; il vero tifoso tuttavia sa bene che la sua passione trover alimento anche al termine della stagione (e questa estate avremo anche il campionato europeo). Largomento che tratteremo in questa puntata rappresenta uno studio di un nostro lettore, Giuseppe Guarino, che ha presentato un proprio lavoro relativo appunto alla elaborazione di tabelloni di incontro tramite gli strumenti pi squisitamente teorici della matematica e dellinformatica.

interi q,r tali che a=bq+r. Tale operazione che permette di determinare gli interi q,r a partire da a e b, prende il nome di divisione di a per b. Chiameremo a,b,q,r rispettivamente dividendo, divisore, quoziente e resto della divisione. Facciamo subito un esempio: sia a=59 e b=7, allora si avr che 59=(7)(8)+3 da cui risulta che q=8 e r=3. Ricordiamo che un numero b un divisore di a (in formula b|a) se il resto della divisione di a per b zero. In altri termini, a divisibile per b se risulta un multiplo intero di b (in formula a=b*k con k intero). La relazione di congruenza di uso comune nella vita di tutti i giorni. Infatti, per meglio focalizzarla, potremmo pensare alla lettura dei secondi sul quadrante di un cronometro: immaginiamo un corridore in una pista e un cronometrista che osserva la lancetta del suo cronometro. Egli vedr posizionata la lancetta dei secondi sul numero 15 dopo 15 secondi dallo start, dopo 75 secondi, dopo 615 secondi, dopo 15.135 secondi e cos via ogni sessanta secondi. Questo significa che il cronometrista sta lavorando modulo 60.

Aritmetica modulare
La nascita della moderna teoria dei numeri da attribuire al matematico Carl Friedrich Gauss, il quale svilupp la nozione di congruenza gi introdotta da Eulero, Lagrange e Legendre, e la approfond fino a formulare una teoria completa. Questa relazione gode di molte delle propriet delluguaglianza tra numeri interi. Il simbolo stato introdotto da Gauss, proprio per conservare lanalogia con il simbolo =. Come per luguaglianza, nella relazione di congruenza possiamo sommare, sottrarre e moltiplicare elementi congruenti mantenendo la relazione . Questa importante relazione nellinsieme dei numeri interi definita nel modo seguente: fissato un n N (n appartenente allinsieme dei numeri naturali {1,2,3,}) possibile introdurre la relazione di congruenza modulo n: dati due interi a,b diciamo che a congruo a b modulo n (in formula anb oppure ab (mod n) ) se n un divisore di a-b. La relazione di congruenza modulo n, pertanto, identifica tra loro due interi se e solo se la loro differenza un multiplo di n. Tale relazione risulta essere una relazione di equivalenza, poich gode delle seguenti propriet: 1) riflessiva: 2) simmetrica: 3) transitiva: aa (mod n); ab (mod n) implica ba (mod n); ab (mod n) e bc (mod n) implica ac (mod n);

Creazione del torneo


Vediamo ora di risolvere un problema con lausilio dellaritmetica modulare. Immaginiamo di dover preparare un tabellone per un torneo sportivo in cui partecipano N squadre. Come i lettori sanno, nel girone allitaliana, ogni squadra deve incontrare le avversarie una volta in casa e una volta in trasferta. Possiamo, almeno inizialmente, supporre che N sia un numero pari, riservandoci di trattare in seguito il caso in cui al torneo siano iscritte un numero dispari di squadre. Ipotizziamo che al campionato siano iscritte 6 squadre (cio N=6) e per semplicit di esposizione indichiamo tali squadre con s1,s2,s3,s4,s5,s6. La coppia (s1,s2) indicher lo scontro tra la squadra 1 e la squadra 2. Nel nostro studio, tratteremo la creazione del tabellone soffermandoci su uno solo dei due gironi, ad esempio quello di andata. ovvio che nel girone di ritorno le coppie di squadre saranno le stesse, con la sola eccezione che bisogner effettuare una permutazione degli elementi. Per esempio se nella 1a giornata del girone di andata del campionato abbiamo considerato (s1,s2), nella 1a giornata di ritorno dovremo considerare (s2,s1). Individuate le N squadre, possiamo associare un numero tra 1 e N ad ognuna di esse, ad esempio s1=1, s2=2, , s6=6. Cos come stato impostato il girone di andata, si
Computer Programming n. 137 - Luglio/Agosto 2004

importante sottolineare che presa una coppia di interi a,b con b non nullo, sono univocamente individuati due

Luigi Morelli

lmorelli@infomedia.it

u un consulente informatico. Si occupa di system & network management, ma da sempre cerca di coniugare il lato ludico di Matematica e Scienza dellInformazione.

56

RUBRICHE
avr che ogni squadra effettuer 5 (pari a N-1) partite. Supponiamo ora di voler sapere quale sar la formazione avversaria (che indicheremo con y) della squadra x (con x=1,2,3,4,5) nella h-esima giornata (con h=1,2,3,4,5). Il risultato si pu ricavare dalla seguente relazione di congruenza modulo N-1. x+y h (mod N-1) Questa relazione assegna ad ogni squadra ununica rivale nella giornata h-esima, a meno che la squadra non sia contraddistinta dal numero x (ossia y=x) da cui sarebbe 2xh (mod N-1). Per essere pi chiari facciamo subito un esempio: vorremmo sapere lavversaria della squadra s3 nella 4 giornata di andata. Pertanto abbiamo: x=3, h=4, N-1=5 da cui si ha: y+3 4 (mod 5), cio y1 (mod 5). Da quanto detto si ricava che la squadra s1 incontrer la squadra s3 nella 4a giornata di campionato. Osserviamo che quanto detto verificato se consideriamo le squadre tra s1 e s5, perch lavoriamo modulo 5. Infatti se considerassimo la squadra s6 (a cui abbiamo attribuito il valore intero 6) avremmo le stesse avversarie della squadra s1, poich 61(mod 5). i,j=1,2,..,5). Osserviamo inoltre che sulla diagonale principale sono inseriti dei valori che non dovranno essere presi in considerazione, in quanto individuano incontri non possibili tra le squadre con se stesse. Essendo la matrice simmetrica, possiamo considerare solo una delle due parti uguali rispetto alla diagonale principale, ottenendo una nuova matrice in cui gli incontri tra le squadre sono considerati una sola volta (Tabella 2). Aggiungiamo ora la colonna relativa alla squadra s6 e inseriamo nelle celle di detta colonna il valore contenuto in quelle presenti sulla diagonale principale, ottenendo una nuova matrice (Tabella 3). In pseudocodice:
for i:=1 to 5 do Begin for j:=i to 5 do Begin Tab_Calendario[i,j] := (i+j) mod 5; end; Tab_Calendario[i,6] := Tab_Calendario[i,i]; end;

Nel girone allitaliana, ogni


squadra deve incontrare le avversarie una volta in casa e una volta in trasferta
In definitiva, la precedente regola potremmo riassumerla in forma matematica con la seguente: siano x,y,h interi appartenenti allinsieme [1, N-1] con x y, la squadra x incontrer la squadra y se verificata la seguente relazione: x+y h (mod N-1), (dove h indica la giornata in cui le due squadre si incontrano). Vediamo ora come poter definire il tabellone deglincontri, considerando tutte le squadre iscritte al campionato: consideriamo dapprima solo cinque (N-1) delle sei squadre, ossia s1,s2,s3,s4,s5. Costruiamo una tabella in cui le righe e le colonne siano identificate dal numero associato ad ogni squadra. Inseriamo in ogni cella un valore numerico nel seguente modo: cella (1,1), valore 1+1=2; cella (1,2), valore 1+2=3; ... ... cella (5,4), valore 5+4=9 4 (mod 5) (poich 9 = (5)(1)+4) cella (5,5), valore 5+5=10 0 (mod 5) (poich 10 = (5)(2)+0) In altre parole, bisogna inserire in ogni cella il resto della divisione tra [numero_riga]+[numero_colonna] e N-1=5, cio in ogni cella inseriamo un h tale che rig+col h (mod 5). La matrice risultante (Tabella 1), come si pu osservare, simmetrica rispetto alla diagonale principale, cio il valore corrispondente a (i,j) uguale al valore (j,i) (con
Computer Programming n. 137 - Luglio/Agosto 2004

A questo punto, se indichiamo con 5 le celle contenenti 0 (essendo (mod 5)) e non considerando il valore contenuto nella diagonale principale, otteniamo un risultato analogo a quello rappresentato nella Tabella 4 da cui considerando tutte le coppie (i,j) in cui i identifica la riga e j la colonna, possiamo ricavare lo schema deglincontri (Tabella 5). importante ora considerare che una squadra non pu sempre giocare in casa (o sempre fuori casa), pertanto, al fine di evitare ci, possibile considerare le coppie (i,j) nel seguente modo: (i, j) =

(i, j) (j, i)

se i + j pari se i + j dispari

da cui si ricava la tabella definitiva relativa agli incontri (Tabella 6). Come si pu osservare dalla precedente tabella, non tutte le squadre giocheranno lo stesso numero di partite in casa, poich il numero di partite totale di ognuna dispari (cio 5). Tale disparit verr colmata nel girone di ritorno, nel quale saranno invertite le coppie. Per una maggior chiarezza si possono osservare le Tabelle 7 e 8. In pseudocodice, indicata con Tab la Tabella 4, la routine di visualizzazione degli incontri riportati in Tabella 6 :
For h := 1 to 5 do Begin {Stampa il numero della giornata di gioco (i)} For i := 1 to 5 do begin For j:=i+1 to 6 do if Tab[i,j] = h then begin if (i+j) mod 2 = 0 then {Stampa la coppia (i,j)} else {Stampa la coppia (j,i)} End; End; End; End; End;

E se le squadre fossero in numero dispari?


Questo caso analogo al precedente con la sola eccezione che in ogni giornata una squadra non incontrer nessu57

mindware
TABELLA 1
Squadre 1 2 3 4 5 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 5 1 2 3 4 0

TABELLA 2
Squadre 1 2 3 4 5 1 2 2 3 4 3 4 0 1 4 0 1 2 3 5 1 2 3 4 0

TABELLA 3
Squadre 1 2 3 4 5 1 2 2 3 4 3 4 0 1 4 0 1 2 3 5 1 2 3 4 0 6 2 4 1 3 0

TABELLA 4
Squadre 1 2 3 4 5 1 2 3 3 4 5 4 5 1 2 5 1 2 3 4 6 2 4 1 3 5

TABELLA 5 Giornata 1 2 3 4 5 TABELLA 7 Incontri s1-s5, s2-s4, s3-s6 s1-s6, s2-s5, s3-s4 s1-s2, s3-s5, s4-s6 s1-s3, s2-s6, s4-s5 s1-s4, s2-s3, s5-s6

TABELLA 6 GIRONE DI ANDATA Giornata 1 2 3 4 5 Incontri s1-s5, s2-s4, s6-s3 s6-s1, s5-s2, s4-s3 s2-s1, s3-s5, s4-s6 s1-s3, s2-s6, s5-s4 s4-s1, s3-s2, s6-s5

GIRONE DI ANDATA Giornata 1 2 3 4 5 Incontri s1-s5, s2-s4, s6-s3 s6-s1, s5-s2, s4-s3 s2-s1, s3-s5, s4-s6 s1-s3, s2-s6, s5-s4 s4-s1, s3-s2, s6-s5 Squadra s1 s2 s3 s4 s5 s6 Casa 2 3 2 3 2 3 Fuori 3 2 3 2 3 2

na delle altre. In questo caso semplice gestire gli incontri, attribuendo una giornata di riposo a turno alle squadre partecipanti al torneo. Se volessimo ad esempio gestire un campionato con solo 5 squadre (N=5 da cui N-1=4), allora dovremmo considerarne una fittizia che chiameremo R (ad indicare la giornata di riposo) a cui attribuiremo il valore 6 (come succedeva per la squadra s6). A questo 58

punto siamo ritornati al caso precedente, ossia continuiamo a lavorare considerando il modulo 5 (Tabelle 9 e 10). Giunti a questo punto, possiamo dire che siamo perfettamente in grado di creare un tabellone contenente gli incontri tra squadre in un campionato; ci resta solo di analizzare la fase successiva, ossia la gestione delle risultanze tra gli incontri che via via si vanno a disputare. A tale
Computer Programming n. 137 - Luglio/Agosto 2004

RUBRICHE
TABELLA 8 GIRONE DI RITORNO Giornata 1 2 3 4 5 Incontri s5-s1, s4-s2, s3-s6 s1-s6, s2-s5, s3-s4 s1-s2, s5-s3, s6-s4 s3-s1, s6-s2, s4-s5 s1-s4, s2-s3, s5-s6 Squadra s1 s2 s3 s4 s5 s6 TABELLA 9 GIRONE DI ANDATA Giornata 1 2 3 4 5 Incontri s1-s5, s2-s4, R-s3 R-s1, s5-s2, s4-s3 s2-s1, s3-s5, s4-R s1-s3, s2-R, s5-s4 s4-s1, s3-s2, R-s5 Giornata 1 2 3 4 5 TABELLA 10 GIRONE DI ANDATA Incontri s1-s5, s2-s4 s5-s2, s4-s3 s2-s1, s3-s5 s1-s3, s5-s4 s4-s1, s3-s2 Riposo s3 s1 s4 s2 s5 Casa 3 2 3 2 3 2 Fuori 2 3 2 3 2 3

TABELLA 11

grafo

matrice di adiacenza

grafo

matrice di adiacenza

TABELLA 12

Immaginiamo che siano gi state disputate le prime due giornate del girone di andata, nelle quali si sono considerate, come si pu osservare nella Tabella 6, le partite individuate dalle seguenti coppie: (5,1), (4,2), (3,6), (1,6), (2,5), (3,4). Il grafo risultante con relativa matrice di adiacenza sar allora il seguente: grafo matrice di adiacenza

scopo analizzeremo un concetto fondamentale della teoria dei numeri: la teoria dei grafi.

I ponti di Knigsberg: la nascita della teoria dei Grafi


In Germania, sulle rive del fiume Pregel situata la bella cittadina di Kaliningrad (Knigsberg fino al 1946). Essa,
Computer Programming n. 137 - Luglio/Agosto 2004

come si pu osservare dalla Figura 1, divisa in quattro parti: due lungo le rive del fiume (contrassegnate con le lettere A e C) un isolotto (contrassegnato con D) e una parte di terra prima di una confluenza (contrassegnata con B). Le quattro zone della citt sono collegate con sette ponti, disposti come nella figura. Nel 1700, i cittadini di Knigsberg, erano soliti chieder59

mindware

FIGURA 1

Schema della citt

FIGURA 2

Grafo equivalente

si se fosse stato possibile attraversare i sette ponti una volta sola, e ritornare al punto di partenza. In altri termini essi volevano ipoteticamente tracciare un percorso che, partendo da una qualsiasi delle quattro aree della citt, attraversasse tutti i ponti una sola volta ritornando infine al punto di partenza. Nel 1736 questo quesito fu sottoposto, sotto forma di indovinello, al grande matematico Eulero (nome italianizzato di Leonhard Euler), il quale pubblic un articolo in cui comparve il primo lavoro sui grafi. Eulero concluse che tale gioco si traduceva topologicamente nel problema di tracciare con una sola linea continua una rete chiusa, percorrendo una sola volta ogni parte del percorso. Il matematico svizzero schematizz il problema come descritto nella Figura 2, in cui le quattro zone sono rappresentate da cerchi uniti opportunamente tra loro con delle linee, le quali rappresentano i sette ponti. Tale figura geometrica composta da punti (o da cerchi come nella Figura 2) e linee. Essa non va considerata come ente geometrico, ma come rappresentazione di una relazione tra i punti considerati. Eulero, grazie appunto alla teoria dei grafi, dimostr che il problema dei ponti di Knigsberg non era risolubile. Dopo la seconda guerra mondiale, la teoria dei grafi si svilupp in modo incessante. Nata come puro scopo empirico, ebbe fino ad allora solo applicazioni in giochi matematici. Ora sappiamo che i grafi sono utili per risolvere problemi tecnici come ad esempio quello dei circuiti elettrici e problemi decisionali, come quello della connessione
TABELLA 13

in rete tra calcolatori, della determinazione del percorso pi breve tra svariate localit, dellassegnazione di un insieme di operazioni ad un insieme di macchine, ecc.

Cenni sulla teoria dei grafi


Come abbiamo visto, un grafo un insieme di elementi tra i quali definita una relazione di corrispondenza che permette loro di essere collegati. Un grafo pu essere schematizzato in modo molto semplice, ma comunque preciso, mediante un disegno che comprende dei punti (elementi dellinsieme) uniti da linee. Queste ultime possono essere orientate o no, cio possibile attribuire alla linea un verso o considerarla come semplice collegamento tra i punti. Un grafo non orientato (o non diretto) G costituito da una coppia ordinata (V, A) dove V un insieme finito di elementi chiamati vertici o nodi e A un insieme finito di archi o spigoli. Un arco una coppia non ordinata di due nodi. Vediamo subito un esempio: sia dato il grafo non orientato G=(V, A) come in Figura 3, allora si ha: V={v1, v2, v3, v4} e A={e1, e2, e3, e4, e5, e6} dove e1=(v1,v2), e2=(v2,v3), e3=(v3,v4), e4=(v4,v1), e5=(v4,v2), e6=(v1,v3). Osserviamo che possibile raffigurare un grafo utilizzando un disegno differente ma in grado di rappresentare la stessa situazione. Infatti se osserviamo il grafo in Figura 4 potremo notare che esso ha lo stesso insieme di nodi e archi di quello precedente. I grafi siffatti si dicono isomorfi. Un grafo come quello in Figura 4, in cui gli spigoli non

s1
(1,2) = V

s2

La squadra s1 ha vinto fuori casa con la squadra s2

s1
(1,2) = P

s2

La squadra s1 ha perso fuori casa con la squadra s2

s1
(1,2) = X

s2

La squadra s1 ha pareggiato fuori casa con la squadra s2

s1
(1,2) = V, (2,1) = P

s2

La squadra s1 ha vinto fuori casa con la squadra s2 e la squadra s2 ha perso fuori casa con la squadra s1. In definitiva s1 totalizza due vittorie La squadra s1 ha pareggiato fuori casa con la squadra s2 e la squadra s2 ha perso fuori casa con la squadra s1. In definitiva s1 totalizza una vittoria e un pareggio mentre la squadra s2 solo un pareggio

s1
(1,2) = X, (2,1) = P

s2

60

Computer Programming n. 137 - Luglio/Agosto 2004

RUBRICHE

FIGURA 3

Grafo non orientato di partenza

Torneo a squadre: gestione della classifica


Ritornaniamo al problema del torneo a squadre e ipotizziamo, come fatto in precedenza, che le squadre iscritte siano 6. Utilizzeremo alluopo la teoria dei grafi per avere in ogni momento un quadro riepilogativo delle partite disputate e un aggiornamento costante della classifica. Se associamo ad ogni squadra un vertice e colleghiamo tra loro in tutti i modi possibili i punti, avremo un grafo analogo (a meno di isomorfismi) a quello rappresentato in Figura 5. Come possiamo notare, da ogni punto partono 5 (N-1) archi che vanno ad incontrare i restanti punti, pertanto ogni punto ha valenza 5, che indica il numero di partite che dovr disputare ogni squadra. Se il grafo non orientato e consideriamo larco (1,2) ovvio che non dovremo disegnare larco (2,1) poich uguale al precedente. Per disegnare correttamente il grafo di tutte le partite da disputare, dovremo quindi assicurarci che ogni punto abbia valenza pari a 5, per fare ci conveniente partire dal primo vertice (s1) e collegare i 5 punti rimanenti ( (1,2), (1,3), (1,4), (1,5), (1,6) ), poi posizionarsi sul secondo vertice (s2) e tracciare gli archi di collegamento con i restanti punti che in questo caso sono solo 4 ( (2,3), (2,4), (2,5), (2,6) ), essendo gi stato assegnato larco (1,2) e cos via fino allultimo punto. Premesso ci, possiamo calcolare il numero di partite totali che verranno disputate nel girone (di andata o di ritorno), che sar espresso dalla seguente formula: n(n 1) (n 1) + (n 2) + . . . + 1 = 2 da cui, considerato che le squadre sono 6, si ottiene un numero totale di partite pari a 15. Il numero degli archi (partite) nel grafo in figura dunque pari a 15. Se volessimo in qualche modo gestire anche il luogo in cui vengono disputate le partite, ossia in casa o fuori casa, potremmo allora utilizzare un grafo orientato, disegnando una freccia orientata verso la squadra che gioca in casa. Larco s1 s2 indicher dunque, che la squadra s1 ospite della squadra s2, la quale gioca in casa. Esso sar individuato dalla coppia (1,2). Per meglio comprendere la situazione, si pu osservare lo schema di esempio riportato nella Tabella 12. Se volessimo studiare la relazione risultato nellambito del torneo a squadre, ossia volessimo in qualche modo disegnare un grafo che riporti, oltre alla squadra che gioca in casa (o fuori casa), anche il risultato dellincontro, potremmo operare indicando lesito in corrispondenza della frec-

si intersecano tra loro detto grafo planare. Un esempio di grafo planare pu essere il circuito stampato di unapparecchiatura elettronica. Per ottenere dei grafi planari, a volte basta semplicemente cambiare la disposizione dei vertici. possibile rappresentare un grafo in diversi modi. Uno di questi, quello matriciale, particolarmente importante per la memorizzazione in un calcolatore. Infatti, dato il grafo G=(V, A) in cui V composto di n vertici, possibile associare ad esso una matrice (n x n) detta matrice di adiacenza in cui il generico elemento mi,j definito nel seguente modo: mi,j =

1 0

se (i,j) A altrimenti

In altri termini, consideriamo il valore 1 nella posizione (i, j) se esiste un arco nel grafo che collega il vertice vi con il vertice vj dove i, j valgono 1,2,3,4 e i j. Se volessimo, a questo punto, raffigurare la matrice associata alla Figura 3 si avrebbe la seguente struttura:

Come si pu notare, la matrice (4 x 4) simmetrica rispetto alla diagonale, ossia (i, j)=(j, i) per ogni i, j=1,2,3,4 con i j. Vediamo ora un altro tipo di grafo, che sar utile nella trattazione che andremo ad affrontare in seguito. Un grafo orientato (o diretto) G costituito da una coppia ordinata (V, A) dove V linsieme dei vertici e A un insieme di archi costituito da coppie ordinate di nodi. Mentre per i grafi non orientati la coppia (i, j)=(j, i), per i grafi orientati la coppia (i,j) designa un collegamento da i a j ma non da j a i, pertanto (i, j)(j, i). Nella rappresentazione grafica di questi tipi di grafo, larco viene raffigurato da una freccia, pertanto, presa ad esempio la coppia (i, j), diremo che larco sar uscente dal nodo vi (coda dellarco) e entrante in vj (testa). Anche per questi tipi di grafi, possibile associare una matrice di adiacenza. A differenza dei grafi non orientati, assegniamo il valore 1 nella posizione (i, j) se esiste un arco avente coda coincidente con vi e testa con vj, in alternativa assegniamo 0. Per maggior chiarezza, si osservino gli esempi riportati in Tabella 11.
Computer Programming n. 137 - Luglio/Agosto 2004

FIGURA 4

Altra rappresentazione (planare) del grafo

61

mindware

RUBRICHE
rata. La seconda riga della tabella, identificata dalla coppia (2,j), con j=1,3,4,5,6, contiene tutti gli esiti degli scontri disputati fuori casa dalla squadra 2. Nella somma dovremo tener conto di tutti gli incontri in cui la relativa squadra di casa ha perso o ha pareggiato, ossia dovremo considerare i valori 1 e 3 contenuti nella riga considerata. In pseudocodice, indicata con TabEsiti la matrice contenente gli esiti delle partite, si ha il seguente algoritmo:
for h:=1 to 6 SOMMA:=0; for i:=1 to 6 do Begin if TabEsiti[i,h] > 0 then SOMMA := SOMMA + TabEsiti [i,h]; End; end; for i:=1 to 6 do Begin if TabEsiti [h,i] = -3 then SOMMA := SOMMA +3; else if TabEsiti [h,i] = 1 then SOMMA := SOMMA +1; End; End;

FIGURA 5

Grafo delle squadre

cia rappresentata sul grafo, come rappresentato nella Tabella 13. Come per i casi precedenti possibile creare una matrice di adiacenza associata al grafo creato. Resta solo da definire un criterio per il riempimento delle celle dalla matrice. Per fare ci, potremmo come nel caso del campionato di calcio allitaliana, associare il numero 1 per le partite pareggiate e il numero 3 per le vinte, con la variante di indicare 3 per le partite non vinte. Per effettuare il conteggio dei punti per ogni squadra non ci rester altro che applicare la seguente regola: per ogni squadra sh con h=1,2,..,n la sommatoria S dei punti accumulati data da: n S= i=1 con (i, h) = (i, h) + j=1 n (h, j)

end; [ Stampare SOMMA ] end;

A questo punto possibile, anzich stampare la somma, inserire il valore trovato nella seconda riga di una tabella (2 x n). Tale tabella dovr contenere nella prima riga il progressivo delle squadre. In questo modo effettuando un ordinamento decrescente rispetto alla riga 2 sar possibile stampare la classifica dei punteggi. In pseudocodice, indicata con TabClass la tabella contenente i punteggi per squadra, si ha:
for i:=1 to 5 for j:=i+1 to 6 if TabClass[2,j] > TabClass[2,i] then [invertire le celle di riga 1 e 2 della tabella] End; end; end;

(i, j) =

{ {

(i, h) 0

se (i, h) > 0 altrimenti

Conclusioni
Come avete visto, Giuseppe Guarino ci ha proposto una puntata molto ricca ed interessante, un sistema pratico un po differente per avvicinarsi alla teoria dei grafi. Per questo mese tutto, arrivederci al prossimo mese con una sorpresa: gli interventi di due lettori che hanno cercato di approfondire gli spunti di riflessione proposti nella puntata intitolata 153.

3 1 0

se (h, j) = 3 se (h, j) = 1 altrimenti

In altre parole, se volessimo sapere i punti accumulati ad esempio della squadra s2 lavorando sulla matrice di adiacenza dovremmo: a) sommare tutti i valori positivi della colonna 2; b) sommare tutti i valori uguali a 1 nella riga 2; c) sommare, cambiando di segno, tutti i numeri negativi della stessa riga 2. Infatti la seconda colonna della tabella identificata dalla coppia (i,2), con i=1,3,4,5,6, contiene tutti gli esiti degli scontri disputati in casa dalla squadra n. 2. Nella somma, dovremo tener conto di tutti gli incontri in cui la squadra 2 ha vinto o ha pareggiato, pertanto siamo interessati ai valori 1 e 3 contenuti nella colonna conside62

BIBLIOGRAFIA & RIFERIMENTI


[1] M.W. Baldoni et al. Numeri e Codici - Corso di Matematica ed elementi di didattica, 2001, Scuola IAD Universit degli studi di Tor Vergata. [2] A. Scimone, Congruenze, http://spazioinwind.libero.it/adolscim/lavori/congrue1.pdf [3] M. Cerasoli, F. Eugeni, M. Protasi, Elementi di matematica discreta, 1988, Zanichelli. [4] E. Benevello, A. Gusmano, http://www.apenet.it/grafica /libri/Grafica/Grafica03/3X16_RTF.html

Computer Programming n. 137 - Luglio/Agosto 2004