Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
La gestione degli insiemi disgiunti
Lezione n°16 Prof.ssa Rossella Petreschi Lezione del 9 /1/ del Corso di Algoritmi e Strutture Dati Riferimenti: capitolo 9 del testo C.Demetrescu, I.Finocchi, G.F.Italiano “Algoritmi e strutture dati” Edizioni: McGraw-Hill capitolo 22 del testo T.H.Cormen, C.E.Leiserson, R.R.Rivest “Introduzione agli Algoritmi” Edizioni: Jackson Libri ASD-A.A.2011/2012 1
2
Union and find La gestione dinamica ed efficiente di insiemi disgiunti (problematica dello Union -Find) opera considerando una qualunque sequenza delle seguenti tre operazioni: makesetx: creare un nuovo insieme x, di nome x, contenente un nuovo elemento x; findx: dato un elemento x, restituire il nome dell’insieme che lo contiene; unionA,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.2011/2012
3
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: makesetx: O(1) perché richiede la creazione di un semplice albero con due nodi; findx: O(1) perché è sufficiente restituire il nome del nodo radice, nodo identificato dal puntatore dal nodo foglia x al nodo padre,radice; unionA,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 AB L’occupazione totale di memoria della struttura dati è O(n) in qualunque istante della sequenza delle operazioni. ASD-A.A.2011/2012 3
4
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: makesetx: 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; uniona,b: O(1) perché rende la radice dell’albero B (contenente il nodo b) figlia della radice dell’albero A (contenente il nodo a); findx: 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.2011/2012 4
5
Alberi Quickfind bilanciati
unionA,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(Tp)) 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.2011/2012 5
6
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+n) + O(nlog2n) = O(m + nlog2n). ASD-A.A.2011/2012 6
7
Alberi Quickunion bilanciati
unionA,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 log2 n 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.2011/2012 7
8
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.2011/2012 8
9
Tempo O(n + mlogn) O(n+mlogn) è 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.2011/2012 9
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.