Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

Documenti analoghi
MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Algoritmi di visita di un grafo

Esercizi Capitolo 6 - Alberi binari di ricerca

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

40 Algoritmi sui Grafi

Algoritmi e strutture dati. Codici di Huffman

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

TSP con eliminazione di sottocicli

Grafi. Moreno Marzolla Dip. di Informatica Scienza e Ingegneria Università di Bologna. moreno.marzolla@unibo.it

STRUTTURE NON LINEARI

TSP con eliminazione di sottocicli

Algoritmi di Visita di Grafi. Damiano Macedonio

Alberi binari di ricerca

Alcuni Preliminari. Prodotto Cartesiano

PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO

Intelligenza Artificiale. Metodi di ricerca

LE FUNZIONI A DUE VARIABILI

Minimo sottografo ricoprente. Minimo sottografo ricoprente. Minimo albero ricoprente. Minimo albero ricoprente

Algoritmi e Strutture Dati

Esercizi Capitolo 5 - Alberi

B+Trees. Introduzione

Esempi. non. orientato. orientato

Alberi auto-aggiustanti

1. PRIME PROPRIETÀ 2

16/05/2008. Continua sporadicamente ad occuparsi di matematica; muore tra le convulsioni, probabilmente per una lesione al cervello

Programmazione dinamica

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA

Lezione 8. La macchina universale

Algoritmi e Strutture Dati

Capitolo 2. Operazione di limite

Per studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Analisi di una Rete Sociale

Simulazione di una Rete di Interconnessione di una Compagnia Aerea

Corrispondenze e funzioni

Luigi Piroddi

Dimensione di uno Spazio vettoriale

4 3 4 = 4 x x x 10 0 aaa

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

RE Genitori e Alunni

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Percorsi, strategie e geometrie in gioco Complementi e spunti di lavoro Primaria e Secondaria Inferiore

uscente entrante adiacente Figure B.2 (a) (b) (c) incident from leaves incident to enters incident on adjacent degree isolated

ci sono più problemi che programmi esiste un problema che non si può risolvere con un programma

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Progetto di Reti di Telecomunicazione Modelli in Programmazione Lineare Problemi di flusso

Algoritmi e Strutture Dati

La struttura dati ad albero binario

LE FUNZIONI E LE LORO PROPRIETÀ

Progetto di simulazione molecolare per il corso di Complementi di algoritmi A.A

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015

Alberi binari di ricerca

(a cura di Francesca Godioli)

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Algoritmi e Strutture di Dati II 2. Visite di grafi

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Consideriamo due polinomi

Algoritmi e Strutture Dati

Aprire WEKA Explorer Caricare il file circletrain.arff Selezionare random split al 66% come modalità di test Selezionare J48 come classificatore e

b i 1,1,1 1,1,1 0,1,2 0,3,4

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Corso di Informatica

Esercizi per il corso di Algoritmi e Strutture Dati

Esempi di funzione. Scheda Tre

Macchine sequenziali

Algebra booleana. Si dice enunciato una proposizione che può essere soltanto vera o falsa.

Ricerca non informata in uno spazio di stati

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007

1 Estensione in strategia mista di un gioco

( x) ( x) 0. Equazioni irrazionali

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Metodi Computazionali

LEZIONE 7. Esercizio 7.1. Quale delle seguenti funzioni è decrescente in ( 3, 0) e ha derivata prima in 3 che vale 0? x x2. 2, x3 +2x +3.

e-dva - eni-depth Velocity Analysis

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Complessità Computazionale

INdAM QUESITI A RISPOSTA MULTIPLA

SISTEMI DI NUMERAZIONE E CODICI

4. Operazioni aritmetiche con i numeri binari

Fondamenti di Ricerca Operativa

Intelligenza Artificiale

Minimo Albero Ricoprente

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

4. Operazioni elementari per righe e colonne

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

MODELLISTICA DI IMPIANTI E SISTEMI 2

