Sottoinsiemi disgiunti

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Programmazione dinamica: problema della sottosequenza più lunga
Uso avanzato di C.
SOTTOINSIEMI, INCLUSIONE
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Cammini minimi con sorgente singola
Insiemi disgiunti.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Algoritmi e Strutture Dati
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Boruvka Algoritmi.
Algoritmi e Strutture Dati
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Cammini minimi Algoritmo SPT.Acyclic
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. A)
Trovare il percorso minimo da b ad ogni altro vertice
APPUNTI SUL LINGUAGGIO C
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
Algoritmi e Strutture Dati
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente.
Lalgoritmo MergeSort Applica la strategia del divide et impera Divide: suddivide la sequenza di n elementi data in due sottosequenze di n/2 elementi Impera:
Algoritmi greedy Gli algoritmi greedy in genere non sono esatti, cioè determinano soluzioni non necessariamente ottime Per il problema dell’albero ricoprente.
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
Strutture dati per insiemi disgiunti
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Cammini minimi da un sorgente
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.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili 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.
Algoritmi e Strutture Dati
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
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
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi elementari su grafi
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
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.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°10.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2012/2013 Prof.ssa Rossella Petreschi Albero Ricoprente Lezione n°9.
L’algoritmo MergeSort
Insiemi disgiunti.
Transcript della presentazione:

Sottoinsiemi disgiunti E’ dato un insieme V e una collezione C di sottoinsiemi di V fra loro disgiunti C = {C1, C2, …,Cr} Ci  V (i = 1,…,r) Ci  Cj =  (i  j) Vogliamo poter creare sottoinsiemi di un solo elemento v (MakeSet) sapere a che sottoinsieme appartiene l’elemento v(FindSet) fondere due sottoinsiemi in uno solo (Union)

Applicazioni dei sottoinsiemi disgiunti Perché ci interessa? le componenti connesse di un grafo sono sottoinsiemi disgiunti l’algoritmo di Kruskal per l’albero 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)

Rappresentazione a liste L’idea più spontanea è rappresentare ogni sottoinsieme con una lista • C • F • • A • B • D • E •

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

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(n2), ma O(n log n) Ma si può migliorare ancora... Ogni elemento punta indirettamente all’elemento rappresentativo, cioè l’elemento rappresentativo è solo il termine di una catena di puntatori Per fondere due liste, basta che l’elemento rappresentativo della seconda punti quello della prima

Rappresentazione a foresta B A C D F E X = {[A,B], [C,F], [E,D], [A,D] [B,E] [A,E]} C • F • D • E • A • B • 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)!)

Rappresentazione a foresta MakeSet(v) p[v] = v rank[v] = 0 FindSet(v) While p[v]  v do v = p[v] p[v] è l’elemento 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]++