Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © 2008 - The McGraw.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Introduzione ai grafi Grafo diretto e non diretto
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
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 Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi e Strutture Dati con Laboratorio (Modulo II)
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
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 13 Cammini minimi: Algoritmo di Floyd e Warshall 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.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
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
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.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
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.
Strutture di controllo in C -- Flow Chart --
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 K 4 è planare? Sì!
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Grafi Rappresentazione mediante liste di adiacenza:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Algoritmo di ordinamento topologico, di Dijkstra, e di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Transcript della presentazione:

Grafi Algoritmi e Strutture Dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw - Hill Companies, srl Definizione Un grafo G=(V,E) consiste in: - un insieme V di vertici o nodi, (vertex) - un insieme E di coppie di vertici, detti archi o spigoli (edge): ogni arco connette due vertici Esempio 1: V={persone che vivono in Italia}, E={coppie di persone che si sono strette la mano} Esempio 2: V={persone che vivono in Italia}, E={(x,y) tale che x ha inviato una mail a y}

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 3 Copyright © The McGraw - Hill Companies, srl Terminologia (1/10) Se esiste una relazione simmetrica grafo non orientato Accade quando la relazione tra una coppia di vertici è simmetrica; vedi esempio 1.

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 4 Copyright © The McGraw - Hill Companies, srl Terminologia (2/10) Se esiste una relazione orientata grafo orientato o diretto Accade quando la relazione tra una coppia di vertici è orientata; vedi esempio 2.

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 5 Copyright © The McGraw - Hill Companies, srl Terminologia (3/10) Un grafo verrà denotato con G=(V,E), dove E VxV n = numero di vertici (nodi) m = numero di spigoli (archi) Se x e y sono due vertici di G, allora (x, y) indicherà larco (x, y) si dice incidente a x e a y Se il Grafo è Orientato, si dice che (x, y) esce da x e entra nel vertice y Se il Grafo NON è Orientato, si dice che x ed y sono adiacenti

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 6 Copyright © The McGraw - Hill Companies, srl Terminologia (4/10) Grado di un vertice v in un Grafo NON orientato è dato dal numero di archi incidenti su v. Si indica con (v) Esempio: H ha grado 4: (H)=4 La somma di tutti i gradi dei vertici è data da: (v)=2m v G

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 7 Copyright © The McGraw - Hill Companies, srl Terminologia (5/10) Grado di un vertice v in un Grafo Orientato Si ha il grado in uscita di v e il grado in entrata di v Si indicano con in (v) e out (v) Il Grado di v è in (v) + out (v) Esempio: E ha in (E)=3 e out (E)=4, (E)=7 (v)=2m v G Si ha che in (v)= v G out (v)=m v G

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 8 Copyright © The McGraw - Hill Companies, srl Terminologia (6/10) Si dice che il cammino è semplice se tutti i vertici sono distinti Esempio: il cammino tra A e L esiste, contiene (A, B, E, I, L), e gli archi (A,B)- (B,E)-(E,I)-(I,L), ha lunghezza 4, ed è semplice Un Cammino in G dal vertice x al vertice y è una sequenza di vertici (v 0, v 1, v 2, ……, v k ) con v 0 =x e v k =y, tale che: (v i-1, v i ) appartiene a G per qualunque 1ik Il cammino ha lunghezza k (numero di vertex – 1) Esempio: è un cammino di lunghezza 5

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 9 Copyright © The McGraw - Hill Companies, srl Terminologia (7/10) Esempio: il cammino tra A e L esiste, contiene (A, B, C, E, F, H, E, I, L), e gli archi (A,B)-(B,C)-(C,E)-(E,F)-(F,H)-(H,E)- (E,I)-(I,L), ha lunghezza 8, e NON è semplice (passa due volte da E)

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 10 Copyright © The McGraw - Hill Companies, srl Terminologia (8/10) Se esiste un cammino da un vertice x ad un vertice y, si dice che y è raggiungibile da x, ossia che y è discendente di x e che x è un antenato di y Un cammino (v 0, v 1, v 2, ……, v k ) tale che v 0 =v k e k1 si dice un ciclo Un ciclo è semplice se i vertici sono distinti Un Grafo Diretto Aciclico è un grafo orientato che non contiene cicli

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 11 Copyright © The McGraw - Hill Companies, srl Terminologia (9/10) (B,C,E,D,B) è un ciclo semplice (E,F,H,E,I,G,E) non è semplice

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 12 Copyright © The McGraw - Hill Companies, srl Terminologia (10/10) Un Grafo NON orientato G=(V,E) si dice connesso se esiste un cammino tra ogni coppia di vertici in G Per essere connesso un Grafo deve avere almeno (n-1) archi Un Grafo Orientato si dice fortemente connesso se esiste un cammino tra ogni coppia di vertici

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 13 Copyright © The McGraw - Hill Companies, srl Operazioni sui Grafi

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 14 Copyright © The McGraw - Hill Companies, srl Alcune Operazioni unsigned int grado(vertex v); –numero di archi incidenti su v edge[] archiIncidenti(vertex v); –lista/vettore di archi incidenti su v boolean sonoAdiacenti(vertex u, vertex v); –TRUE se esiste larco (u,v) void aggiungiVertice(vertex v); –inserisce un nuovo vertice v void aggiungiArco(vertex u, vertex v); –inserisce un nuovo arco tra i vertici u e v void rimuoviVertice(vertex v); void rimuoviArco(edge e);

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 15 Copyright © The McGraw - Hill Companies, srl Strutture dati per rappresentare grafi

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 16 Copyright © The McGraw - Hill Companies, srl Lista di Archi Più struttura dati per memorizzare vertex

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 17 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 18 Copyright © The McGraw - Hill Companies, srl Liste di Incidenza

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 19 Copyright © The McGraw - Hill Companies, srl Matrice di Adiacenza

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 20 Copyright © The McGraw - Hill Companies, srl Matrice di Incidenza

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 21 Copyright © The McGraw - Hill Companies, srl Implementazione in C di un Grafo con Liste di Adiacenza

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 22 Copyright © The McGraw - Hill Companies, srl v next nv vect v present adj v present adj v present adj v present adj v present adj v next v v v v v v graph Liste di Adiacenza

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 23 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza #define EMPTYGRAPH NULL typedef int boolean; typedef unsigned int vertex; typedef vertex edge[2]; typedef struct node_edge{ vertex v; struct node_edge *next; } node_edge; typedef struct node_vertex{ vertex v; boolean present; node_edge *adj; /* lista di adiacenze del vertex v*/ } node_vertex; typedef struct node_graph { unsigned int nv; /* numero massimo di vertici del grafo */ node_vertex *vect; /* vettore con le liste delle adiacenze */ } * graph ;

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 24 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza graph MakeNULLGraph(unsigned int dim) { graph G; unsigned int i; if (dim>0) { G = (graph)malloc(sizeof(struct node_graph)); if (!G) printf("\nERRORE: impossibile allocare memoria per il grafo\n"); else { G->vect=(node_vertex *)malloc(dim*sizeof(node_vertex)); if (!G->vect) { printf("ERRORE: impossibile allocare memoria "); printf("per il vettore di liste\n"); free(G); G=NULL; } else { G->nv = dim; for (i=0; i<dim; i++){ G->vect[i].v=i; G->vect[i].present=0; G->vect[i].adj=EMPTYGRAPH; } } else G=NULL; return(G); }

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 25 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza void AddEdgeGraph(graph G, vertex u, vertex v) { node_edge *new; if (G && u nv && v nv ) { if (G->vect[u].present && G->vect[v].present) { new = (node_edge*)malloc(sizeof(node_edge)); if (new==NULL) printf("\nERRORE: impossibile allocare memoria \n"); else { new->v=v; new->next=G->vect[u].adj; G->vect[u].adj = new; }

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 26 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza void RemoveEdgeGraph(graph G, edge e) { node_edge *prev; /* l'arco precedente a quello da togliere nella lista */ node_edge *p; /* l'arco da togliere dalla lista */ vertex u=e[0], v=e[1]; if (G && u nv && v nv) { if (G->vect[u].present && G->vect[v].present) { /*eliminare l'arco da u a v*/ p=G->vect[u].adj; if (p->v == v) { G->vect[u].adj = p->next; free(p); } else { prev=p; while (prev->next->v != v && prev->next->next!=EMPTYGRAPH) prev=prev->next; if (prev->next->next!=EMPTYGRAPH) { p=prev->next; prev->next=p->next; free(p); }

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 27 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza /*eliminare l'arco da v a u*/ p=G->vect[v].adj; if (p->v == u) { G->vect[v].adj = p->next; free(p); } else { prev=p; while (prev->next->v != u && prev->next->next!=EMPTYGRAPH) prev=prev->next; if (prev->next->next!=EMPTYGRAPH) { p=prev->next; prev->next=p->next; free(p); }

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 28 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza void AddVertexGraph(graph G, vertex v) { node_vertex *p; unsigned int dim; if (G!=NULL && !G->vect[v].present) if(v nv) G->vect[v].present=1; else if (v==G->nv) { dim=G->nv+1; p=(node_vertex *)realloc(G->vect,dim*sizeof(node_vertex)); if (!p) printf("ERRORE: impossibile reallocare memoria \n"); else { G->vect=p; G->nv=dim; G->vect[v].v=v; G->vect[v].present=1; G->vect[v].adj=EMPTYGRAPH; }

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 29 Copyright © The McGraw - Hill Companies, srl Liste di Adiacenza void RemoveVertexGraph(graph G, vertex v) { node_edge *prev; /* l'arco precedente a quello da togliere nella lista */ node_edge *p; /* l'arco da togliere dalla lista */ unsigned int i; if (G && v nv &&G->vect[v].present) for (i=0; i nv; i++) { if (G->vect[i].v==v){ p=G->vect[i].adj; while (p!=EMPTYGRAPH) { prev=p; p=p->next; free(prev); } G->vect[i].adj=EMPTYGRAPH; G->vect[i].present=0; } else if (G->vect[i].present && G->vect[i].adj) { p=G->vect[i].adj; if (p->v == v) G->vect[i].adj = p->next; else { prev=p; while (prev->next->v != v && prev->next->next!=EMPTYGRAPH) prev=prev->next; if (prev->next->v==v) { p=prev->next; prev->next=p->next; } free(p); }

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 30 Copyright © The McGraw - Hill Companies, srl Riepilogo Concetto di grafo e terminologia Diverse strutture dati per rappresentare grafi nella memoria di un calcolatore Lutilizzo di una particolare rappresentazione può avere un impatto notevole sui tempi di esecuzione di un algoritmo su grafi