Complessità ammortizzata degli algoritmi Union Find

Slides:



Advertisements
Presentazioni simili
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Advertisements

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 15 /10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafo 7.4 del testo Kingston “Algorithms and.
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)
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.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Alberi autoaggiustanti
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
Inserzione e Cancellazione
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
Algoritmi Avanzati a.a.2011/2012 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
La gestione degli insiemi disgiunti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Sulla complessità Lezione n°2
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 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
Lezione n°12 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
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Estensione di strutture dati e
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Alberi di ricerca Lezione n°4
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Insiemi disgiunti.
Algoritmi e Strutture Dati
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:

Complessità ammortizzata degli algoritmi Union Find Lezione n°9 Prof.ssa Rossella Petreschi Lezione del 5 /11/ 2013 del Corso di Algoritmica

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)=size(x) ≥ 2rank(x) 2

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à 2) Visto che ci sono in totale n nodi ne segue che non sarà mai possibile avere più di n/ 2r nodi di rank r 3

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 4

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)] In ogni blocco ci saranno al più un numero di rank diversi ≤ F(i) - F(i-1) ≤ F(i) 5

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 visitato dalla find (il cammino si suppone di l nodi). 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 siano sufficienti. 6

I crediti assegnati alla find sono sufficienti 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. 7

I crediti assegnati alla makeset sono sufficienti Il numero di crediti immagazzinato dalle n operazioni makeset è sufficiente perché si ha 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 8

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) 9

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 10

Numeri di Catalano Il numero di alberi binari distinti con n nodi è pari al numero di Catalano di dimensione n: Cn = (2n su n)/(n+1), risultato dell’equazione ricorsiva Cn = ∑ Cs Cn-s-1, con 0 ≤ s ≤ n-1 e C0= C1=1 C2= 2 C3= 5 C4= 14 C5= 42 …………. 11

Quanti bit per un albero binario? Per rappresentare un qualunque albero binario con n nodi occorrono un numero di bit pari a log Cn= log[(2n su n)/ (n+1)] > > log[(22n)/ (2n(n+1))] per la (*) = 2n - O(logn) (*) (2n su n) = (2n)!/n! (2n-n)! = = (2n/2n) [2n (2n-1) (2n-2)…….1]/[n(n-1)(n-2)…1] [n(n-1)(n-2)…1]) = = (1/2n)[(2n2n)/(nn)][(2n-1)(2n-2)/(n-1)(n-1)]… [3x2/1] > > (1/2n)[(22n2/n2)][(2n-2)(2n-2)/(n-1)(n-1)]… [2x2/1] = = (1/2n) [22n2/n2] [22(n-1)2 /(n-1)2]… [22/12] = (1/2n) x (22n) 12