La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sottoinsiemi disgiunti E dato un insieme V e una collezione C di sottoinsiemi di V fra loro disgiunti C = {C 1, C 2, …,C r } C i V (i = 1,…,r) C i C j.

Presentazioni simili


Presentazione sul tema: "Sottoinsiemi disgiunti E dato un insieme V e una collezione C di sottoinsiemi di V fra loro disgiunti C = {C 1, C 2, …,C r } C i V (i = 1,…,r) C i C j."— Transcript della presentazione:

1 Sottoinsiemi disgiunti E dato un insieme V e una collezione C di sottoinsiemi di V fra loro disgiunti C = {C 1, C 2, …,C r } C i V (i = 1,…,r) C i C j = (i j) Vogliamo poter creare sottoinsiemi di un solo elemento v (MakeSet) sapere a che sottoinsieme appartiene lelemento v(FindSet) fondere due sottoinsiemi in uno solo (Union)

2 Applicazioni dei sottoinsiemi disgiunti Perché ci interessa? le componenti connesse di un grafo sono sottoinsiemi disgiunti lalgoritmo di Kruskal per lalbero ricoprente minimo deve sapere quali vertici sono già connessi ConnectedComponents(G,c) For v = 1 to n do MakeSet(v) For each [u,v] E do r = FindSet(u) s = FindSet(v) If r s then Union(r,s)

3 Rappresentazione a liste Lidea più spontanea è rappresentare ogni sottoinsieme con una lista ABDECF

4 Rappresentazione a liste Ogni sottoinsieme ha un elemento rappresentativo (scelto ad arbitrio) Ogni elemento del sottoinsieme punta lelemento rappresentativo (FindSet ha complessità O(1)) Ogni elemento del sottoinsieme punta il successivo Per fondere due sottoinsiemi, occorre accodare una lista allaltra (O(1)): meglio la più corta modificare tutti i puntatori allelemento rappresentativo della prima lista (O(n)) (Union ha complessità O(n))

5 Rappresentazione a foresta La funzione Union si eseguirà al più n-1 volte Una sequenza di n-1 Union fatte accodando la lista più corta alla più lunga non costa O(n 2 ), ma O(n log n) Ma si può migliorare ancora... Ogni elemento punta indirettamente allelemento rappresentativo, cioè lelemento rappresentativo è solo il termine di una catena di puntatori Per fondere due liste, basta che lelemento rappresentativo della seconda punti quello della prima

6 Rappresentazione a foresta ABDECF B A C D F E X = {[A,B], [C,F], [E,D], [A,D] [B,E] [A,E]} Si accelera Union da O(n) a O(1) Si rallenta FindSet da O(1) a O(d) dove d è la lunghezza della catena (quasi O(1)!)

7 Rappresentazione a foresta MakeSet(v) p[v] = v rank[v] = 0 FindSet(v) While p[v] v do v = p[v] p[v] è lelemento puntato da v rank[v] il numero di livelli sotto v Union(r,s) If rank[r] < rank[s] then p[r] = s else p[s] = r If rank[r] = rank[s] rank[r]++


Scaricare ppt "Sottoinsiemi disgiunti E dato un insieme V e una collezione C di sottoinsiemi di V fra loro disgiunti C = {C 1, C 2, …,C r } C i V (i = 1,…,r) C i C j."

Presentazioni simili


Annunci Google