Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi

Slides:



Advertisements
Presentazioni simili
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Advertisements

Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 08/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Simulazione di lettura e scrittura concorrente Tecnica dell’accelerated cascading Lezione.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Complessità e Trasportabilità Lezione n°3.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°9.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi ELEZIONE DEL LEADER Lezione n°8.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi L’ausilio delle occorrenze Circuiti di ordinamento Lezione n°5.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2012/2013 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Cammini minimi in grafi:
Inserzione e Cancellazione
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Analisi di sequenze di operazioni Union-Find
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Complessità ammortizzata degli algoritmi Union Find
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
La gestione degli insiemi disgiunti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
K4 è planare? E K3,3 e K5 sono planari? Sì!
Lezione n°11 Prof.ssa Rossella Petreschi
Algoritmi per il flusso nelle reti
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a. 2010/11
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Cammini minimi in grafi:
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Unione per ranghi compressi
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Tecniche algoritmiche Lezione n°5 Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi 1

Tecniche algoritmiche parallele di base Tecnica della prima metà: ad ogni passo si dimezza il numero di elementi su cui si esegue la computazione. Si lavora nella prima metà del vettore che da dimensione n si riduce progressivamente a dimensione n/2, n/4, … fino a raggiungere la soluzione in O(log2n) passi. (es. somma di n elementi, ricerca del massimo) Tecnica del salto del puntatore: in O(log2n) passi si ottiene la soluzione raddoppiando ad ogni passo la distanza fra le coppie di elementi su cui si opera. (es. somme prefisse) Tecnica dell’accelerated cascading Tecnica del tour di eulero AA 2010-2011 2 2

Ipotesi per applicare la tecnica Accelerated Cascading Si abbia: un problema P di dimensione n; un algoritmo A1 per P che esegue W1(n) operazioni in un tempo T1(n); un algoritmo A2 per P che esegue W2(n) operazioni in un tempo T2(n); A1 si supponga più efficiente di A2 , ovvero W1(n) < W2(n); A1 si supponga meno veloce di A2 , ovvero T1(n) < T2(n); A1 sia un “algoritmo di riduzione”, ovvero A1 operi in fasi successive in modo tale che l’output di ogni fase sia un istanza più piccola del problema originale AA 2010-2011 3 3

La tecnica del Accelerated Cascading Si costruisce un nuovo algoritmo A nel seguente modo: si applica a P l’algoritmo A1(A1lavora per fasi) fintanto che l’output delle fasi non produca una istanza di P di dimensione minore di una soglia prefissata, sia P’; si applica a P’ l’algoritmo A2 E’ da notare che invece di un solo algoritmo di riduzione A1 si potrebbe avere una catena di algoritmi di questo tipo. In tal caso si considera la catena di algoritmi di riduzione ordinata dall’algoritmo più lento al più veloce (ovvero dal più efficiente al meno efficiente) e si costruisce il nuovo algoritmo sostituendo il passo1 con l’applicazione a P della catena così ordinata. AA 2010-2011 4 4

Somma con la tecnica dell’accelerated cascading L’algoritmo di somma parallelo con la tecnica della prima metà non è ottimo perché costa O(n log n) (ovvero n processori per log n tempo),mentre il miglior algoritmo sequenziale richiede tempo O(n). La tecnica dell’accelerated cascading ci permette di ridurre il costo dell’algoritmo parallelo a O(n) e quindi a raggiungere valore dell’efficienza uguale ad 1. La tecnica consiste nel dividere l’algoritmo in due fasi: 1° fase: si applica l’algoritmo sequenziale su k sotto-istanze del problema di piccola dimensione h in modo da ridurre la dimensione totale dello intero problema. Tempo parallelo O(h). 2° fase: si applica l’algoritmo parallelo sui k risultati del passo precedente. Tempo parallelo O(log k) Costo = O(P (h + log k)) AA 2010-2011 5 5

Algoritmo per la somma con la tecnica dell’Accelerated Cascading Si adoperano P processori SommaAC(A, n) begin k = P h = n/k for i = 0 to k-1 pardo Pi: bi = i * h for j = 1 to h -1 do if bi + j < n then A[ bi ] = A[ bi ] + A[ bi + j ] B[ i ] = A[ bi ] Somma(B, k) // algoritmo di somma parallela standard end Tempo parallelo O(h + log k) AA 2010-2011 6 6

Esempio di somma con la tecnica dell’Accelerated Cascading n = 12 P = 4 size = 3 24 32 10 11 7 16 9 45 2 19 31 5 P0 P1 P2 P3 56 18 54 50 66 34 55 122 89 211 1° fase sequenziale 2° fase parallela AA 2010-2011 7 7

