1 / 9

Algoritmi sui grafi

Algoritmi sui grafi. Ordinamento topologico Cammino minimo dalla sorgente. Ordinamento topologico. Dato un grafo finito orientato aciclico G =  V , A , un ordinamento topologico di G consiste in una permutazione v 1 ,…, v n di V tale che: ( v i , v j )  A  i  j .

fifi
Download Presentation

Algoritmi sui grafi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmi sui grafi Ordinamento topologico Cammino minimo dalla sorgente

  2. Ordinamento topologico Dato un grafo finito orientato aciclico G = V, A, un ordinamento topologico di G consiste in una permutazionev1,…,vn di V tale che: (vi, vj)  A i j. Esempio: G 1 2 1, 3, 2, 4 è un ordinamento topologico di G; 1, 2, 4, 3 non lo è perché (3,2)  A mentre 3 segue 2 in questa permutazione. 3 4

  3. Visita in profondità rivista DFS (G = V,A) foreach v  V // inizializza i colori Color[v] := White; Time[v] := indef; time := 0; // variabile globale foreach u  V // itera la visita in prof. if Color[u] =White then DFS-Visit(u) DFS-Visit (u) Color[u] := Gray; time := time + 1; foreach v  Adj[u] if Color[v] = White then DFS-Visit(v); Color[u] := Black; Time[u] := time; time := time + 1;

  4. Tempi e precedenze • Teorema. Sia G = V, A un grafo orientato aciclico. • Se (u,v)  A, conu  v, allora dopo DFS(G) Time[u] > Time[v]. • Dim. P.a. sia (u,v)  A tale che Time[u] < Time[v]. • Allora al tempo t = Time[u] si ha • Color[u] = Black, Color[v] = White  Color[v] = Gray. • Color[v] = White è impossibile perché, se (u,v)  A allora la visita di u non è completa (e quindi u non avrebbe potuto diventare nero al tempo t); • Color[v] = Gray: allora esiste t< t tale che si abbia: • al tempo t Color[u] = White  Color[v] = Gray, • al tempo t + 1 Color[u] = Color[v] = Gray. • Quindi esiste in G un cammino da v ad u (per la struttura della frontiera in DFS-Visit); ma allora (u,v)  A implica che G sia ciclico. • 

  5. Topological Sorting (TS) TS (Graph G = (V,A)) foreach v  V // inizializza i colori Color[v] := White; l := NIL; // lista di vertici (globale) foreach u  V // itera la visita in prof. if Color[u] =White then DFS-Visit-List(u) return l; DFS-Visit-List (Vertex u) Color[u] := Gray; foreach v  Adj[u] if Color[v] = White then DFS-Visit(v); Color[u] := Black; l := Cons(u,l); // se u precede v in l allora // Time[u] > Time[v] in DFS(G)

  6. Cammini minimi Dato un grafo orientato pesato G = V, A, w (w:A funzione peso), ed un cammino  = (v0, v1), … , (vk-1, vk) in G (not. v0vk), si definisce il peso di  come la somma dei pesi degli archi: Problema del cammino minimo da sorgente singola. Dato G orientato e pesato ed un vertice s, per ogni vertice v determinare un cammino  tale che s v e w*() = (s,v), dove: Nolta: w*() = 0 ( è il cammino vuoto), dunque (v,v) = 0 per ogni v.

  7. Algoritmo di Dijkstra E’ una tecnica greedy basata sulla definizione di un confine superiore d[v] a (s,v) per ogni v, che viene progressivamente migliorato. Dijkstra(Graph G = (V,A), Vertex s) foreach v  V do d[v] := ; d[s] := 0; q := EmptyPriorityQueue (); // la priorita’ di ogni v in q e’ d[v] foreach v  V do Enqueue(v,q); whilenot IsEmptyQueue(q) do u := DequeueMin(q); foreach v  Adj[u] do if d[v] > d[u] + w(u,v) then d[v] := d[u] + w(u,v); RedefinePrior(v,d[v],q); return d; coda con estrazione del minimo rilassamento assegna priorità d[v] al vertce v in q

  8. Osservazioni • Nell’algoritmo di Dijkstra: • si presuppone che il grafo abbia pesi non negativi oppure che sia aciclico; • si mantiene una partizione tra vertici visitati e non (v è stato visitato se • e solo se d[v]  ); • la priorità di un vertice v in q è d[v] ; • l’invariante del ciclo principale è: • se v è stato visitato, allora d[v] = (s,v) • dove (s,v) è il valore di (s,v) nel sottografo formato dai vertici visitati e • dagli archi i cui estremi siano stati visitati.

  9. Fine

More Related