Presentation is loading. Please wait.

Presentation is loading. Please wait.

Two basic algorithms for path searching in a graph Telerik Algo Academy Graph Algorithms.

Similar presentations


Presentation on theme: "Two basic algorithms for path searching in a graph Telerik Algo Academy Graph Algorithms."— Presentation transcript:

1 Two basic algorithms for path searching in a graph Telerik Algo Academy http://academy.telerik.com Graph Algorithms

2  Relaxing of edges and paths  Negative Edge Weights  Negative Cycles  Bellman-Ford algorithm  Description  Pseudo code  Floyd-Warshall algorithm  Description  Pseudo code 2

3

4  Edge relaxation : Test whether traveling along a given edge gives a new shortest path to its destination vertex  Path relaxation: Test whether traveling through a given vertex gives a new shortest path connecting two other given vertices if dist[v] > dist[u] + w dist[v] = dist[u] + w dist[v] = dist[u] + w 2 5 2 7 4 2 + 2 = 4 2 + 5 = 7 4 -1 = 3 3

5

6  Negative edges & Negative cycles  A cycle whose edges sum to a negative value  Cannot produce a correct "shortest path" answer if a negative cycle is reachable from the source S 2 -3-2 1 3 25 2 0 0 3

7

8  Based on dynamic programming approach  Shortest paths from a single source vertex to all other vertices in a weighted graph  Slower than other algorithms but more flexible, can work with negative weight edges  Finds negative weight cycles in a graph  Worst case performance O(V·E) 8

9 9 //Step 1: initialize graph for each vertex v in vertices if v is source then dist[v] = 0 if v is source then dist[v] = 0 else dist[v] = infinity else dist[v] = infinity //Step 2: relax edges repeatedly for i = 1 to i = vertices-1 for each edge (u, v, w) in edges for each edge (u, v, w) in edges if dist[v] > dist[u] + w if dist[v] > dist[u] + w dist[v] = dist[u] + w dist[v] = dist[u] + w //Step 3: check for negative-weight cycles for each edge (u, v, w) in edges if dist[v] > dist[u] + w if dist[v] > dist[u] + w error "Graph contains a negative-weight cycle" error "Graph contains a negative-weight cycle"

10 10 Bellman-Ford AlgorithmBellman-Ford Algorithm Live Demo A 1 0 5 B CD 2 3 E -3 2 4 ∞ ∞ ∞∞

11  Flexibility  Optimizations http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm  Disadvantages  Does not scale well  Count to infinity (if node is unreachabel)  Changes of network topology are not reflected quickly (node-by-node) 11 for i = 1 to i = n for each edge (u, v, w) in edges for each edge (u, v, w) in edges if dist[v] > dist[u] + w if dist[v] > dist[u] + w dist[v] = dist[u] + w dist[v] = dist[u] + w

12

13  Based on dynamic programming approach  All shortest paths through the graph between each pair of vertices  Positive and negative edges  Only lengths  No details about the path  Worst case performance: O(V 3 ) 13

14 14 let dist be a |V| × |V| array of minimum distances initialized to ∞ (infinity) for each vertex v dist[v][v] == 0 dist[v][v] == 0 for each edge (u,v) dist[u][v] = w(u,v) // the weight of the edge (u,v) dist[u][v] = w(u,v) // the weight of the edge (u,v) for k = 1 to k = |V| for i = 1 to i = |V| for i = 1 to i = |V| for j = 1 to j = |V| for j = 1 to j = |V| if (dist[i][j] > dist[i][k] + dist[k][j]) if (dist[i][j] > dist[i][k] + dist[k][j]) dist[i][j] = dist[i][k] + dist[k][j] dist[i][j] = dist[i][k] + dist[k][j]

15 15 Floyd-Warshall AlgorithmFloyd-Warshall Algorithm Live Demo A -4 1 1 4 B D C 1 2

16 форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране http://algoacademy.telerik.com

17  Negative weights  http://www.informit.com/articles/article.aspx?p=1695 75&seqNum=8 http://www.informit.com/articles/article.aspx?p=1695 75&seqNum=8 http://www.informit.com/articles/article.aspx?p=1695 75&seqNum=8  MIT Lecture and Proof  http://videolectures.net/mit6046jf05_demaine_lec18/ http://videolectures.net/mit6046jf05_demaine_lec18/  Optimizations  fhttp://en.wikipedia.org/wiki/Bellman%E2%80%93Fo rd_algorithmy fhttp://en.wikipedia.org/wiki/Bellman%E2%80%93Fo rd_algorithmy fhttp://en.wikipedia.org/wiki/Bellman%E2%80%93Fo rd_algorithmy

18  “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


Download ppt "Two basic algorithms for path searching in a graph Telerik Algo Academy Graph Algorithms."

Similar presentations


Ads by Google