Olimpiadi di Informatica 2010 Giornate preparatorie

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture dati Mod B
Advertisements

Algoritmi e Strutture Dati
Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo
Introduzione ai grafi Grafo diretto e non diretto
Il problema del minimo albero ricoprente in un grafo non cooperativo
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
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.
Algoritmi e Strutture Dati
Cammini minimi con una sorgente
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Università degli Studi di Roma Tor Vergata
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.
Esercizi su alberi binari
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 28/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del minimo albero ricoprente in un grafo con archi privati
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.
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.
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.
Cammini minimi Algoritmo SPT.Acyclic
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Grafi.
Algoritmi e Strutture Dati
Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente.
Richiami di matematica discreta: grafi e alberi
Prof. Cerulli – Dott.ssa Gentili
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Grafi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Grafi.
Usi (meno scontati) della visita DFS
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.
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.
Usi (meno scontati) della visita DFS lezione basata sul capito 3 del libro Algorithms, di Dasgupta, Papadimitriou, Vazirani, McGraw-Hill.
Grafi CORDA – Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati.
Master Bioinformatica 2002: Grafi
4/4/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Un.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Algoritmi elementari su grafi
Ordinamento topologico
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.
Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
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.
Grafi: rappresentazione e visita
Cammini minimi in grafi:
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
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.
Transcript della presentazione:

Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo 2010 9 – Grafi e algoritmi sui grafi: introduzione. (versione 14/04/2017) 4/14/2017 E. Giovannetti -- OI09.

E. Giovannetti - AlgELab-09-10 - Lez.40 Eulero: il problema dei ponti di Königsberg (la città del filosofo Kant, in Prussia; oggi Kaliningrad, in Russia) 1 6 3 4 2 7 5 A B C D È possibile partire da A e ritornare in A attraversando tutti i ponti esattamente una volta? Eulero dimostrò che no, dando con ciò inizio alla Teoria dei Grafi. A B C D 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizioni preliminari 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Che cos'è un grafo ? Definizioni. Un grafo (semplice) G = (V, E) è costituito da: un insieme V di nodi (o vertici, ingl. vertices, sing. vertex); un insieme E di archi (o spigoli, ingl. edges), ognuno dei quali è (costituito da) una coppia di nodi distinti, detti estremi dell’arco. Vi sono due generi di grafi: non orientati (undirected): gli archi non hanno un verso, cioè, formalmente, sono coppie non ordinate; orientati (directed): gli archi hanno ciascuno un verso, cioè sono coppie ordinate; i due estremi sono detti: nodo uscente o coda: è il primo elemento della coppia; nodo entrante o testa: è il secondo elemento della coppia. 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Esempio: grafo non orientato (B, C) e (C, B) denotano lo stesso arco, che in realtà è l'insieme {B, C}  {C, B} V = {A, B, C, D, E, F} E = {{A,B}, {A,D}, {B,C}, {C,D}, {C,E}, {D,E}} A B C D E F 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Esempio: multigrafo. non possono esistere archi distinti con gli stessi estremi un “grafo” in cui sono permessi archi distinti con gli stessi estremi è un multigrafo A B C D E F NO ! 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Esempio: grafo orientato (B,C) e (C,B) denotano due archi fra loro distinti V = {A, B, C, D, E, F} E ={(A,B), (A,D), (B,C), (C,B), (D,C), (E,C), (D,E)} B C A coda F D A è la coda dell’arco (A,D) D è la testa dell’arco (A,D) D è la coda dell’arco (D,E) ecc. testa E coda testa 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Esempio: multi-grafo orientato ma non possono esistere archi distinti con la stessa coda e la stessa testa un “grafo orientato” in cui sono permessi archi distinti con la stessa coda e la stessa testa è un multigrafo orientato. A B C D E F NO ! 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Grafi non orientati: terminologia. B l'arco {A, B} è incidente sui nodi A e B; i nodi A e B sono adiacenti: A è adiacente a B, B è adiacente ad A; i nodi adiacenti a un nodo A si chiamano anche i vicini di A; grado di un nodo = numero degli archi incidenti sul nodo; esempio: il nodo B ha grado (B) = 3; B 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Grafi orientati: terminologia. B l'arco {A, B} è: incidente sui nodi A e B, uscente da A, entrante in B; il nodo B è adiacente ad A, ma A non è adiacente a B. i nodi adiacenti a un nodo A si chiamano anche i vicini di A; grado di un nodo = numero degli archi incidenti sul nodo; grado uscente = numero degli archi uscenti dal nodo; grado entrante = numero degli archi entranti nel nodo; esempio: il nodo B ha: grado uscente out(B) = 1, grado entrante in(B) = 2, grado totale (B) = out(B) + in(B) = 3, 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Grafi: terminologia (sommario) sottografo di un grafo G = grafo che si ottiene da G non considerando degli archi, e/o non considerando dei nodi né gli archi incidenti su di essi. B B C C A A F F D D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Grafi: terminologia (sommario) sottografo di un grafo G = grafo che si ottiene da G non considerando degli archi, e/o non considerando dei nodi né gli archi incidenti su di essi. C C A A D D 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Grafi: terminologia (sommario) sottografo indotto da un insieme di nodi: dato un grafo G, il sottografo indotto da un sottoinsieme V' di nodi di G è il sottografo di G costituito dai nodi di V' e dagli archi di G che connettono tali nodi. Esempio: nel grafo sottostante, il sottografo indotto dall'insieme di nodi {A, C, D} è: B B C C A A F F D D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Grafi: terminologia (sommario) sottografo indotto da un insieme di nodi: dato un grafo G, il sottografo indotto da un sottoinsieme V' di nodi di G è il sottografo di G costituito dai nodi di V' e dagli archi di G che connettono tali nodi. Esempio: nel grafo sottostante, il sottografo indotto dall'insieme di nodi {A, C, D} è: C C A A D D 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizione con esempio Sia G = (V, E) un grafo. Un cammino nel grafo è una sequenza di nodi <w1, w2, ..., wn> tale che (wi, wi+1)  E per 1 i  n–1. Es.  A, B, C, E  è un cammino nel grafo A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Il cammino <w1, w2, ..., wn> contiene i vertici w1, w2,…, wn e gli archi (w1,w2) (w2,w3) ...(wn-1,wn). La lunghezza del cammino è il numero totale di archi che collegano i vertici della sequenza (uno in meno del numero di vertici). A B C F D E Es. la lunghezza del cammino  A, B, C, E è 3. 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizione con esempio Se esiste un cammino p tra i vertici v e w, si dice che w è raggiungibile da v tramite p Es.: A è raggiungibile da D e viceversa A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Es.: D è raggiungibile da A ma non viceversa B C A F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizione con esempio Se G è un grafo non orientato, definiamo G connesso se esiste un cammino da ogni vertice ad ogni altro vertice. Ad es. questo grafo non orientato è connesso. A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Esempio Questo grafo non orientato NON è connesso. A B C F D E B G C A F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizione con esempio Se G è un grafo orientato, definiamo G fortemente connesso se esiste un cammino da ogni vertice ad ogni altro vertice. Ad es. questo grafo orientato è fortemente connesso. A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Esempio Ad es. questo grafo orientato NON è fortemente connesso. Infatti, non esiste cammino da C a B, né da E ad A, ecc. Tuttavia è debolmente connesso. B B C C A A F F D D E E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Definizione Un ciclo in un grafo è un cammino  w1, w2, …, wn  di lunghezza almeno 1, tale che w1 = wn. A B C F D E il cammino  A, B, C, E, D, A  è un ciclo; 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizione con esempio grafo aciclico = grafo senza cicli Ad es. questo grafo orientato non è aciclico, … A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Un grafo orientato aciclico è spesso chiamato DAG (Directed Acyclic Graph). A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Definizione con esempio. grafo pesato: ad ogni arco è associato un peso, costituito da un numero reale. – 2.3 3 4 7.5 1.2 4.5 A B C F D E 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Rappresentazione La rappresentazione più comoda è tramite liste di adiacenza: per ogni nodo si tiene la lista dei nodi ad esso adiacenti. Se gli N nodi di un grafo sono rappresentati dagli interi da 0 a N-1, il grafo può essere realizzato come un vettore di vettori, ad esempio: 2 1 3 4 5 grado 1 2 5 3 4 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

