. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione di messaggi segreti... E. Amaldi Fondamenti di R.O. Politecnico di Milano
.. Problema e algoritmo di Prim Esempio Progettazione di una rete di comunicazione che colleghi n città (uffici) a costo minimo n = Modello: Grafo G = (N, E) con n = N, m = E e una funzione di costo c : E c e R, con e = [v,w] E E. Amaldi Fondamenti di R.O. Politecnico di Milano
Proprietà: ) Ogni coppia di città deve poter comunicare sottografo connesso che contiene tutti i nodi ) Costo minimo sottografo senza cicli Problema Dato un grafo G = (N, E) e una funzione di costo, determinare un albero di supporto di costo minimo: min T X e T c e dove X è l insieme di tutti gli alberi di supporto E. Amaldi Fondamenti di R.O. Politecnico di Milano
Teorema A. Cayley ( 889 ) Il numero di alberi di supporto in un grafo completo con n nodi è pari a n n-, per n. Esempio per n = : Richiamo: un albero con n nodi ha n lati E. Amaldi Fondamenti di R.O. Politecnico di Milano
E. Amaldi Fondamenti di R.O. Politecnico di Milano 9 Alcune soluzioni ammissibili: * S = {} T=Ø G Esempio algoritmo di Prim S = {, } * T={[,]} S T
S = {, } S = {,, } T * * T S = {,,, } T * S = N T costo: 9 E. Amaldi Fondamenti di R.O. Politecnico di Milano
Algoritmo di Prim input output G = (N, E) connesso con una funzione di costo Insieme di lati T E tale che G T = (N, T) è un albero di supporto di G BEGIN T:= ; S:={}; WHILE T < n- DO /* un albero con n nodi ha n- lati */ individuare [v,h] δ(s) di costo minimo, con v S e h N \ S; T := T {[v,h]}; S := S {h}; END-WHILE END E. Amaldi Fondamenti di R.O. Politecnico di Milano 7
L algoritmo di Prim è di tipo greedy (ingordo) : ad ogni passo si compie la scelta localmente migliore senza rimettere in discussione le scelte precedenti. N.B.: pochi problemi di ottimizzazione ammettono algoritmi greedy esatti, cioè che forniscono sempre una soluzione ottima E. Amaldi Fondamenti di R.O. Politecnico di Milano 8
.. Implementazione di Prim in O(n ) Struttura dati: k = numero di lati finora selezionati Sottoinsieme T E dei lati selezionati Sottoinsieme S V dei nodi incidenti ai lati selezionati. E. Amaldi Fondamenti di R.O. Politecnico di Milano 9
C[j] = min {c ij : i S } j S ; se [i,j] E, c ij =+ S j S C[j]= pred[j]= pred[ j ] = i% tale che c% = min{ c : }, ij ij i S j S predecessore di j nell albero minimo, j S E. Amaldi Fondamenti di R.O. Politecnico di Milano 0
taglio δ(s) = {[,], [,], [,], [,], [,]} S = {, } T = {[,]} pred[]:= C[]:=c = ( poiché [,] non esiste ) pred[]:= C[]:=c = ( poiché c < c ) pred[]:= C[]:=c = ( poiché c = c ) pred[]:= Poiché C[]=c C[]=c, C[]=c allora h:=; pred[h]:=; S:=S {}; T:=T {[,]} ecc E. Amaldi Fondamenti di R.O. Politecnico di Milano
Algoritmo di Prim in O(n ) BEGIN T := ; S := {}; /* inizializzazione */ FOR j:= TO n DO /* nodi j S */ C[j] := c j ; pred[j] := ; se [,j] E, c j = + END-FOR FOR k:= TO n DO /* selezionare n lati albero */ min := + ; FOR j:= TO n DO /* scegliere lato min in δ(s) */ IF j S AND (C[j] < min) THEN min := C[j]; h := j; END-IF END-FOR S := S {h}; T := T {[pred[h],h]}; /* estendere S e T */ FOR j:= TO n DO /* aggiornare C[j] e pred[j] j S */ IF j S AND (c hj < C[j]) THEN C[j] := c hj ; pred[j] := h; END-IF END-FOR END-FOR END E. Amaldi Fondamenti di R.O. Politecnico di Milano
Esempio S = {} * T ={[,]} C = (+,,,, ) T = C = (+,,,, ) pred = (,,,, ) pred = (,,,, ) * S = {, } S = {,, } ecc... * T = {[,], [,]} C = (+,,,, ) pred = (,,,, ) E. Amaldi Fondamenti di R.O. Politecnico di Milano
Un albero di supporto di costo minimo è definito dai n- lati [ pred[j], j ] con j =,..., n Esempio: Poiché pred =(,,,,) un albero di supporto ottimo è costituito dai lati: [,], [,], [,] e [,] costo: 9 T E. Amaldi Fondamenti di R.O. Politecnico di Milano
Complessità BEGIN <inizio> FOR j:= TO n DO (...) END-FOR inizializzazione richiede O(n) FOR k:= TO n DO FOR j:= TO n DO (...) END-FOR FOR j:= TO n DO (...) END-FOR END-FOR END i due cicli FOR interni richiedono O(n) ciascuno essi vengono eseguiti n - volte in un ciclo esterno Complessità totale: O(n ) E. Amaldi Fondamenti di R.O. Politecnico di Milano
Per grafi sparsi, ove m << n(n-)/, si può usare una struttura dati più sofisticata che consente di ridurre la complessità a O(m log n). E. Amaldi Fondamenti di R.O. Politecnico di Milano
.. Esattezza dell algoritmo di Prim L algoritmo di Prim è esatto, cioè fornisce sempre un albero di supporto di costo minimo. N.B. L esattezza non dipende dalla scelta del primo nodo e del lato di costo minimo selezionato in caso ve ne siano più di uno in δ(s). Mostreremo che ogni lato selezionato è contenuto in un albero ottimo. E. Amaldi Fondamenti di R.O. Politecnico di Milano 7
Lati di diminuzione Sia T un albero di supporto, un lato e T è detto di diminuzione se aggiungendolo a T si crea un ciclo C T {e} ed esiste un lato f C \ {e} con c e < c f f C e c e < c f T c (T {e} \ {f} ) < c(t) = c e ' e ' T E. Amaldi Fondamenti di R.O. Politecnico di Milano 8
Proprietà degli alberi ottimi Se un albero T * è ottimo, non esistono lati di diminuzione c e c f per ogni f C \ {e} f 7 7 7 e T* Altrimenti si potrebbe diminuire il costo di T * scambiando il lato e di diminuzione con qualsiasi f di C con c e < c f! E. Amaldi Fondamenti di R.O. Politecnico di Milano 9
Proposizione Sia S N e un lato e = [v,h] δ (S) di costo minimo, allora esiste un albero ottimo che contiene e. Dim. Per assurdo: Sia T * E un albero ottimo con e T * S v f e h T * Aggiungendo e ciclo C Sia f δ(s) C Se c e =c f allora T* {e} \ {f} ottimo perché stesso costo di T* Se c e < c f, e è un lato di diminuzione quindi T* non è ottimo! E. Amaldi Fondamenti di R.O. Politecnico di Milano 0
.. Algoritmo di Kruskal input G = (N, E) e una funzione di costo output Insieme di lati T * E t.c. G T* = (N, T * ) è un albero di supporto di G Idea: ordinare i lati secondo i costi non decrescenti e aggiungere i lati a condizione che non creino cicli. E. Amaldi Fondamenti di R.O. Politecnico di Milano
E. Amaldi Fondamenti di R.O. Politecnico di Milano Esempio costo: 9 [,], [,], [,], [,], [,], [,],...
Algoritmo di Kruskal BEGIN ordinare i lati di G secondo costi non decrescenti; T* := ; WHILE T* < (n-) DO scegliere un lato e E di costo minimo; E := E \ {e}; IF T* {e} non ha cicli THEN T* := T* {e}; END-WHILE END E. Amaldi Fondamenti di R.O. Politecnico di Milano
Complessità ordinamento m lati: O(m log m) log m < log n = log n O(m log n) verifica se un lato crea un ciclo: in tempo costante perché basta controllare che i due estremi appartengano a due componenti connesse (c.c.) diverse ogni aggiornamento delle etichette delle c.c.: O(n) complessità totale: O(m log n + n ) O(n ) N.B. la complessità può essere ridotta utilizzando una struttura dati più sofisticata E. Amaldi Fondamenti di R.O. Politecnico di Milano
Condizione di ottimalità Un albero T è ottimo se e solo se non esistono lati di diminuzione. Dim. ( ) Se esiste un lato di diminuzione, allora T non è ottimo ( proprietà degli alberi ottimi ) ( ) Se non esiste un lato di diminuzione, allora T è ottimo con operazioni di scambio si può trasformare T * ottimo fornito dall algoritmo di Prim in T senza modificare il costo, T èquindi ottimo E. Amaldi Fondamenti di R.O. Politecnico di Milano
( ) Se per un albero T non esistono lati di diminuzione allora T è ottimo Mostriamo che con semplici operazioni di scambio si può trasformare l albero ottimo T* fornito dall algoritmo di Prim in T senza modificare il costo. Supponiamo che l lati di T* non appartengano a T e mostriamo come con una operazione di scambio si può trasformare T* in un albero con lo stesso costo di T* ma con l - lati che non appartengono a T. Applicando l tali operazioni si ottiene un albero identico a T con c(t )=c(t*), T è quindi ottimo. E. Amaldi Fondamenti di R.O. Politecnico di Milano
Sia a, b, c, d i lati di T * (selezionati dall algo. di Prim) che appartengono anche a T ed e il primo t.c. e T * \T T * a c e b C ϕ d e T Sia C T {e} il ciclo creato aggiungendo e a T Esiste un lato e T \T *, e C ed e adiacente a uno dei lati in comune La scelta nell algoritmo di Prim: c e c e c e = c e L assenza di lati di diminuzione: c e c e Ripetendo T* T* {e } \{e} si verifica dopo l scambi che c(t) = c(t*). E. Amaldi Fondamenti di R.O. Politecnico di Milano 7
L algoritmo di Kruskal è esatto Ogni lato e T * (albero di supporto ottenuto) è stato scartato perché creava un ciclo Inoltre c e costo di tutti i lati di quel ciclo, poiché i lati sono esaminati secondo costi non decrescenti l albero di supporto ottenuto soddisfa la condizione di ottimalità e quindi è di costo minimo cioè non esistono lati di diminuzione E. Amaldi Fondamenti di R.O. Politecnico di Milano 8
Verifica ottimalità La condizione di ottimalità permette di verificare se un dato albero di supporto G T è effettivamente ottimo: G=(N,E) G T =(N,T) e c(t)=9 basta verificare che ogni lato e E \ T non è un lato di diminuzione. E. Amaldi Fondamenti di R.O. Politecnico di Milano 9
.. Applicazione indiretta Diffusione ottimale di un messaggio: Data una rete di comunicazione G = (N, E) ove i lati [i, j] E indicano quali coppie di nodi possono comunicare direttamente. Si conosce la probabilità p ij, 0 p ij, di intercettazione di un messaggio lungo ogni lato [i, j] E Problema Come trasmettere a tutti i nodi un messaggio segreto minimizzando la probabilità che sia intercettato? E. Amaldi Fondamenti di R.O. Politecnico di Milano 0
Minimizzare probabilità di intercettazione (lungo un lato) Massimizzare probabilità di non intercettazione max ( p ) [, i j] T ij T èun albero di supporto diffusione verso tutti i nodi connesso aciclico per evitare ridondanza e una probabilità di intercettazione più elevata E. Amaldi Fondamenti di R.O. Politecnico di Milano
Applicando una funzione monotona crescente, ad esempio log(.), non cambiano le soluzioni ottime ( solo il valore ) max log( ( p )) max log( p ) ij [, i j] T [, i j] T ij Si adattano in modo ovvio gli algoritmi di Prim e Kruskal E. Amaldi Fondamenti di R.O. Politecnico di Milano