Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

Algoritmi e Strutture Dati
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Capitolo 9 Union-find Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Union-Find Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 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
Lezione n°10 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Inserzione e Cancellazione
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Alberi di ricerca di altezza logaritmica
Analisi di sequenze di operazioni Union-Find
Lezione n°9 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Correzione 1° Esonero Lezione n°13
Rappresentazione di alberi binari
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Complessità ammortizzata degli algoritmi Union Find
La gestione degli insiemi disgiunti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 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
Lezione n°4 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Paths, tree and flowers Lezione n°14
K4 è planare? E K3,3 e K5 sono planari? Sì!
Lezione n°11 Prof.ssa Rossella Petreschi
UNION FIND Lezione n°8 Prof.ssa Rossella Petreschi
ABBINAMENTO Lezione n°13
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Algoritmi e Strutture Dati
Algoritmi per il flusso nelle reti
Algoritmi e Strutture Dati
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Analisi ammortizzata Lezione n°3
Gestione dinamica di tabelle
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
Estensione di strutture dati e
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Alberi di ricerca Lezione n°4
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
concetti ed applicazioni
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Insiemi disgiunti.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Tabelle dinamiche Lezione n°3
Analisi ammortizzata Lezione n°2
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi La gestione degli insiemi disgiunti Lezione n°18 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi ASD a.a.2010/2011- Lezione 18

Union and find La gestione dinamica ed efficiente di insiemi disgiunti (problematica dello Union -Find) opera considerando una qualunque sequenza delle seguenti tre operazioni: makesetx: creare un nuovo insieme x, di nome x, contenente un nuovo elemento x; findx: dato un elemento x, restituire il nome dell’insieme che lo contiene; unionA,B: dati due insiemi di nome A e B, costruire l’insieme unione di nome A. Notare che l’output dell’operazione union distrugge i due insiemi A e B di input. ASD a.a.2010/2011- Lezione 18

Alberi Quickfind Un albero Quickfind è un albero di altezza 1che rappresenta un insieme i cui elementi sono le foglie dell’albero. La radice contiene il nome dell’insieme. Quindi, i costi delle tre operazioni base saranno: makesetx: O(1) perché richiede la creazione di un semplice albero con due nodi; findx: O(1) perché è sufficiente restituire il nome del nodo radice, nodo identificato dal puntatore dal nodo foglia x al nodo padre,radice; unionA,B: O(n) perché aggancia tutte le foglie di B ad A,quindi union dipende dalla cardinalità di B che può essere dell’ordine di n, numero totale di elementi in AB L’occupazione totale di memoria della struttura dati è O(n) in qualunque istante della sequenza delle operazioni. ASD a.a.2010/2011- Lezione 18 3

Alberi Quickunion Un albero Quickunion è un albero di altezza qualunque che rappresenta un insieme i cui elementi sono i nodi dell’albero, radice compresa. Quindi, i costi delle tre operazioni base saranno: makesetx: O(1) perché richiede la creazione di un semplice albero composto da un solo nodo contenente x, che rappresenta sia il nome del nodo che quello dell’albero; uniona,b: O(1) perché rende la radice dell’albero B (contenente il nodo b) figlia della radice dell’albero A (contenente il nodo a); findx: O(n) perché restituisce la radice dell’albero contenente x. L’occupazione totale di memoria della struttura dati è O(n) in qualunque istante della sequenza delle operazioni. ASD a.a.2010/2011- Lezione 18 4

Alberi Quickfind bilanciati unionA,B: aggancia le foglie dell’albero di cardinalità minore alla radice dell’albero di cardinalità maggiore. Nella radice sono memorizzati nome e cardinalità dell’albero. Siano Tp e Td i due alberi quickfind bilanciati a cui appartiene una foglia f prima e dopo una operazione di union. La cardinalità dell’albero Td è almeno il doppio della cardinalità dell’albero Tp. (size (A)+size(B) ≥ 2size(B)) O(m+nlogn) è il tempo totale necessario per eseguire su un albero quickfind bilanciato una sequenza di: m operazioni find, n operazioni makeset, al più (n-1)operazioni union. ASD a.a.2010/2011- Lezione 18 5

perché O(m+nlogn)? Un nuovo albero, x, creato in tempo O(1), ha cardinalità 1. Ogni volta che la foglia x cambia padre, la dimensione dell’albero a cui appartiene per lo meno raddoppia:2,4,8……, quindi dopo k cambi di “paternità”, x si troverà in un albero di cardinalità almeno 2k. Poiché dopo k cambi di “paternità”, al termine della sequenza di operazioni, x potrà trovarsi in un albero di cardinalità al più n (n numero di makeset), ne segue che 2k ≤ n, ovvero che una foglia può al più subire log2n cambiamenti. Riassumendo: le operazioni di find e di makeset hanno costo costante, m dell’una e n dell’altra richiedono pertanto tempo 0(m+n). Le (n-1)operazioni union richiedono che al più tutte le n foglie subiscano il massimo dei cambiamenti possibili, ovvero O(nlog2n), da cui una sequenza di m operazioni find, n operazioni makeset e (n-1) operazioni union richiederà un tempo dell’ordine O(m + nlog2n) = O(m+n) + O(nlog2n). ASD a.a.2010/2011- Lezione 18 6