E. Giovannetti - AlgELab-09-10 - Lez.40 Rappresentazione In molti esercizi la struttura-grafo è data implicitamente dalla struttura-dati caratteristica del problema e non deve essere costruita esplicitamente. 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Visita di grafi e algoritmi sui grafi (sommario) visita in ampiezza (iterativa con uso di coda); su grafi pesati: cammini minimi da un nodo: algoritmo di Dijkstra (uso di coda con priorità); minimo albero di copertura: algoritmo di Prim (uso di coda con priorità); minimo albero di copertura: algoritmo di Kruskal (uso di struttura union-find); visita in profondità (iterativa con uso di pila, o ricorsiva); ordinamento topologico; componenti fortemente connesse. 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.41

E. Giovannetti - AlgELab-09-10 - Lez.40 Albero di visita Durante la visita di un grafo si costruisce implicitamente un albero, detto albero di visita. Se richiesto dall’applicazione, tale costruzione può essere effettuata esplicitamente (nei problemi olimpici di solito non è necessaria). 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40

Visita in profondità ricorsiva. Come negli alberi, la visita in profondità si può realizzare molto semplicemente in modo ricorsivo. Occorre però marcare i nodi che vengono visitati. visitaInProfondità (il grafo G a partire dal nodo s) { marca tutti i nodi di G come non visitati; T = albero vuoto; visitaRic(s); } // la procedura visita il sottografo di G connesso con s. visitaRic (dal nodo u) { inizia_visita(u); marca u come visitato; for each (nodo v adiacente a u) if (v è non visitato) { aggiungi v come figlio di u nell’albero T; visitaRic(v); } termina_visita(u); 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.41

Visita di tutto il grafo Se il grafo non è connesso, la procedura precedente non visita i sottografi non connessi con il nodo di partenza. La visita di tutto il grafo si ottiene semplicemente iterando la visita ricorsiva sui nodi di partenza non ancora visitati: visitaTutti(grafo G) { marca tutti i nodi di G come non visitati; T = foresta vuota; for each (nodo u del grafo G) if (u è non visitato) visit(G, u); } 14/04/2017 14:18 E. Giovannetti - AlgELab-09-10 - Lez.40