Presentation on theme: "Shortest paths in edge-weighted digraph Krasin Georgiev Technical University of Sofia g.krasin at gmail com Assistant Professor."— Presentation transcript:
Shortest paths in edge-weighted digraph Krasin Georgiev Technical University of Sofia g.krasin at gmail com Assistant Professor
1. Background 2. The problem 3. Properties and assumptions 4. Applications 5. Dijkstra's algorithm and Pseudocode 6. C# Demo 7. Related problems and algorithms 8. Resources 2
Let be a (di)graph. Let G=(V,E) be a (di)graph. In directed graphs, edges are one-way An edge-weighted graph is a graph where we associate weights or costs with each edge (or other attributes). A shortest path from vertex s to vertex t is a directed path from s to t with the property that no other such path has a lower weight. 3
Single-Source Shortest Path Problem Find the shortest paths from a source vertex to all other vertices in the graph 4
Paths are directed. The weights are not necessarily distances (could be time or cost). Edge weights are positive (or zero) Shortest paths are not necessarily unique Not all vertices need be reachable Parallel edges may be present 5
ApplicationVertexEdgeSolutions MapIntersectionRoadFind the shortest route Find the fastest route Find the best route NetworkRouterConnectionInternet routing Flight AgendaAirportsFlightsFind earliest time to reach destination EpidemiologyIndividualsPossible contactsModel the spread of infectious diseases ArbitrageCurrencyExchange rate 6
7 Dijkstra's algorithm first initiates all vertex distances with preliminary values and puts all vertexes in a priority queue. Then picks the unvisited vertex with the lowest-distance, calculates the distance through it to each unvisited neighbor, and updates the neighbor's distance if smaller. Mark visited when done with neighbors.
function Dijkstra(Graph, source): for each vertex v in Graph: // Initializations for each vertex v in Graph: // Initializations dist[v] := infinity ; // Unknown distance function from dist[v] := infinity ; // Unknown distance function from // source to v // source to v previous[v] := undefined ; // Previous node in optimal path previous[v] := undefined ; // Previous node in optimal path end for // from source end for // from source dist[source] := 0 ; // Distance from source to source dist[source] := 0 ; // Distance from source to source Q := the set of all nodes in Graph ; // All nodes in the graph are put in a Q := the set of all nodes in Graph ; // All nodes in the graph are put in a // Priority Queue Q // Priority Queue Q while Q is not empty: // The main loop while Q is not empty: // The main loop u := vertex in Q with smallest distance in dist ; // Start node in first case u := vertex in Q with smallest distance in dist ; // Start node in first case remove u from Q ; remove u from Q ; if dist[u] = infinity: if dist[u] = infinity: break ; // all remaining vertices are break ; // all remaining vertices are end if // inaccessible from source end if // inaccessible from source for each neighbor v of u in Q: // where v has not yet been for each neighbor v of u in Q: // where v has not yet been // removed from Q. // removed from Q. alt := dist[u] + dist_between(u, v) ; alt := dist[u] + dist_between(u, v) ; if alt < dist[v]: // Relax (u,v,a) if alt < dist[v]: // Relax (u,v,a) dist[v] := alt ; dist[v] := alt ; previous[v] := u ; previous[v] := u ; decrease-key v in Q; // Reorder v in the Queue decrease-key v in Q; // Reorder v in the Queue end if end if end for end for end while end while return dist; 10
We can solve different problems using modified Dijkstra algorithm elements: Graph –vertices, edges and weights meanings Distance – definition Priority Queue Relaxation and Distance Initialization 12
Dijkstra algorithm is based on the following Lemmas: Shortest paths are composed of shortest paths. It is based on the fact that if there was a shorter path than any sub-path, then the shorter path should replace that sub-path to make the whole path shorter. The sum of the lengths of any two sides of a triangle is greater than the length of the third side. 13
Analysis of Dijkstra’s Algorithm: The initialization uses only O(n) time. Each vertex is processed exactly once. The inner loop is called once for each edge in the graph. Each call of the inner loop does O(1) work plus, possibly, one Decrease-Key operation. All of the priority queue operations require time Finally and we get time If unsorted sequence is used instead of priority queue we get O(n 2 + e) 14
Breadth-first search - special-case of Dijkstra's algorithm on unweighted graphs when all edge costs are positive and identical. The priority queue degenerates into a FIFO queue. Uniform-cost search - the shortest path to a particular node The A* algorithm - generalization of Dijkstra's algorithm that cuts down on the size of the subgraph that must be explored, if additional information is available that provides a lower bound on the "distance" to the target. 15
“C# Programming @ Telerik Academy csharpfundamentals.telerik.com csharpfundamentals.telerik.com Telerik Software Academy academy.telerik.com academy.telerik.com Telerik Academy @ Facebook facebook.com/TelerikAcademy facebook.com/TelerikAcademy Telerik Software Academy Forums forums.academy.telerik.com forums.academy.telerik.com
Your consent to our cookies if you continue to use this website.