AlgoLab - Insiemi disgiunti Insiemi disgiunti Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Strutture dati per insiemi disgiunti
Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo
RB-alberi (Red-Black trees)
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Insiemi disgiunti.
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Algoritmi e Strutture Dati
Università degli Studi di Roma Tor Vergata
Algoritmi e Strutture Dati
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati 20 aprile 2001
Algoritmi e Strutture Dati
Esercizi su alberi binari
Sottoinsiemi disgiunti
Corso di Matematica Discreta cont. 2
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Prof. Cerulli – Dott.ssa Gentili
Strutture dati per insiemi disgiunti
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Usi (meno scontati) della visita DFS
Algoritmi e Strutture Dati
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 Complessità computazionale concreta Corso di Informatica 2 a.a. 2003/04 Lezione 3.
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Ordinamento topologico Cammino minimo dalla sorgente
Usi (meno scontati) della visita DFS. Informazioni utili: tenere il tempo clock=1 pre(v)=clock clock=clock+1 post(v)=clock; clock=clock+1 pre(v): tempo.
Alberi di copertura minimi. Dato un grafo pesato G = (V,E), si richiede di trovare un albero T = (V,E’), E’  E, tale che la somma dei pesi associati.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Olimpiadi di Informatica 2010 Giornate preparatorie
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal (*) Algoritmi e Strutture Dati.
Strutture dati per insiemi disgiunti Alberi di copertura minimi
Università degli Studi di Roma Tor Vergata
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Capitolo 9 Union-find Algoritmi e Strutture Dati.
Grammatiche non contestuali (1)
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Grafi: rappresentazione e visita
Capitolo 13 Cammini minimi: algoritmo di Dijkstra Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Divide et Impera Parte 11 - Risoluzione di problemi per divisione in sottoproblemi “bilanciati” Corso A: Prof. Stefano Berardi
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Algoritmo per il calcolo del maggiore tra tre numeri qualsiasi Francesco PUCILLO matr
Insiemi disgiunti.
Transcript della presentazione:

AlgoLab - Insiemi disgiunti Insiemi disgiunti Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro

AlgoLab - Insiemi disgiunti Partizioni Def. Una partizione (finita) di un’insieme S è un sottoinsieme {S 1, …, S k }  (S) t.c. 1. S = S 1  …  S k 2. se i  j allora S i  S j =  Ai fini pratici è conveniente identificare ciascun elemento non vuoto S i della partizione con un suo elemento a  S i, detto rappresentante canonico di S i.

AlgoLab - Insiemi disgiunti L’ADT Disjoint-set datatype Disjoint_Set, Set, T; constructors: Create: Set -> Disjoint_Set; Union: Disjoint_set,T,T -> Disjoint_Set; observation: Find: Disjoint_Set,T -> T; semantics: Create(S) ritorna la partizione P di S t.c. ogni elemento di P e' un singoletto Union(P,x,y) ritorna la partizione che si ottiene da P rimpiazzando gli insiemi di cui x e y sono rappresentanti con la loro unione Find(P,a) ritorna il rappresentante dell’elemento di P cui a appartiene (pre: a in Unione(P))

AlgoLab - Insiemi disgiunti Realizzazione con liste { {a, b, c, d}, {e, f, g} } abcdefg e  S2e  S2 a  S1a  S1

AlgoLab - Insiemi disgiunti Analisi dei costi Dopo q unioni su una struttura di n nodi: 1. Create è  (n) 2. Union è  (q 2 ) ovvero  i=1 q-1 i =  (q 2 ) Posto m = n + q, essendo n =  (m) e q =  (m) il tempo richiesto è  (m 2 ) (il tempo ammortizzato di un’operazione è dunque  (m)).

AlgoLab - Insiemi disgiunti Realizzazione con foreste a bd c e f g P = {{a, b, c, d}, {e, f, g}} a  S1a  S1 e  S2e  S2

AlgoLab - Insiemi disgiunti Unione e f g Union(P, a, e) = {{a, b, c, d, e, f, g}} a bd c a bd c e f g  

AlgoLab - Insiemi disgiunti Euristiche: unione per peso Def. Sia T il sottoalbero con root(T) = x: weight(x) = card(T), rank(x) = height(T). Euristica Unione-per-peso: Link(x, y)se weight(x)  weight(y) Union(P, x, y) = Link(y, x)altrimenti Dove x y Link(x, y) =

AlgoLab - Insiemi disgiunti Nuova analisi di Find (1) Teorema. Se Union è implementata con l’euristica Unione- per-peso, allora per ogni x: 2 rank(x)  weight(x), quindi se n = card(T) con root(T) = x, allora rank(x)  lg n, ossia Find è  (lg n). Dim. Per induzione sulle chiamate successive di Union. Denotiamo con rank(n, x) = rank(x) dopo n applicazioni di Union alla partizione discreta (tutti singoletti); analogamente weight(n, x), Union(n, x, y) e height(n, x): facciamo dunque induzione su n.

AlgoLab - Insiemi disgiunti Nuova analisi di Find (2) Base: se n = 0 allora rank(n, x) = 0, e 2 0 = 1 = weight(n, x); Passo: supponiamo che weight(n, x) > weight(n, y) per cui Union(x, y) = Link(y, x); due sottocasi: a) height(n, x) > height(n, y): allora rank(n+1,x) = rank(n,x) b) height(n, x) = height(n, y): allora rank(n+1, x) = rank(n, y) rank(n+1,x) = 2 rank(n,y)+1 = 2 rank(n,y) + 2 rank(n,y)  weight(n, y) + weight(n, y) (ip. ind.)  weight(n, x) + weight(n, y) = weight(n+1, x)

AlgoLab - Insiemi disgiunti Euristiche: unione per rango Euristica Unione-per-rango: Link(x, y)se rank(x)  rank(y) Union(P, x, y) = Link(y, x)altrimenti Si può dimostrare che anche con questa euristica Find è  (lg n). Link-by-rank (x, y) 1.if rank[x] > rank[y] 2. then parent[y] := x 3. else parent[x] := y 4. if rank[x] = rank[y] 5. then rank[y] := rank[y] + 1

AlgoLab - Insiemi disgiunti Euristiche: compressione del cammino Euristica: nel calcolare Find(P, a), rendiamo ogni vertice incontrato sul cammino da a alla radice dell’albero cui appartiene, figlio di questa radice. a b c d abc d Nota: Un confine superiore all’analisi ammortizzata di m operazioni su un insieme di n elementi è O(m lg* n).

AlgoLab - Insiemi disgiunti

Realizzazione in Java