Matematica e Statistica

Esercizi Capitolo 14 - Algoritmi Greedy

Catalogo Elettronico Lancia, Fiat e Alfa Romeo

Corrispondenze e relazioni - Complementi

Esercitazione 7. Grafi. Rappresentazione e algoritmi di visita

Transcript:

Appunti di Algoritmi e Strutture Dati Grafi Gianfranco Gallizia 12 Dicembre 2004

2

Indice 1 Grafi 5 1.1 Definizione.............................. 5 1.2 Implementazione........................... 5 1.2.1 Liste di adiacenza...................... 5 1.2.2 Matrici di adiacenza..................... 6 1.2.3 Matrici di incidenza..................... 6 1.3 Visita dei grafi............................ 7 1.3.1 Breadth-First Search (BFS)................. 7 1.3.2 Depth-First Search (DFS).................. 9 1.3.3 Applicazioni della DFS................... 11 1.3.4 Algoritmo di Dijkstra.................... 12 1.4 Cicli Euleriani e Hamiltoniani.................... 13 1.4.1 Cicli Euleriani........................ 13 1.4.2 Cicli Hamiltoniani...................... 13 2 Alberi 15 2.1 Definizione.............................. 15 2.2 Implementazione........................... 16 2.3 Visita degli alberi........................... 17 2.4 Heaps (cataste)............................ 18 3

4 INDICE

Capitolo 1 Grafi 1.1 Definizione Nella matematica moderna, si dice grafo (da non confondere con grafico) una figura costituita da punti, detti vertici o nodi, e da linee che li uniscono, dette lati o spigoli o archi. Più formalmente, dato un insieme A di nodi, un grafo è un sottoinsieme del prodotto cartesiano G A A. 1.2 Implementazione 1.2.1 Liste di adiacenza Tratto da http://it.wikipedia.org/wiki/grafo. Figura 1.1: Grafo e lista di adiacenza. La lista di adiacenza è un array di puntatori con tanti elementi quanti sono i nodi del grafo. La lista di adiacenza viene costruita concatenando in una lista i vicini del nodo che si sta considerando. 5

6 CAPITOLO 1. GRAFI 1.2.2 Matrici di adiacenza 1 2 3 4 1 0 1 1 0 2 1 0 1 1 3 1 1 0 1 4 0 1 1 0 Come si legge: Si guarda la prima colonna e confronta riga per riga. Uno 0 significa che tra il nodo che identifica la colonna e il nodo che identifica la riga non c è nessun arco. Un 1 significa che tra il nodo che identifica la colonna e il nodo che identifica la riga c è un arco. Nel caso in cui il grafo sia orientato si controlla che vi sia un arco entrante nel nodo che identifica la riga che parte dal nodo che identifica la colonna. 1.2.3 Matrici di incidenza Lega: M ij (1,2) (1,3) 1 1 1 2 1 0 3 0 1 0: se dal nodo i non parte o non arriva l arco j. 1: se dal nodo i parte o arriva l arco j.

1.3. VISITA DEI GRAFI 7 1.3 Visita dei grafi 1.3.1 Breadth-First Search (BFS) La BFS (visita in ampiezza) oltre a visitare il grafo a partire dal nodo S compila anche l albero 1 dei cammini minimi 2 che ha per radice il nodo S. Il principio su cui si basa la BFS è: visito prima tutti i nodi a distanza 1 da S, poi tutti tutti i nodi a distanza 2 ecc... Figura 1.2: Princio della BFS. 1 Vedi definizione di albero più avanti. 2 Albero dei cammini minimi: albero che illustra i percorsi più brevi a partire da un nodo.

