Upload
alessandro-cataldi
View
219
Download
0
Embed Size (px)
Citation preview
7/25/2019 Relazione Algoritmo Di Edmonds
1/8
Descrizione del problema
Traccia assegnata:
Stai visitando una nazione estremamente tecnologica e vuoi visitare n delle sue pi importanti citt,
numerate da 0a n-1. Inizialmente ti trovi nella citt K.
Hai affittato una macchina che dotata delle pi sofisticate dotazioni tecnologiche, tra cui anche un
dispositivo di teletrasporto.
!uesto dispositivo pu" teletrasportarti all#istante insieme alla tua macchina in un#altra citt di tua
scelta.
$# un unico problema: il dispositivo di teletrasporto funziona soltanto se in precedenza hai gi
visitato nel tuo tour la citt in cui ti vuoi teletrasportare.
Hai a disposizione una mappa della nazione con le ncitt che vuoi visitare, contenente le strade
%unidirezionali& tra 'ueste citt, e i tempi di percorrenza di 'ueste strade.
Il tuo obiettivo 'uello di trovare il minimo tempo possibile per visitare tutte le ncitt.
Spiegazione traccia assegnata:
Il problema presentato sotto forma di un grafo orientato G(V,E):
(n grafo orientato %o diretto& G(V,E)consiste in un insieme V di nodi ed un insieme Edi coppie di
nodi (u,v)detti archi: ogni arco connette il nodo ual nodo vma non viceversa.
Il problema si pu" risolvere trovando il minimo albero ricoprente di G(V,E) .
)lbero:
(n albero un grafo T(W,F) nel 'uale due nodi siano connessi tramite uno ed un solo cammino.
T(W,F) un albero di G(V,E) se W un sottoinsieme di Ved F un sottoinsieme di E.
)lbero *icoprente:
Dato un grafo G(V,E)connesso, un albero ricoprente di G un sottografo Tdi Gtale che:
1. T un albero+. Tcontiene tutti i vertici di G
inimo )lbero *icoprente:
Dato un grafo G(V,E)connesso e pesato sugli archi, un minimo albero ricoprente di G un albero
ricoprente di Gdi costo minimo.
7/25/2019 Relazione Algoritmo Di Edmonds
2/8
-li algoritmi visti a lezione per risolvere il problema del inimo )lbero *icoprente %ST& sono:
)lgoritmo di rim
)lgoritmo di /rus0al
)lgoritmo di 1oruv0a
a nessuno di 'uesti algoritmi pu" essere usato per risolvere il nostro problema, dato che si
occupano trovare il l# ST per grafi non orientati, mentre il il grafo presentato nell traccia un
grafo orientato.
er trovare l#ST di un grafo orientato useremo l#algoritmo di 2dmonds %chiamato anche
algoritmo di $hu34iu32dmonds&.
!uesto algorimto stato sviluppato in modo indipendente prima da 5oeng3chin $hu e Tseng3hong
4iu %nel 6789& e poi da ac0 2dmonds %nel 678;&, il 'uale ne ha anche fornito una dimostrazione
della sua correttezza.
Descrizione dell#)lgoritmo
4#algoritmo lavora su grafi diretti connessi, aventi archi con peso maggiore od uguale a zero
Iniziamo eliminando tutti gli archi entranti la radice.
er ogni vertice v %tranne la radice& sia Sv l#insieme degli archi entranti in v. Sia v< l#arco di costo
minimo entrante in v.Si riduca il peso di tutti gli archi in Sv del peso di v %l#arco v si verificano due
possibilit:
6. -li archi di costo > formano un albero di costo > .
=ppure
+. 2siste almeno un ciclo di costo >.
?el primo caso l#algoritmo finito e restituisce il inimo )lbero *icoprente.
?el secondo caso contraiamo i nodi del ciclo in una una struttura che chiameremo Supernodo. Il
Supernodo ha come archi entranti tutti gli archi non facenti parte del ciclo ed entranti nei nodi del
ciclo, e come archi uscenti tutti gli archi non facenti parte del ciclo ed uscenti dai nodi del ciclo.
Dopo ci" il procedimento viene ripetuto finch non esistono pi cicli a costo >.
) 'uesto punto avremo un albero ricoprente composto dai nodi che non facevano parte di nessun
ciclo a costo > e dai supernodi.
7/25/2019 Relazione Algoritmo Di Edmonds
3/8
Si espandono i supernodi e, per ognuno, si elimina l#arco del ciclo incidente su un nodo con un arco
incidente esterno al ciclo. 4#albero risultante sar un inimo )lbero *icoprente.
2sempio:
rendiamo ad esempio un grafo -, con radice r
2cco come risulta - dopo aver effettuato la riduzione dei pesi degli archi entranti ad ogni nodo
In rosso sono segnati tutti gli archi di costo > che andranno a formare , in 'uesto caso, un ciclo.
7/25/2019 Relazione Algoritmo Di Edmonds
4/8
2cco come risulta il grafo - dopo la compressione dei nodi a, b, c, d nel supernodo
@iene di nuovo effettuata la riduzione del peso degli archi entranti ad ogni nodo
In rosso sono segnati tutti gli archi di costo zero. ) 'uesto punto abbiamo un albero di costo >.
7/25/2019 Relazione Algoritmo Di Edmonds
5/8
@iene espanso il supernodo %abcd& e viene eliminato l#arco del ciclo che incide sul nodo con due
archi entranti
)bbiamo ottenuto l#ST
7/25/2019 Relazione Algoritmo Di Edmonds
6/8
7/25/2019 Relazione Algoritmo Di Edmonds
7/8
da zero.
$ontrolla che ogni nodo abbia al pi un arco entrante. Se non cos cancella tutti gli archi
entranti nel nodo in 'uestione tranne uno.
Successivamente crea un nuovo grafo in cui verr costruito l#ST.
In 'uesto grafo vengono prima inseriti tutti i nodi del grafo originario,
oi vengono utilizzati i supernodi per aggiungere gli archi che compongono i cicli a costo
zero
Successivamente per ogni ciclo si sceglie l#arco entrante nel ciclo la 'uale differenza di peso
con l#arco entrante nello stesso nodo %il 'uale ha sicuramente peso minore& sia minima.
@iene aggiunto 'uesto arco al grafo e cancellante l#altro arco entrante nello stesso nodo.
@iene completato il grafo aggiungendo gli archi entranti in tutti i nodi che non facevano
parte dei cicli
% in tutti 'uesti passaggi si usa come peso il peso originario dell#arco, preso dal grafo iniziale&
) 'uesto punto viene effettuata la somma dei pesi degli archi e stampata.
Strutture Dati articolari
4#algoritmo fa uso di una particolare struttura dati, la struttura grafo, e le strutture a lei subordinate:
i nodi, gli archi ed i supernodi.
Struttura Grafo:
4a struttura grafo una classe contenente gli oggetti ?ode , )rch e Supernode
4#oggetto ?ode possiede tre variabili: il nome%name&, la lista degli archi entranti %archsIn& e la lista
degli archi uscenti %archs=ut&.
4#oggetto )rch possiede tre variabili: il nome del nodo testa dell#arco %node?ameTo&, il nome del
nodo coda dell#arco %node?ameArom& ed il peso dell#arco %Eeight&.
4#oggetto Supernode possiede una sola variabile: la lista dei nodi componenti il supernodo.
$omplessivamente il grafo rappresentato tramite liste di adiacenza: ogni nodo contiene una lista di
tutti i nodi a cui adiacente. $ome unica differenza da una lista di adiacenza standard ogni nodo
contiene anche una lista dei nodi a cui adiacente.
7/25/2019 Relazione Algoritmo Di Edmonds
8/8
Tempo di esecuzione ed occupazione di memoria
Tempo
$onnessione =%@&
*ipesamento =%2@&
$iclo =%@F2&
$reazione Supernodo =%@F2&
*icostruzione =%2@&
Il tempo di esecuzione limitato inferiormente dai moduli ripesamento e ricostruzioneCgrafo, i
'ulai hanno tempo di esecuzione =%2@&.
!uindi il tempo totale di esecuzione dell#algoritmo per un grafo -%@,2& =%2@&
Spazio
$onnessione =%@&
*ipesamento grafo copia %6& F =%@&
$iclo grafo copia%+& F =%@&
$reazione Supernodo =%@&
*icostruzione grafo temporaneo %minore dell# originale&
4o spazio occupato in funzione del grafo originario e delle sue copie. Siccome ogni nodo contiene
una lista degli archi uscenti ed entranti ogni arco rappresentato due volte, 'uindi la lunghezza
complessiva delle liste +2.
In totale lo spazio utilizzato =%@F2&.