Alberi Quickunion bilanciati unionA,B: rende la radice dell’albero più basso figlia della radice dell’albero più alto. La radice dell’albero risultante conterrà sia il nome del nuovo albero (p.e. A) che la sua altezza (rank(A)). Durante una sequenza di operazioni makeset, union e find, l’altezza di un albero QuickUnion bilanciato è limitata superiormente da log2n dove n è il numero totale di makeset. Prova: Siano T un albero QuickUnion bilanciato di radice x e dimensione size(x) ≤ n. Poiché size(x) ≥ 2rank(x) si ha che rank(x) ≤ log2n. ASD a.a.2010/2011- Lezione 18 7

size(x) ≥ 2rank(x) Si dimostra per induzione analizzando le differenti operazioni effettuate. Makeset(x).: costruisce un albero di altezza 0 con rank(x) = 0 e non modifica nessun albero preesistente, quindi : 2rank(x) = 20 =1. Find(x).: non modifica nulla del preesistente. Union(A,B).: Rank(B) < Rank(A), ovvero Rank(A∪B)= Rank(A) da cui ⎜A∪B⎜ = ⎜A⎜ + ⎜B⎜ ≥ 2 Rank(A) + 2 Rank(B) > 2 Rank(A) = 2 Rank(A∪B) Rank(A) < Rank(B) , ovvero Rank(A∪B)= Rank(B) da cui ⎜A∪B⎜ = ⎜A⎜ + ⎜B⎜ ≥ 2 Rank(A) + 2 Rank(B) > 2 Rank(B) = 2 Rank(A∪B) Rank(A) = Rank(B) , ovvero Rank(A∪B)= Rank(A) + 1 da cui ⎜A∪B⎜ = ⎜A⎜ + ⎜B⎜ ≥ 2 Rank(A) + 2 Rank(B) ≥ 2.2 Rank(A) = 2 Rank(A)+1 = 2 Rank(A∪B) ASD a.a.2010/2011- Lezione 18 8

Tempo O(n + mlogn) O(n+mogn) è il tempo totale necessario per eseguire su un albero quickunion bilanciato una sequenza di: m operazioni find, n operazioni makeset, al più (n-1)operazioni union. Deriva dal fatto che rank(x)≤logn ASD a.a.2010/2011- Lezione 18 9

Sei differenti algoritmi 3 differenti euristiche di compressione Path compression: rende tutti i nodi figli della radice Path splitting: aggancia ogni nodo al proprio nonno Path halving: aggancia solo i nodi di indice pari al proprio nonno combinate con 2 differenti metodi di unione Union by rank Union by size forniscono 6 differenti algoritmi: 1a, 1b, 2a, 2b, 3a, 3b ASD a.a.2010/2011- Lezione 18 10

Analisi dell’algoritmo 1a Con l’algoritmo 1a, una qualunque sequenza di n operazioni makeset, m operazioni find e al più (n-1) operazioni union può essere realizzata in tempo O(m+nlogn) L’asserto verrà provato in modo ammortizzato assegnando un numero di crediti di (1+logn), 1 e 2 ad ogni operazione di makeset,union e find, rispettivamente, da cui: n(1+logn)+ (n-1) + 2m = O (m + nlogn). Si deve mostrare che il numero di crediti assegnato è sufficiente per pagare il lavoro richiesto dalle singole operazioni: sia il cammino, che supponiamo di l nodi, visitato dalla find; i costi per la visita della radice e del figlio della radice vengono pagati con i 2 crediti assegnati alla find, mentre i costi relativi ad ogni altro nodo x di p vengono pagati con i crediti che makeset immagazzina in x. Resta da vedere che logn crediti di immagazzinamento sono sufficienti. ASD a.a.2010/2011- Lezione 18 11

logn crediti di immagazzinamento sono sufficienti. Una find richiede l’utilizzo di un credito immagazzinato in x quando x non è né radice, né figlio della radice; x sta acquistando come padre una nuova radice (path compression) che avrà rank strettamente maggiore del vecchio padre di x (rank su un cammino è una funzione monotona crescente) Poiché rank ≤ logn, le operazioni di find non potranno richiedere a x di utilizzare più di logn crediti ASD a.a.2010/2011- Lezione 18 12

log*n e F(i) log*n = min i (log(i)n )≤1 log(1)n = logn e …. log(i)n = log(log(i-1)n )= loglog….logn (i volte) F (i) = 2F(i-1) se i ≥ 1; F(0) = 1 F(0) = 1 log*x = 0 0 < x ≤ 1 F(1) = 2 log*x = 1 1 < x ≤ 2 F(2) = 4 log*x = 2 2 < x ≤ 4 F(3) = 16 log*x = 3 4 < x ≤ 16 F(4) = 65536 log*x = 4 16 < x ≤ 65536 F(5) = 265536 log*x = 5 65536 < x ≤ 265536 ASD a.a.2010/2011- Lezione 18 13

