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