COMPLEMENTI DI SHORTEST-PATH. ASD Fabrizio d'amore

Похожие документы
Problema del cammino minimo

Algoritmi e strutture dati

Cammini minimi in grafi:

Cammini Minimi. Algoritmo di Dijkstra

Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati

Grafi (orientati): cammini minimi

Cammini minimi fra tutte le coppie

Algoritmi e Strutture Dati

11.4 Chiusura transitiva

Grafi pesati Minimo albero ricoprente

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Algoritmi e Strutture Dati

Esempi. non. orientato. orientato

Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)

Ottimizzazione nella Gestione dei Progetti - Esercitazione 1: calcolo degli schedule ottimi

Visite in Grafi BFS e DFS

Problemi, istanze, soluzioni

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Introduzione. Il routing permette la comunicazione tra due nodi differenti anche se non sono collegati direttamente

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014

Algoritmi e Strutture Dati

Grafi: definizioni e visite

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Progettazione di Algoritmi

ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I

Esercizio 1. Esercizio 2

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

Algoritmi e Strutture Dati Grafi. Daniele Loiacono

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Introduzione ai grafi

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Quarto allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Terzo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Minimo albero di copertura

Alberi di copertura. Mauro Passacantando. Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa

Progettazione di Algoritmi

Progettazione di Algoritmi

Ottimizzazione su grafi: massimo flusso (parte 1) Ottimizzazione su grafi:massimo flusso (parte 1) p. 1/33

Algoritmo basato su cancellazione di cicli

Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità

Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi

L algoritmo di Dijkstra

RETI DI CALCOLATORI II

Algoritmi distribuiti su reti sincrone. Introduzione alle reti sincrone

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

4c. Esercizi sul livello di Rete Instradamento in Internet

Progettazione di algoritmi

Routing. Forwarding e routing

Algoritmi e Strutture Dati

Routing IP. IP routing

Esame di Ricerca Operativa del 11/07/2016

Algoritmi Approssimanti per -TSP

Progettazione di algoritmi

Grafi: visita generica

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

Parte II - Reti di Calcolatori ed Internet IL LIVELLO RETE

Algoritmi e Strutture di Dati (3 a Ed.) Algoritmo dei tre indiani. Alan Bertossi, Alberto Montresor

Algoritmi e protocolli di Routing

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

Strato di rete (parte 3) Funzione di instradamento: generalità

Esame di Ricerca Operativa del 15/01/2015

Esame di Ricerca Operativa del 15/01/2015

Possibile applicazione

Esame di Ricerca Operativa del 16/06/2015

Routing. Parte prima

ALGORITMI CORSO DI STUDIO IN INFORMATICA (laurea triennale) UNIVERSITÀ DEGLI STUDI DI CATANIA ANNO ACCADEMICO 2014/15

Esame di Ricerca Operativa del 07/09/2016

Esame di Ricerca Operativa del 03/09/2015

Algoritmi e Strutture dati a.a. 2012/2013

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Modelli decisionali su grafi - Problemi di Localizzazione

Esercizi proposti 10

Fondamenti di Internet e Reti

Транскрипт:

COMPLEMENTI DI SHORTEST-PATH ASD 2016-17 Fabrizio d'amore

problemi di shortest-path (SP) grafo di riferimento G=(V,E) semplice/orientato pesato pesi non negativi pesi arbitrari, ma no cicli a peso negativo nessuna restrizione non pesato problemi SP SP(G, u, v) (shortest-path in G, da u a v) SSSP(G, s) (determinare shortest-path tree radicato in s) APSP(G) (determinare uno shortest-path per ogni coppia (u,v) V 2 ) maggio 2017 complementi di shortest-path 2