Analisi dell’algoritmo SommaAC Per ottenere costo Cp=O(n) e quindi Eff=1, dobbiamo scegliere O(n/log n) processori, assegnando a ciascuno O(log n) elementi da sommare sequenzialmente. La 1° fase pertanto richiede tempo paralello O(log n) per generare O(n/log n) elementi. Con O(n/log n) processori si opera con l’algoritmo di somma parallelo su gli O(n/log n) elementi, impiegando un tempo parallelo pari a: log (n/log n) = log n – log log n = O(log n) Costo totale = O(n/log n (log n + log n)) = O(n) AA 2010-2011 8 8

Somme prefisse con Accellerated Cascading Si adoperano k processori Per semplicità assumiamo n multiplo di k: n = h·k begin for i = 0 to k-1 pardo Pi: bi = i * h // inizio blocco i-esimo for j = 1 to h -1 do A[ bi + j ] = A[ bi + j ] + A[ bi + j-1 ] B[ i ] = A[ bi + h-1 ] // l’ultimo del blocco PrefixSum(B, k) for i = 1 to k-1 pardo Pi: for j = 0 to h -1 do A[ bi + j ] = A[ bi + j ] + B[ i-1 ] end Tempo parallelo O(h + log k) AA 2010-2011 9 9

Tour di Eulero Dato un grafo G, un Tour di Eulero (TDE) su G è un ciclo (cammino chiuso) che passa su ogni arco una e una sola volta. Non tutti i grafi ammettono un tour di Eulero, quelli in cui ogni nodo ha grado pari si. Dato un albero T = (V, E) è possibile costruire un grafo G = (V, E') con E' =  (v,u), (u,v) :  (u,v)  E }. Per ogni nodo di G, il numero di archi entranti è uguale al numero di archi uscenti, quindi G contiene un circuito euleriano. c h g e f b i d a c h g e f b i d a AA 2010-2011 10 10

La funzione TDE Il TDE è una sequenza ciclica di tutti gli archi del grafo costruita a partire da un qualunque nodo. Ad esempio: (c,i)(i,a)(a,d)(d,a)(a,i)(i,g)(g,i)(i,c)(c,f)(f,c)(c,h)(h,e)(e,h)(h,c)(c,b)(b,c) Per semplicità si può scrivere il TDE come: c i a d a i g i c f c h e h c b Si può vedere il TDE come una funzione che, per ogni arco, identifica il successore nel tour: TDE(c,i) = (i,a) TDE(i,a) = (a,d) TDE(a,d) = (d,a) TDE(d,a) = (a,i) TDE(a,i) = (i,g) ecc… c h g e f b i d a AA 2010-2011 11 11

Costruzione della funzione TDE Affinché tutti gli archi siano visitati, è fondamentale che, per ogni nodo v, fra l’apparizione nel tour dell’arco entrante (u,v) e quella dell’arco uscente (v,u) siano presenti tutti gli archi relativi alla visita di tutti gli altri nodi adiacenti a v. Per garantire questa condizione è sufficiente considerare un ordinamento ciclico degli adiacenti di ogni nodo. Se si entra in v con l’arco (u,v) se ne esce seguendo il successore di u in tale ordinamento: TDE(u,v) = (v, nextv(u)) dove nextv(u) identifica il nodo che segue u tra gli adiacenti di v. AA 2010-2011 12 12

Come costruire il TDE Vogliamo ora calcolare su una PRAM-EREW il TDE: a partire da un albero (rappresentato come elenco di archi), si vuole una struttura che permetta di identificare efficientemente il successore di ogni arco nel tour. Utilizziamo delle liste di adiacenza cicliche con un informazione addizionale: per ogni arco (u,v) manteniamo un puntatore all’arco (v,u). In questo modo, dato l’arco (u,v) (nella lista di adiacenza di u), si potrà facilmente accedere all’arco (v,u) e quindi al suo successore nella lista di adiacenza di v. AA 2010-2011 13 13

Struttura dati per il TDE c b a h i e f g (e,h) (h,c) (c,f) (c,b) (c,i) (i,g) (a,i) (a,d) AA 2010-2011 14 14

Passo 1 Il processore i-esimo costruisce il reciproco dell’arco i-esimo e imposta opportunamente i puntatori. (e,h) (h,e) (h,c) (c,h) (c,f) (f,c) (c,b) (b,c) (c,i) (i,c) (i,g) (g,i) (a,i) (i,a) (a,d) (d,a) (e,h) (h,c) (c,f) (c,b) (c,i) (i,g) (a,i) (a,d) AA 2010-2011 15 15

