Object-Oriented Programming

Download Report

Transcript Object-Oriented Programming

Algorithms
Bellman-Ford and Floyd
Two basic algorithms for path searching in a graph
Evlogi Hristov
Student at Telerik Academy
Telerik Corporation
Table of Contents
1.
Relaxing of edges and paths
2.
Negative Edge Weights
3.
Negative Cycles
4.
Bellman-Ford algorithm
 Description
 Pseudo code
5.
Floyd-Warshall algorithm
 Description
 Pseudo code
2
Relaxing Edges
Relaxing Edges
 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
2+2=4
if dist[v] > dist[u] + w
dist[v] = dist[u] + w
2
2
4
-1
4 -1 = 3
37
5
2+5=7
Negative Edges and Cycles
Negative Edges and Cycles
 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
-2
S
2
2
0
0
2
3
-3
35
1
Bellman-Ford
Algorithm
Bellman-Ford
 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
Bellman-Ford (2)
//Step 1: initialize graph
for each vertex v in vertices
if v is source then dist[v] = 0
else dist[v] = infinity
//Step 2: relax edges repeatedly
for i = 1 to i = vertices-1
for each edge (u, v, w) in edges
if 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
error "Graph contains a negative-weight cycle"
9
Bellman-Ford Algorithm
Live Demo
∞
-1
0
B
∞
2
E
A
2
3
1
-3
4
C
∞
5
D
∞
10
Bellman-Ford (3)
 Flexibility
n
for i = 1 to i =
for each edge (u, v, w) in edges
if dist[v] > dist[u] + w
dist[v] = dist[u] + w
 Optimizations
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
Floyd-Warshall
Algorithm
Floyd-Warshall
 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
Floyd-Warshall (2)
let dist be a |V| × |V| array of minimum distances
initialized to ∞ (infinity)
for each vertex v
dist[v][v] == 0
for each 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 j = 1 to j = |V|
if (dist[i][j] > dist[i][k] + dist[k][j])
dist[i][j] = dist[i][k] + dist[k][j]
14
Floyd-Warshall Algorithm
Live Demo
B
-4
2
A
1
1
1
D
C
4
15
Bellman-Ford
курсове и уроци по програмиране, уеб дизайн – безплатно
курсове и уроци по програмиране – Телерик академия
уроци по програмиране и уеб дизайн за ученици
програмиране за деца – безплатни курсове и уроци
безплатен SEO курс - оптимизация за търсачки
курсове и уроци по програмиране, книги – безплатно от Наков
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
free C# book, безплатна книга C#, книга Java, книга C#
безплатен курс "Качествен програмен код"
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
форум програмиране, форум уеб дизайн
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET
ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
алго академия – състезателно програмиране, състезания
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
Дончо Минков - сайт за програмиране
Николай Костов - блог за програмиране
C# курс, програмиране, безплатно
http://algoacademy.telerik.com
Links for more information
 Negative


http://www.informit.com/articles/article.aspx?p=1695
75&seqNum=8
MIT Lecture and Proof


weights
http://videolectures.net/mit6046jf05_demaine_lec18/
Optimizations

fhttp://en.wikipedia.org/wiki/Bellman%E2%80%93Fo
rd_algorithmy
Free Trainings @ Telerik Academy
 “C# Programming @ Telerik Academy


Telerik Software Academy


academy.telerik.com
Telerik Academy @ Facebook


csharpfundamentals.telerik.com
facebook.com/TelerikAcademy
Telerik Software Academy Forums

forums.academy.telerik.com