A proposito del rank rank = 0 per ogni nuovo nodo creato da una operazione di makeset rank = rank + 1 dopo una union di due insiemi con radici dello stesso rank e fintantoche x è radice rank(x) rimane invariato non appena x cessa di essere radice rank(x)≤ rank(p(x))≤ logn e #nodi in T(x) ≥ 2rank(x) ASD a.a.2010/2011- Lezione 18 14

Quanti nodi hanno rank pari ad r? Lemma: Durante l’esecuzione di una sequenza di makeset, union e find al più n/2r nodi possono avere rank uguale ad r Per la proprietà 2), quando si assegna rank(x) = r vuol dire che è stata appena effettuata una operazione di union ed x è diventata radice di un qualche albero con almeno 2r nodi (proprietà 4). Conseguentemente almeno 2r nodi saranno etichettati x(r). Se x non sarà più radice, finirà in un albero di rank almeno r+1 (proprietà 4) Visto che ci sono in totale n nodi ne segue che non sarà mai possibile avere più di n/ 2r nodi di rank r ASD a.a.2010/2011- Lezione 18 15

Partizionamento dei nodi in blocchi Come conseguenza del Lemma appena visto possiamo partizionare i nodi in blocchi nel seguente modo: se un nodo v ha rank r, allora appartiene al blocco B(log*r). Poichè rank ≤ logn, allora #blocchi ≤ log*(logn), da cui: B(0) contiene nodi di rank in [0,1], ovvero [0,F(0)] B(1) contiene nodi di rank in [2,2], ovvero [F(0) +1, F(1)] B(2) contiene nodi di rank in [3,4], ovvero [F(1) +1, F(2)] ………………………………… B(i) contiene nodi di rank in [F(i-1) +1, F(i)] ……………………… B(log*n-1) contiene nodi di rank in [F(log*n -2) +1, F(log*n-1)] ASD a.a.2010/2011- Lezione 18 16

Tempo O((n+m)log*n) Raffiniamo l’assegnazione dei crediti: (1+log*n), 1 e (1+log*n), ad ogni operazione di makeset,union e find, rispettivamente,da cui: n(1+log*n) + (n-1) + m(1+log*n) = O((n+m) log*n) Come nella prova precedente, sia il cammino, che supponiamo di l nodi, visitato dalla find. I crediti assegnati alla find servono questa volta per pagare i costi per la visita della radice, del figlio della radice e di tutti i nodi in  che non sono nello stesso blocco del loro padre. I costi relativi ad ogni altro nodo x di  (ovvero ad ogni altro nodo nello stesso blocco del padre) vengono pagati con i crediti che makeset immagazzina in x. Resta da vedere che i crediti così assegnati sono sufficienti. ASD a.a.2010/2011- Lezione 18 17

I crediti assegnati alla find sono sufficienti Notiamo che un generico nodo x non potrà più avere un padre nel suo stesso blocco dal momento che avrà acquistato il primo padre appartenente ad un blocco diverso dal suo. Poichè ci sono log*n blocchi distinti, per ogni find ci sono al più log*n-1 nodi in un blocco diverso da quello del loro padre. Quindi i crediti assegnati alla find sono sufficienti per soddisfare la richiesta di log*n-1+2= log*n+1 nodi. ASD a.a.2010/2011- Lezione 18 18

I crediti assegnati alla makeset sono sufficienti Il numero di crediti immagazzinato dalle n operazioni makeset è n ed è sufficiente perché vedremo che: ogni nodo nel blocco richiede al più F(i) crediti; ci sono al più n/F(i) nodi nel blocco B(i) per 0 ≤ i ≤ log*n -1. Prova di 1. Ogni nodo in un generico blocco B(i) può chiedere al più F(i) crediti, dato che ogni volta che richiederà un credito il rank di suo padre dovrà aumentare e nel blocco B(i) ci sono al più F(i) - F(i-1) ≤ F(i) valori diversi del rank ASD a.a.2010/2011- Lezione 18 19

ci sono al più n/F(i) nodi nel blocco B(i) Prova di 2. (n/2r) per (F(i-1) +1 ≤ r ≤ F(i)) = (n/2r) per 0 ≤ r ≤ F(i)) - (n/2r) per 0 ≤ r ≤ F(i-1) +1 )= = n(1/2) F(i) +1 -1 / (1/2-1) - n(1/2) F(i-1) +2-1 / (1/2-1)≤ ≤ n (1/2) F(i-1) +1 - (1/2) F(i) +1  / 1/2  ≤ n (1/2) F(i-1) +1  / 1/2  ≤ n /2F(i-1) = n /F(i) ASD a.a.2010/2011- Lezione 18 20

Il risultato migliore Una qualunque sequenza di n operazioni makeset, m operazioni find e al più (n-1) operazioni union può essere realizzata in tempo O(n+m(m+n,n) funzione di Ackermann A(1,j) = 2j j≥1 A(i,1) = A(i-1,2) per i≥2 A(i,j) = A(i-1, A(i,j-1) per i,j≥2 funzione inversa della funzione di Ackermann ASD a.a.2010/2011- Lezione 18 21