grafi non pesati algoritmo può essere basato su BFS non è necessario costruire le liste L i dei nodi a distanza i dalla sorgente (SSSP) BFS(G,s) costruisce SP-tree radicato in s, descritto dai pred nel caso di SP semplice (da u a v) si può eseguire una variante BFS(G, u, v) che continua fino all'inserimento di v nella coda, quindi termina utilizzabile su grafi semplici e orientati incidentedges deve restituire gli archi uscenti, nel caso di grafi orientati BFS(Graph G) forall v V(G) v.label=unexplored forall e E(G) e.label=unexplored forall v V(G) if(v.label==unexplored) BFS(G,v) BFS(Graph G, Vertex v) Q = new empty queue() v.pred=0 v.label=visited Q.insert(v) while(!q.isempty()) w=q.dequeue() forall e w.incidentedges() if(e,label==unexplored) x=e.opposite(w) if(x.label==unexplored) x.pred=w e.label=tree x.label=visited Q.enqueue(x) else e.label=cross maggio 2017 complementi di shortest-path 3

estrazione path da etichette terminata la visita, lo SP da u a v può essere così restituito path = new empty list() p = v while(p!= 0) path.addfirst(p) p = p.pred return path maggio 2017 complementi di shortest-path 4

SP e SSSP su grafi pesati (pesi non negativi) Dijkstra sia per grafi semplici che orientati basato su rilassamento di archi prev descrive SP-tree nel caso di SP da source a dest si può usare la variante che termina quando si estrae dest dallo heap la ricostruzione dello SP può avvenire come nella slide precedente Dijkstra(Graph G, Vertes source) dist[source]=0 prev[source]=0 H=new empty min-heap() forall v V(G) if(v!=source) dist[v]=infinity prev[v]=undefined H.add(v, dist[v]) while(!h.isempty()) u=h.extractmin() forall neighbor v of u (s.t. v H) alt=dist[u]+weight(u, v) if(alt<dist[v]) dist[v]=alt prev[v]=u H.decreasePriority(v, alt) return dist[], prev[] maggio 2017 complementi di shortest-path 5

SSSP con pesi arbitrari (no cicli a costo < 0) Algoritmo di Bellman-Ford Anch'esso basato su rilassamento di archi, ma non usa heap tenta tutti i possibili rilassamenti n-1 volte (perché lo SP con il maggior numero di archi ne avrà al più n-1) a iterazione i del for, algoritmo trova SP di al più i archi ciclo finale: per verificare se esiste SP di lunghezza n, il che denuncia un ciclo di peso negativo Costo: ϴ(mn) ciclo for su tutti i nodi che contiene ciclo for su tutti gli archi Se in una iterazione non si rilassano archi l'algoritmo può terminare Se ne usa una versione distribuita per implementare protocolli di routing (RIP) BellmanFord(Grapg G, Vertex source) forall v V(G) dist[v]=infinite pred[v]=null dist[source]=0 for i from 1 to V(G) -1 forall (u,v) E(G) w=weight(u,v) if(dist[u]+w<dist[v]) dist[v]=dist[u]+w pred[v]=u forall (u,v) E(G) w=weight(u,v) if(dist[u]+w<dist[v]) error "Graph contains negative-weight cycle" return dist[], pred[] maggio 2017 complementi di shortest-path 6

APSP pesi arbitrari (no cicli < 0) Algoritmo di Floyd-Warshall, simile a quello per la chiusura transitiva Valido per grafi semplici e orientati Basato su programmazione dinamica Alla fine dell'algoritmo La mastrice dist contiene le distanze fra le coppie di vertici La matrice next contiene nella cella [i][j] l'indice del nodo successore di i, nello SP da i a j L'algoritmo Path ricostruisce dalla matrice next lo SP da u a v Costo (evidente): ϴ(n 3 ) FloydWarshall(Graph G) dist = new n n matrix of distances // (all infinite) next = new n n matrix of vertex indices // (all zeros) forall (u,v) E(G) dist[u][v]=w(u,v) next[u][v]=v for k from 1 to n for i from 1 to n for j from 1 to n if(dist[i][j]>dist[i][k]+dist[k][j]) dist[i][j]=dist[i][k]+dist[k][j] next[i][j]=next[i][k] Path(Vertex u, Vertex v) if(next[u][v]==0) return [] path=[u] while(u!=v) u=next[u][v] path.append(u) return path maggio 2017 complementi di shortest-path 7