8 CAPITOLO 1. GRAFI Lega: S: nodo di partenza. d(x): distanza di x da S. P(x): padre di x. color(x): colore 3 di x. Q: coda dei nodi grigi. Adj: lista di adiacenza del grafo. Pseudocodice. BFS(G[ ], s ) for each vertex in G[ ] except s do color (u):= white ; P(u):=NIL ; d(u):= i n f i n i t y ; color ( s ):= gray ; d( s ):=0; P( s ):=NIL ; Enqueue( s ) ; while Q<>EMPTY do u:=dequeue(q) ; for each v in Adj(u) do if color (v)=white then color (v):= gray ; d(v):=d(u)+1; P(v):=u ; Enqueue(v ) ; Dequeue(Q) ; color (u):= black ;. 3 Nella BFS ogni nodo viene colorato con il seguente criterio: W(bianco): non visitato. G(grigio): visita iniziata. B(nero): visita terminata.

1.3. VISITA DEI GRAFI 9 1.3.2 Depth-First Search (DFS) La DFS (visita in profondità) percorre il cammino più lungo possibile da un nodo e poi torna indietro e controlla i nodi che non sono stati visitati. Nella DFS si visitano tutti i nodi del grafo (anche quelli che non sono visitati con la BFS). Lega: S: nodo di partenza. P(x): padre di x. color(x): colore 4 di x. time:contatore temporale. i(x): istante in cui si scopre il nodo x. f(x): istante in cui si completa la visita del nodo x. Adj: lista di adiacenza del grafo. 4 Nella DFS ogni nodo viene colorato con il seguente criterio: W(bianco): non visitato. G(grigio): scoperto. B(nero): visitato.

10 CAPITOLO 1. GRAFI Pseudocodice. DFS(G[ ] ) for each u in G[ ] do color (u):= white ; P(u):=NIL ; time :=0; for each v in G[ ] do if color (u)=white then DFS v i s i t (u ) ;. DFS v i s i t (u) color (u):= gray ; time:=time+1; i (u):= time ; for each v in Adj(u) do if color (v)=white then P(v):=u ; DFS v i s i t (v ) ; color (u):= black ; time:=time+1; f (u):= time ;.

1.3. VISITA DEI GRAFI 11 1.3.3 Applicazioni della DFS Topological sort Applicato ad un grafo diretto e aciclico il Topological Sort ci consente di ordinare i nodi di un grafo G in modo che se G contiene un arco w v allora w appare prima di v. Il Topological Sort consiste nell applicare al grafo la DFS e poi nell ordinare in modo decrescente i nodi in base ai tempi finali. Strongly Connected Components (SCC) SCC 5 è il massimo insieme di nodi tali che coppia di nodi (u, v) un cammino da u a v e uno da v a u. La ricerca delle SCC si basa sul grafo trasposto 6. Si calcola la DFS del grafo e si tiene traccia dei tempi finali, quindi si calcola il grafo trasposto e si applica la DFS al grafo trasposto parto dai nodi che hanno avuto f(x) maggiore nella DFS del grafo diretto. L insieme degli alberi della DFS appena calcolata ci ritorna le componenti fortemente connesse (SCC). 5 Scc: in italiano componenti fortemente connesse. 6 Grafo trasposto di un grafo diretto: grafo diretto in cui gli archi sono invertiti rispetto al grafo originale.

12 CAPITOLO 1. GRAFI 1.3.4 Algoritmo di Dijkstra Formulato da Edsger W. Dijkstra nel 1959 questo algoritmo consente di trovare l albero dei cammini minimi in un grafo diretto pesato. Un grafo diretto pesato è un grafo orientato 7 in cui gli archi hanno un valore (chiamato peso) tale per cui w 5 v significa che per andare da w a v spo 5. Lega: s: nodo di partenza. d(x): distanza di x da S. P(x): padre di x. Q: coda con priorità basata sulle distanze. S: insieme dei nodi analizzati. Adj: lista di adiacenza del grafo. Dijkstra (G[ ], s ) for each vertex in G[ ] do d( vertex ):= i n f i n i t y ; P( vertex ):=NIL ; d( s ):=0; S:=VOID; Q:= Vertex of (G[ ] ) ; while Q<>EMPTY do u:=extractmin (Q) ; i n s e r t i n S (u ) ; for each v in Adj(u) do if d(v)>d(u)+weight (u, v) then d(v):=d(u)+weight (u, v ) ; P(v):=u ;. 7 Grafo orientato: grafo i cui archi hanno un verso.

