Grafi: rappresentazione e visita

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture dati Mod B
Advertisements

Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Strutture dati per insiemi disgiunti
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Introduzione ai grafi Grafo diretto e non diretto
Estendere i linguaggi: i tipi di dato astratti
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Cammini minimi con una sorgente
RB-alberi (Red-Black trees)
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Cammini minimi con sorgente singola
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Grafi.
APPUNTI SUL LINGUAGGIO C
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Algoritmi e Strutture Dati
Heap Ordinamento e code di priorità Ugo de Liguoro.
Grafi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Componenti fortemente connesse
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Cammini minimi tra tutte le coppie
Grafi Rappresentazione mediante liste di adiacenza:
Alberi binari Definizione della struttura dati: struct tree { };
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.
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Cammini minimi da un sorgente
Ordinamento topologico Cammino minimo dalla 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 - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
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.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Ordinamento topologico
Olimpiadi di Informatica 2010 Giornate preparatorie
Algoritmi elementari su grafi
Componenti fortemente connesse
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 11 Visite di grafi 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)
Laureando: Enrico Sperindio Relatore: Prof. GIORGIO ROMANIN JACUR
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Cammini minimi fra tutte le coppie:
Cammini minimi in grafi:
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Schema generale, visita in ampiezza e profondità.
Transcript della presentazione:

Grafi: rappresentazione e visita Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro AloLab - Grafi

Grafi: definizione Un grafo diretto (orientato) è una coppia G = V, A dove V è un insieme (non vuoto) di vertici A  V  V è un insieme, eventulamente vuoto, di archi. 1 2 V = {1,2,3,4} A = 1,2, 1,3, 3,2, 2,4 3 4 G si dice pesato se esiste una funzione peso:A. G non è diretto se A è un insieme di coppie non ordinate. AloLab - Grafi

Grafi: rappresentazione (1) Matrici di adiacenza: M rappresenta G = V,A se M è una matrice n  n, dove n = |V|, e (ponendo ogni elemento di V in corrispondenza con un intero tra 1 e n): 1 se i,j  A Mi,j = 0 altrimenti Nel caso di grafi pesati si pone Mi,j = peso(i,j) se i,j  A,  altrimenti. 1 2 3 4 AloLab - Grafi

Grafi: rappresentazione (2) Liste di adiacenza: G = V,A è rappresentato da un vettore v[1..n] di liste su V, tale che n = |V|, ad ogni vertice in V sia associato un indice in 1..n, e j occorra nella lista v[i] se e solo se i,j  A. Nel caso di grafi pesati le liste hanno elementi in V, e j,r occorre nella lista v[i] se e solo se i,j  A e peso(i,j) = r. 1 2 1 2 3 2 4 3 2 3 4 4 AloLab - Grafi

Cammini Dato un qualunque insieme di coppie (relazione binaria) R, la chiusura transitiva di R, R*, è il piu piccolo insieme di coppie tale che: i) R  R*, ii) se x,y, y,z  R*, allora x,z  R*. Si osservi che la definizione è ricorsiva: un modo alternativo è R0 = , Rn+1 = R  {x,z | x,y  Rn, y,z  R}, R* = Un cammino in un grafo G = V, A è un elemento della chiusura transitiva A* di A: quindi un cammino è una sequenza finita di archi,  = a,b, b,c, … , y,z che si dice un cammino da a a z, la cui lunghezza è pari al numero degli archi che lo compongono (lunghezza() = min{n |   An}). AloLab - Grafi

Visita di un grafo Una visita di un grafo G = V, A è un insieme di cammini in G con origine in uno stesso stesso vertice. Una visita è dunque un albero, i cui vertici sono contenuti in V ed i cui archi sono contenuti in A (è un sottografo di G), la cui radice è l’origine dei cammini. 1 1 2 1 3 2 3 3 4 2 4 4 AloLab - Grafi

Partizioni per una visita (1) Un vertice j è adiacente ad i se i,j  A. Per implementare un algoritmo di visita si considerano due partizioni dei vertici del grafo: una partizione in visitati e non visitati; ed una partizione nei tre sottoinsiemi: frontiera (GRIGIO): insieme dei vertici visitati che possono avere altri vertici adiacenti non ancora visitati; interno (NERO): insieme dei vertici visitati i vertici adiacenti sono stati visitati; esterno (BIANCO): insieme dei vertici non ancora visitati. AloLab - Grafi