Passo 2 Si ordina lessicograficamente il vettore degli archi. Nota: se nell’eseguire l’ordinamento si spostassero realmente i dati in memoria tutti i puntatori agli archi reciproci verrebbero perduti. Per ovviare a questo problema la soluzione più semplice è quella di calcolare la sequenza ordinata degli indici che si userà poi per accedere al vettore come se fosse ordinato. (a,d) (a,i) (b,c) (c,b) (c,f) (c,h) (c,i) (d,a) (e,h) (f,c) (g,i) (h,c) (h,e) (i,a) (i,c) (i,g) AA 2010-2011 16 16

Passo 3 Si creano le liste di adiacenza circolari per ogni nodo nella seguente maniera: si divida la lista in blocchi dallo stesso primo nodo dell’arco; per ogni arco si imposti il puntatore al successivo nel blocco; l’ultimo arco di ogni blocco punti al primo. Tempo parallelo per la costruzione della struttura dati: Passo 1: costante Passo 2: tempo per l’ordinamento Passo 3: costante (a,d) (a,i) (b,c) (c,b) (c,f) (c,h) (c,i) (d,a) (e,h) (f,c) (g,i) (h,c) (h,e) (i,a) (i,c) (i,g) AA 2010-2011 17 17

Radicare l’albero Input: Tour di Eulero (TDE) di un albero non radicato T, dato per liste di adiacenza. Output: Cammino di Eulero (CDE) di T radicato in r e T rappresentato tramite vettore di padri. Algoritmo: Sia v un qualunque adiacente di r, si spezza il TDE ponendo TDE (v,r) = 0. Ora, per distinguere, in ogni arco, un nodo padre e un nodo figlio, si assegna valore 1 ad ogni arco del cammino di Eulero ottenuto e si calcolano le somme prefisse S su tali valori. Si avrà p(w) = v sse S(v,w) < S(w,v) Nota: se analizziamo l'orientamento dato, vediamo che esso segue una visita di tipo DFS, ma ciò non vuol dire che abbiamo realizzato una DFS in parallelo che è anzi uno di quei problemi che restano inerentemente sequenziali. AA 2010-2011 18 18

Calcolo di funzioni elementari Per calcolare le funzioni elementari su alberi radicati (dati in input con il loro CDE) adoperiamo il seguente schema. Considerando, per ogni vertice v, l’arco discendente (p(v),v) e l’arco ascendente (v,p(v)): si assegni, a seconda del problema in considerazione, un valore agli archi ascendenti e un valore agli archi discendenti; si eseguano le somme prefisse sulla sequenza di valori che si ottiene seguendo il Cammino di Eulero; a seconda del problema, si dia una funzione di lettura della soluzione. AA 2010-2011 19 19

Visita in postorder CDE h e c b i a d g f 1 S 2 3 4 5 6 7 8 v a b c d Fatto: nella numerazione in postorder (FS,…,FD,R), ogni nodo v viene numerato quando la sua visita è completata, ovvero quando, con la tecnica del backtrack, si torna al padre p(v). Dato il CDE di un albero T radicato in r, per ottenere la numerazione dei nodi in postorder sfruttando il Fatto, assegniamo valore +1 ad ogni arco (v,p(v)) che risale dal figlio al padre e valore 0 ad ogni arco (p(v),v) che scende dal padre al figlio. Sulla sequenza così ottenuta eseguiamo poi le somme prefisse ottenendo S. La numerazione in postorder è data da:  v  r Post(v) = S(v,p(v)) v = r Post(v) = n Riprendendo l’albero precedentemente visto, consideriamolo radicato in h (per chiarezza riportiamo solo il primo nodo di ogni arco nel CDE). CDE h e c b i a d g f 1 S 2 3 4 5 6 7 8 v a b c d e f g h i Post 4 2 8 3 1 7 5 9 6 AA 2010-2011 20 20

Visita in preorder CDE h e c b i a d g f 1 S 2 3 4 5 6 7 8 v a b c d e Fatto: nella numerazione in preorder (R,FS….FD), ogni nodo v viene numerato la prima volta che viene incontrato durante la visita, ovvero quando si arriva a v dal padre p(v). Dato il CDE di un albero T radicato in r, per ottenere la numerazione dei nodi in preorder sfruttando il Fatto, assegniamo valore 0 ad ogni arco (v,p(v)) che risale dal figlio al padre e valore +1 ad ogni arco (p(v), v) che scende dal padre al figlio. Sulla sequenza così ottenuta eseguiamo poi le somme prefisse. La numerazione in preorder è data da: v = r Pre(v) = 1  v  r Pre(v) = S(p(v),v) +1 Riprendendo l’esempio abbiamo: CDE h e c b i a d g f 1 S 2 3 4 5 6 7 8 v a b c d e f g h i Pre 6 4 3 7 2 9 8 1 5 AA 2010-2011 21 21