1.4. CICLI EULERIANI E HAMILTONIANI 13 1.4 Cicli Euleriani e Hamiltoniani 1.4.1 Cicli Euleriani Ciclo Euleriano: percorso chiuso 8 in cui si passa una sola volta per ogni arco del grafo. Formulato per la prima volta da Eulero (Leonhard Euler 1707-1783) in relazione al problema dei ponti di Königsberg. Affinché ci sia un ciclo euleriano all interno di un grafo occorre che tutti i vertici abbiano un numero pari di archi entranti. Per determinare un ciclo euleriano in un grafo si procede così: 1. Si calcolano le valenze. Se le valenze 9 sono dispari non ci possono essere cicli Euleriani. 2. Parto da un nodo a caso si costruisce un ciclo segnando di volta in volta in maniera incrementale gli archi su cui si passa. 3. Se il ciclo ha toccato tutti gli archi allora si ha un ciclo euleriano altrimenti si cerca un altro ciclo parto da un altro nodo (ricordandosi su quali archi si è già stati). 4. Si assemblano i cicli parziali otteno così un ciclo euleriano. 1.4.2 Cicli Hamiltoniani Ciclo Hamiltoniano: percorso chiuso in cui si passa una sola volta in ogni vertice del grafo. Formulato per la prima volta da Sir William R. Hamilton (1805-1865) nel 1856. Sir Hamilton proponeva di trovare un cammino che toccasse tutti i vertici di un dodecaedro una volta sola. A differenza del problema dei cicli euleriani, il problema dei cicli hamiltoniani non ha una soluzione trattabile. Figura 1.3: Ciclo Hamiltoniano nel Dodecaedro. 8 Percorso chiuso: percorso in cui si parte da un nodo e si ritorna a quel nodo. 9 Valenza: numero di archi entranti in un nodo.

14 CAPITOLO 1. GRAFI

Capitolo 2 Alberi 2.1 Definizione Un albero è un grafo aciclico in cui ogni nodo ha un arco entrante ad eccezione della radice. Un albero binario è un albero in cui ogni genitore ha al massimo due figli. Corollario: un albero k-ario è un albero in cui ogni genitore ha al massimo k figli. Un albero si dice completo quando sono presenti il massimo numero di nodi possibili. Figura 2.1: Albero binario di livello 1 completo. 15

16 CAPITOLO 2. ALBERI 2.2 Implementazione P: puntatore al padre. k: chiave. l: puntatore al figlio sinistro. r: puntatore al figlio destro. P k l r Nota: negli alberi k-ari il puntatore r diventa il puntatore al fratello. Figura 2.2: Rappresentazione di un albero binario tramite strutture.

2.3. VISITA DEGLI ALBERI 17 2.3 Visita degli alberi Visita simmetrica simvis (ˆx) i f x<>nil then simvis ( l e f t (x ) ) ; write( key (x ) ) ; simvis ( right (x ) ) ;. Visita anticipata previs (ˆx) i f x<>nil then write( key (x ) ) ; previs ( l e f t (x ) ) ; previs ( right (x ) ) ;. Visita posticipata postvis (ˆx) i f x<>nil then postvis ( right (x ) ) ; write( key (x ) ) ; postvis ( l e f t (x ) ) ;.

18 CAPITOLO 2. ALBERI 2.4 Heaps (cataste). Una catasta è un albero binario in cui vige la regola dove: i è un nodo dell albero. l è il figlio sinistro del nodo. r è il figlio destro del nodo. i max(l, r) In una catasta il nodo radice è il nodo che ha il valore più alto (tale proprietà delle cataste è sfruttata nell heapsort). Figura 2.3: Heap (catasta).