Partizioni per una visita (2) G v Esterno Interno Frontiera AloLab - Grafi

Pseudocodifica degli algoritmi di visita: schema generale Function visita_grafo (grafo G = V, A, vertice v): insieme; var albero, interno, esterno, frontiera, D, visitato: insieme; begin esterno := V / {v}; frontiera := {v}; interno := ; albero := ; visitato := {v}; while frontiera   do begin {Inv. interno, frontiera, esterno soddisfano le rispettive definizioni e, se interno ha almeno due vertici allora albero è una copertura di interno } sia w  frontiera; D : {u | w,u  A and u  esterno}; visitato := visitato  D; if D =  then begin frontiera := frontiera / {w}; interno:= interno  {w}; end else foareach u  D do begin esterno:= esterno / {u}; frontiera:= frontiera  {u}; albero := albero {w,u} endforeach endif endwhile return albero endfunction; AloLab - Grafi

Visita in ampiezza (BFS) La visita procede aggiungendo alla frontiera tutti i vertici esterni adiecenti ad un vertice nella frontiera; fatto questo il vertice considerato viene rimosso dalla frontiera ed aggiunto ai vertici interni. La scelta di D è: D := {u w,u  A and u  esterno} per qualche w in frontiera. La frontiera è costituita da una sequenza di vertici la cui distanza da v è non decrescente: il primo elemento è il più vicino a v. Quale struttura dati può implementare la frontiera? AloLab - Grafi

Algoritmo BFS BFS (grafo G = V, A, vertice v) var interno, esterno, albero : insieme; frontiera: coda; interno := ; albero := ; esterno:= V/{v} Accoda(v,frontiera); while frontiera   do u := EstraiDallaCoda(frontiera); foreach w s.t. u,w  A and w  esterno do esterno = esterno / {w}; albero := albero  {u,w} Accoda(w,frontiera); interno := interno  {u} return albero AloLab - Grafi

Visita in ampiezza esempio. 1 2 3 4 5 6 1 Frontiera = 1 Albero = AloLab - Grafi

Visita in ampiezza esempio. 1 2 3 4 5 6 1 Frontiera = 2 4 Albero = 2 4 AloLab - Grafi

Visita in ampiezza esempio. 1 2 3 4 5 6 1 Frontiera = 5 Albero = 2 4 5 AloLab - Grafi

Visita in ampiezza esempio. 1 2 3 4 5 6 1 Frontiera = 3 6 Albero = 2 4 5 3 6 AloLab - Grafi

Visita in ampiezza esempio. 1 2 3 4 5 6 1 Frontiera =  Albero = 2 4 5 3 6 AloLab - Grafi

Visita in profondità (DFS) La scelta di D è: D := {u}, per qualche u tale che esiste w  frontiera , w è l’ultimo vertice inserito e w,u  A. La frontiera è un cammino che comincia da v; l’ultimo vertice aggiunto alla frontiera è il primo ad essere considerato: sia per aggiungere altri vertici, sia per rimuoverlo dalla frontiera. Con quale struttura conviene implementare la frontiera? AloLab - Grafi

Algoritmo DFS-Visit DFS-Visit (grafo G = V, A, vertice v) var interno, esterno, albero : insieme; frontiera: pila; interno := ; albero := ; esterno:= V/{v} Push(v,frontiera); while frontiera   do u := Top(frontiera); D := {w | u,w  A and w  esterno} if D   then with w  D do esterno = esterno / {w}; albero := albero  {u,w} Push(w,frontiera); else interno := interno  {u}; Pop(frontiera); return albero AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 1 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 2 1 2 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 5 2 1 2 5 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 3 5 2 1 2 5 3 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 5 2 1 2 5 3 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 6 5 2 1 2 5 3 6 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 5 2 1 2 5 3 6 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 2 1 2 5 3 6 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 1 2 5 3 6 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 4 1 4 2 5 3 6 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera = 1 4 2 5 3 6 AloLab - Grafi

Visita in profondità esempio. 1 2 3 4 5 6 1 Albero = Frontiera =  4 2 5 3 6 AloLab - Grafi

Fine AloLab - Grafi