PARTE PRIMA: RETI CABLATE 1 IL PROBLEMA DELL’INSTRADAMENTO OVVERO IL 2 CAMMINO PIÙ CORTO E IL CAMMINO DI COSTO MINIMO Prof. Tiziana Calamoneri Corso di Algoritmi per le reti A.A. 2011/12 IL PROBLEMA DELL’INSTRADAMENTO (1) Data una rete di calcolatori: Quando dei pacchetti vengono inviati da un calcolatore ad un altro attraverso una rete, i singoli calcolatori nella rete devono decidere il percorso che i dati devono compiere tramite una serie di calcolatori intermedi. Questo è il generalissimo problema dell’instradamento. 3 IL PROBLEMA DELL’INSTRADAMENTO (2) Caso 1. Instradamento non adattivo. Un algoritmo di instradamento potrebbe cercare di mandare pacchetti attraverso la rete in modo che la lunghezza del cammino percorso risulti minimizzato. La lunghezza può essere misurata in termini di numero di passaggi tra coppie di calcolatori. Se la rete è modellata con un grafo (nodo = calcolatore e arco = connessione), il problema si riduce alla ricerca del cammino più corto tra due nodi. 4 IL PROBLEMA DELL’INSTRADAMENTO (3) Caso 2. Instradamento adattivo. Tiene conto delle condizioni di traffico: per decidere il passo successivo viene esaminato il traffico per cercare di indirizzare il pacchetto verso le zone con minor traffico. Se la rete è modellata con un grafo arco-pesato (nodo = calcolatore, arco = connessione e peso = valore dinamico proporzionale al traffico sulla connessione relativa), il problema si riduce alla ricerca (dinamica) del cammino di costo minimo. 5 IL PROBLEMA DELL’INSTRADAMENTO (4) Caso 3. Instradamento con faults. Nel caso in cui la rete sia modellata con un grafo, il peso di ciascun arco assume il significato di probabilità di fault (usato, per esmpio, sulle linee telefoniche, su reti di interconnessione o su reti di trasporto). Si cerca l’instradamento che ha la più alta probabilità di non avere faults. Più precisamente… 6 IL PROBLEMA DELL’INSTRADAMENTO (5) Segue caso 3. Instradamento con faults Sia p(e) il complemento della probabilità di fault sull’arco e. Sotto l’ipotesi, non sempre realistica, che i faults avvengano in modo indipendente, p(e1)*p(e2)*…*p(ek) dà la probabilità che il cammino P=(e1,e2,…,ek) possa essere usato senza subire faults. Vogliamo massimizzare questa probabilità su tutti i possibili cammini con nodo di partenza a e nodo di arrivo b… 7 IL PROBLEMA DELL’INSTRADAMENTO (6) Segue caso 3. Instradamento con faults N.B. Poiché la funzione log è monotona crescente, il max del prodotto p(e1)*p(e2)*…*p(ek) è raggiunto sse il suo logaritmo è max, cioè sse: log p(e1)+log p(e2)+…+ log p(ek) è massimo. log p(e) ≤ 0 per ogni e poiché p(e) ≤ 1. Ponendo w(e)=-log p(e) si ha w(e)≥0 per tutti gli e; inoltre dobbiamo trovare il cammino da a a b per cui w(e1)+w(e2)+…+w(ek) diventa minimo. Quindi il problema si riduce ancora alla ricerca del 8 cammino di costo minimo. I PROBLEMI DEL CAMMINO PIÙ CORTO E DEL CAMMINO DI COSTO MINIMO 9 CAMMINI PIÙ CORTI Algoritmo suggerito da Moore [‘59] per il problema del cammino minimo da sorgente singola r: … Breadth First Search (BFS) … TH. G è connesso sse alla fine della BFS che parte dal nodo a, dist(a,b) < ∞ per ogni nodo b, dove dist rappresenta la distanza in termini di numero di archi N.B. questa affermazione è falsa se G è un digrafo (non esiste la nozione di connessione semplice per i digrafi: connessione forte o debole) 10 CAMMINI DI COSTO MINIMO (1) Dato G=(V,E) grafo o digrafo ed una funzione w:ER: (G,w) è detta rete w(e) è detta lunghezza (senza così escludere interpretazioni come costo, durata, capacità, peso, probabilità, …) Per ogni cammino P=(e1, e2, …, ek) (se G è diretto, P deve essere un cammino orientato), la lunghezza di P, w(P)=w(e1)+w(e2)+ …+w(ek). N.B. Ponendo w(e)=1 per ogni arco, il problema dei cammini più corti si riduce al problema dei 11 cammini di costo minimo. CAMMINI DI COSTO MINIMO (2) Dati due nodi a e b, la distanza d(a,b) è il minimo, su tutti i cammini P tra a e b, di w(P). Due problemi: PR.1: b potrebbe essere non raggiungibile da a SOL.: definiamo d(a,b)=∞ se b non è raggiungibile da a PR.2: il minimo potrebbe non esistere (cicli negativi) SOL: ci restringiamo a reti senza cicli negativi 1 a 1 1 -3 1 b 12 CAMMINI DI COSTO MINIMO (3) Un’applicazione in cui cicli negativi possono esistere: Una nave viaggia da un porto a ad un porto b ed i porti intermedi possono essere scelti liberamente. w(x,y) rappresenta il profitto del viaggio tra x ed y. In alcuni percorsi la nave potrebbe viaggiare vuota e quindi w(e) sarebbe negativo (perdita). Trasformando w(e) in –w(e) per tutti gli e, il problema di trovare il percorso di profitto massimo per la nave diventa quello di trovare il percorso di costo minimo nella rete. 13 CAMMINI DI COSTO MINIMO (4) In generale, se cerchiamo cammini di peso massimo possiamo trasformare w(e) in –w(e), ma Attenzione: questo potrebbe creare cicli di peso negativo! Esistono buoni algoritmi che trovano il cammino di costo minimo se G non contiene cicli di peso negativo 14 CAMMINI DI COSTO MINIMO (5) OSSERVAZIONI SULLA SOLUZIONE In una soluzione: Non possono esistere cicli di lunghezza negativa (perché li abbiamo evitati per hp.) Non possono esistere cicli di lunghezza positiva (dim. per assurdo: basta toglierli per avere un costo minore) Non è restrittivo assumere che non esistano cicli di lunghezza nulla (se c’è, esiste un cammino con lo stesso peso che non lo contiene) Quindi: la soluzione non contiene cicli e perciò la 15 sua lunghezza (non il suo peso!) massima è n-1. CAMMINI DI COSTO MINIMO (6) OSSERVAZIONI SULLA SOLUZIONE Per determinare univocamente un cammino da un nodo a ad un nodo b è sufficiente, per ogni nodo sul cammino a partire da b, sapere quale nodo sia il suo predecessore sul cammino. Per ogni nodo v del grafo, definiamo un puntatore p(v), inizializzato a NULL, che, alla fine, punta al predecessore di v nel cammino trovato. 16 ALCUNI ALGORITMI CLASSICI 17 (e già studiati!) L’ALGORITMO DI BELLMAN-FORD [‘58] G=(V,E) orientato con pesi degli archi anche negativi Algoritmo per il problema del cammino minimo da sorgente singola Se non esistono cicli negativi restituisce le distanze dalla sorgente Usa il rilassamento Complessità: O(nm) 18 L’ALGORITMO DI DIJKSTRA [‘59] G=(V,E) orientato con pesi degli archi non negativi Algoritmo per il problema del cammino minimo da sorgente singola Usa il rilassamento Complessità: O(n2) oppure O(m log n) Compl. migliore di Bellman-Ford ma richiede che gli archi abbiano pesi non negativi 19 L’ALGORITMO DI FLOYD-WARSHALL [‘62] G=(V,E) orientato con pesi degli archi qualunque Algoritmo per il problema del cammino minimo tra tutte le coppie Usando gli algoritmi precedenti: Bellman-Ford: n O(nm)=O(n2m) Dijkstra: n O(n2) =O(n3) o n O(m log n)=O(mn log n) Complessità: O(n3) ma sono ammessi pesi negativi 20 IL RILASSAMENTO Definiamo per ogni nodo una funzione d(v), che rappresenta la stima del peso del cammino minimo da s a v. Inizialmente d(v)=∞ per ogni v Un passo di rilassamento: dato un arco (u,v) se d(u)+w(u,v)<d(v) d(v)=d(u)+w(u,w) p(v)=u Complessità di un passo di rilassamento: O(1)21 L’ALGORITMO DI BELLMAN-FORD (1) Supponiamo di non avere cicli di lungh. neg.: Per ogni v inizializza d(v) e p(v) O(n) n-1 volte For i=1 to n-1 do mO(1) per ogni arco (u,v) rilassa v risp. ad (u,v) Complessità: O(nm) 22 L’ALGORITMO DI BELLMAN-FORD (2) 5 6 5 2 ∞ 3 -2 ∞ 1 -4 9 7 8 7 0 10 -3 4 7 6 2 ∞ 8 ∞ 1 5 -2 6 0 6 7 8 7 -4 -3 1 ∞ 5 -2 ∞ 0 6 7 -4 8 -3 ∞ ∞ 7 2 i=1 0 6 7 8 7 7 2 1 5 -2 6 -4 -3 ∞ 2 1 6 0 6 7 ∞ ∞ 7 8 5 -2 8 -4 -3 ∞ 1 5 -2 6 0 6 7 8 7 -4 -3 ∞ 7 2 1 0 6 7 -4 8 -3 7 4 8 5 -2 6 ∞ 7 2 x: ordine archi : archi visitati : predecessore 0 6 7 8 7 7 2 1 5 -2 6 -4 -3 ∞ ∞ 4 7 2 1 23 8 L’ALGORITMO DI BELLMAN-FORD (3) 5 6 52 6 3 -2 4 1 -4 9 7 8 7 0 4 10 -3 76 2 7 8 8 1 5 -2 2 0 6 7 8 7 -4 -3 1 8 5 -2 6 0 6 7 4 7 2 i=2 8 -4 -3 7 0 6 7 8 7 7 2 1 5 -2 2 8 5 -2 6 0 6 8 7 7 4 -4 -3 7 2 6 0 7 8 1 2 1 -2 … 0 6 7 8 7 8 -4 -3 7 5 -2 4 7 5 -2 2 2 -4 -3 4 x: ordine archi : archi visitati : predecessore -4 -3 7 2 1 4 7 2 1 4 -2 24 8 L’ALGORITMO DI DIJKSTRA (1) G=(V,E) orientato con pesi degli archi non negativi Divide i nodi tra quelli per cui è già stato determinato il cammino minimo (S) e gli altri (V-S) Algoritmo greedy Ad ogni passo, sceglie il nodo v in V-S con minimo valore di d, lo aggiunge ad S e rilassa tutti gli archi uscenti da v Mantiene V-S in una coda con priorità minima (heap 25 minimo) L’ALGORITMO DI DIJKSTRA (2) per ogni v inizializza d(v) e p(v) S=insieme vuoto Q=V finché Q è non vuota • u=EstraiMin(Q) • S=S U {u} • per ogni arco uscente da u, (u,v) rilassa v rispetto ad (u,v) riaggiusta Q O(n) O(1) O(n) n volte O(log n) O(1) O(deg u log n) 26 tot. O(n log n+ m log n) : archi visitati : predecessore L’ALGORITMO DI DIJKSTRA (3) 5 2 ∞ 0 6 7 8 1 8 ∞ 0 6 7 8 7 7 2 1 9 2 6 1 8 ∞ ∞ 2 1 6 6 0 7 7 8 2 9 2 6 0 7 8 7 1 8 0 6 7 ∞ 1 9 2 6 7 7 6 ∞ 1 8 14 7 9 2 8 7 1 8 15 7 2 1 7 9 2 6 0 6 7 8 7 14 1 8 7 2 7 1 14 7 2 1 7 27 L’ALGORITMO DI DIJKSTRA (4) L’algoritmo di Dijkstra è usato di solito per i protocolli di instradamento dinamico (in cui, cioè, i pacchetti e le destinazioni non sono note a priori) come l’Open Shortest Path First (OSPF). OSPF è usato nelle reti con protocollo Internet (IP) 28 L’ALGORITMO DI FLOYD-WARSHALL(1) G=(V,E) orientato con pesi degli archi qualunque Algoritmo per il problema del cammino minimo tra tutte le coppie Trucco 1: inserisce tutti gli archi. Quelli che non esistono in G hanno w=∞ Trucco 2: sfrutta l’idea che per andare da i a j, oltre che farlo direttamente, posso passare per un nodo intermedio k Algoritmo di programmazione dinamica 29 L’ALGORITMO DI FLOYD-WARSHALL(2) Algoritmo: Per ogni nodo i, inizializza d(i,i)=0 Per ogni arco (i,j) inizializza d(i,j)=w(i,j) Per ogni nodo k Per ogni nodo i Per ogni nodo j d(i,j)=min{d(i,j), d(i,k)+d(k,j)} Complessità O(n) O(m) n volte n volte n volte O(1) O(n3) 30 INSTRADAMENTO SULLE TOPOLOGIE DI INTERCONNESSIONE 31 INSTRADAMENTO SULLE TOPOLGIE DI INTERCONNESSIONE (1) Il problema di instradamento fin qui considerato assume che la rete rappresentata dal grafo sia sconosciuta ai nodi e possa anche variare nel tempo (faults e ripristino di archi, variazione dei costi in base al traffico, ecc.) Tuttavia, quando la rete rappresenta una topologia di interconnessione (e connette, ad es. processori), la rete è nota e non cambia nel tempo. Inoltre, è fondamentale l’efficienza. Si cercano soluzioni con più proprietà del cammino minimo. 32 INSTRADAMENTO SULLE TOPOLGIE DI INTERCONNESSIONE (2) Ci sono differenti modelli di instradamento. Qui consideriamo il modello store-andforward (anche noto come modello packetswitching): ogni pacchetto è mantenuto come una singola entità che viene passata da un nodo all’altro un pacchetto viaggia attraverso un arco della rete in un singolo passo dell’algoritmo a seconda dell’algoritmo, si può permettere o no di accodare pacchetti in un nodo, ma in ogni caso questa coda va mantenuta il più corta possibile 33 INSTRADAMENTO SULLE TOPOLGIE DI INTERCONNESSIONE (3) Non è permessa la presenza di un “controllore globale” ma ogni nodo deve prendere una decisione sulla base del suo controllo locale e delle informazioni fornite nel pacchetto Un problema di instradamento è detto one-toone se al più un pacchetto è destinato a ciascun nodo e se ogni pacchetto ha esattamente una destinazione. In contrapposizione, one-to-many e many-toone 34 LA BUTTERFLY (1) Def. Sia N=2n (e quindi n=log N); una Butterfly n-dimensionale è un grafo livellato con: • N(n+1) nodi (n+1 livelli ognuno con 2n nodi) e • 2Nn archi. Nodi: i nodi sono etichettati con una coppia (w, i), dove: • i è il livello del nodo • w è un numero binario di n bit che indica la riga del nodo. … 35 LA BUTTERFLY (2) segue def. di butterfly n-dimensionale Archi: Due nodi (w, i) e (w’, i’) sono adiacenti se e solo se i’=i+1 e: w=w’ (straight edge) o w e w’ differiscono esattamente nell’i-esimo bit (cross edge). 36 LA BUTTERFLY (3) I nodi della Butterfly sono crossbar switches, cioè switches che hanno due ingressi e due uscite e possono assumere due stati, cross e bar. Possiamo quindi vedere la butterfly come una switching network che connette 2N (N=2n) unità di input a 2N unità di output tramite una rete di logN+1 livelli di N nodi ciascuno. Gli input e gli output sono di solito dei processori e, per semplicità, vengono di solito omessi dai disegni 37 LA BUTTERFLY (4) La butterfly ha una struttura ricorsiva : una butterfly n-dimensionale contiene come sottografi due butterfly (n-1)-dimensionali che si possono ottenere rimovendo i nodi di livello n. 38 LA BUTTERFLY (5) per ogni coppia di righe w e w’, esiste uno ed un solo cammino di lunghezza n (detto greedy path) che collega un nodo di livello 0 sulla riga w e uno di livello n su una riga w’, questo cammino attraversa ogni livello esattamente una volta, usando un cross edge dal livello i al livello i+1 (i=0,…,n) se e solo se w e w’ differiscono nell’ i-esimo bit 000 001 010 w’ 011 100 101 w 110 111 39 INSTRADAMENTO SULLA BUTTERFLY (1) Problema: ogni nodo (u,0) al livello 0 della butterfly contiene un pacchetto destinato al nodo (π(u), n) sul livello n, dove π:[1, N] [1,N] è una permutazione. Instradare un pacchetto è facile se usiamo il greedy path. Un algoritmo di greedy routing funziona correttamente se c’è un solo pacchetto da instradare, ma non garantisce una soluzione corretta in presenza di più pacchetti da instradare in parallelo… 40 INSTRADAMENTO SULLA BUTTERFLY (2) Alcuni pacchetti potrebbero passare per lo stesso arco. E’ necessario far attendere uno dei due pacchetti N.B. la butterfly non è in grado di instradare tutte le permutazioni senza attese, cioè è bloccante qui al più 2 pacchetti possono contendersi un arco, ma in generale… 41 INSTRADAMENTO SULLA BUTTERFLY (3) consideriamo l’arco e=((00…0, (n-1)/2), (00…0,(n+1)/2)) Il nodo (00…0, (n-1)/2) è la radice di un albero binario completo che si estende a sinistra e che ha 2(n-1)/2 foglie Analogamente avviene a destra … 42 INSTRADAMENTO SULLA BUTTERFLY (4) … La permutazione può essere tale che tutti i cammini che partono da qualche foglia dell’albero di sinistra arrivino a qualche foglia dell’albero di destra passando per e Il cammino che aspetta di più attenderà 2(n-1)/2=√N/2 prima di passare. In più impiega almeno n=log N passi, pari alla lunghezza del cammino tra un input ed un output. 43 INSTRADAMENTO SULLA BUTTERFLY (5) Th. Dato un problema di instradamento sulla butterfly n-dimensionale per cui al più un pacchetto parte da ogni nodo a livello 0 ed al più un pacchetto è destinato a ciascun nodo a livello n, l’algoritmo greedy instrada tutti i pacchetti in O(√N) passi. Dim. Assumiamo n dispari per semplicità (ma tutto vale anche per n pari) Sia e un arco sul livello i, 0<i≤n, e sia ni il numero di greedy paths che possono attraversare e ni ≤2i-1 (albero sx) e, similmente, ni≤2n-i (albero dx) Il pacchetto più sfortunato che passa per e viene fermato per ni-1 passi. … 44 INSTRADAMENTO SULLA BUTTERFLY (6) … Poiché tale pacchetto deve passare per tutti i livelli, la sua attesa nel caso peggiore sarà: n (ni 1) i1 (n 1)/ 2 (ni 1) i1 n (ni 1) i(n 3)/ 2 (n 1)/ 2 i1 n (2 i1 1) n i (2 1) i(n 3)/ 2 2(n 1)/ 2 2(n 1)/ 2 n O( N ) n O( N ) CVD 45 INSTRADAMENTO SULLA BUTTERFLY (7) Nonostante l’algoritmo greedy funzioni abbastanza male nel caso peggiore, esso è molto utile nella pratica. La ragione è che il numero di cammini che passano per un certo arco dipende fortemente dalla permutazione che dobbiamo instradare. L’algoritmo greedy funziona molto bene in molti casi Si può dimostrare che nella maggior parte dei casi l’instradamento viene eseguito in n+o(n) passi, cioè ottimo. 46 LA BENEŠ (1) Un’alternativa all’algoritmo di instradamento con le attese è la produzione di una topologia non bloccante. La rete di Beneš ha questa proprietà E’ costituita da due Butterfly fondendo gli output della prima con gli input della seconda 47 LA BENEŠ (2) La Beneš n-dimensionale ha 2n+1 livelli, ciascuno con 2n nodi I primi e gli ultimi n+1 livelli formano due Butterfly n-dimensionali Non è sorprendente che la Beneš sia simile alla Butterfly sia in termini di potenza computazionale che di struttura 48 LA BENEŠ (3) Def. Una topologia con N input ed N output si dice riarrangiabile se per ogni π one-to-one (cioè per ogni permutazione) degli input negli output, è possibile costruire dei cammini arco-disgiunti che congiungono l’i-esimo input con il π(i)-esimo output, per tutti gli 1≤i≤N. Nel caso della Beneš n-dim. possiamo addirittura avere 2 input per ogni nodi a livello 0 e due output per ogni nodo a livello 2n. Quindi, in questo caso, N=2n+1 49 LA BENEŠ (4) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 3 9 8 12 15 13 7 5 4 10 1 2 16 7 11 14 50 LA BENEŠ (5) Th. Data una permutazione π di 2n+1 input in 2n+1 output su una Beneš n-dimensionale, esiste un insieme di cammini arco-disgiunti che collegano l’input con l’output π(i), per ogni 1≤i≤2n+1. Dim. per induzione su n. Se n=1 la rete è un singolo nodo (uno switch 2x2) e la tesi è ovvia. Hp induttiva: Th. vero per una Beneš (n-1)dimensionale … 51 LA BENEŠ (6) segue dim. della riarrangiabilità della Beneš Chiave: i 2n-1 livelli centrali della Beneš ndim. formano due Beneš (n-1)-dim. 52 LA BENEŠ (7) segue dim. della riarrangiabilità della Beneš Per ogni input, è sufficiente decidere se il suo cammino sarà instradato sulla Beneš superiore o inferiore 53 LA BENEŠ (8) segue dim. della riarrangiabilità della Beneš Unico vincolo (dettato dagli switch al primo e ultimo livello): gli input (output) 2i-1 e 2i vadano verso Beneš diverse …facile… 54 LA BENEŠ (9) segue dim. della riarrangiabilità della Beneš 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 3 9 8 12 15 13 7 5 4 10 1 2 16 7 11 14 55 LA BENEŠ (10) segue dim. della riarrangiabilità della Beneš 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 3 9 8 12 15 13 7 5 4 10 1 2 16 7 11 1456 e così via… LA BENEŠ (11) segue dim. della riarrangiabilità della Beneš Questo algoritmo è detto looping algorithm Rimane da dim. che è possibile assegnare i cammini alla Beneš sup. o inf. non introduce conflitti Questo è vero per costruzione, perché se partiamo con un input verso la Beneš sup., arriveremo all’output corrispondente dalla Beneš sup. e lo lasceremo andando verso laBeneš inf. e così via. Quando si chiude il ciclo dovremo necessariamente tornare al punto di partenza dalla Beneš inferiore per una questione di parità. 57 Quindi i vincoli sono sempre rispettati. Il resto del cammino viene risolto dall’induzione. CVD LA BENEŠ (12) Nel caso in cui i nodi a livello 0 abbiano un solo input possiamo dire qualcosa di più: Th. Data una permutazione π di 2n input in 2n output su una Beneš n-dimensionale, esiste un insieme di cammini nodo-disgiunti che collegano l’input con l’output π(i), per ogni 1≤i≤2n. Dim. identica alla precedente salvo che devono usare Beneš differenti non 2i-1 e 2i ma i ed i+2n-1, 1≤i≤2n-1. 2n-1 58 LA BENEŠ (13) Esempio: n=2, quindi 2n-1=2 1 2 2 4 3 1 4 3 59 LA BENEŠ (14) Problema di questi teoremi: non è possibile settare gli switch on-line. Cioè, c’è bisogno di un controllo globale che abbia la conoscenza della permutazione per settare ogni switch. E’ tuttavia possibile dare algoritmi che risolvano questo problema 60