A list of graph algorithms :
Minimum spanning trees: The generic minimum spanning tree algorithm
grows a minimum spanning tree from an
undirected graph G= (V,E) with a weight function w by using a greedy approach
to the problem. It grows the MST by adding one edge at a time that is safe for
the MST. At each step of the iteration the the set of edges maintained, say A,
is a subset of the minimum spanning tree. If (S, V-S) is a cut in the graph
respecting A and there is a light edge (u,v) crossing the cut then that light
edge is safe for A.
Kruskal and Prim algorithm: These algorithms are
elaborations of the greedy generic algorithm mentioned above. In Kruskal’s
algorithm the set A is a forest. An edge that connects any two trees in the
forest and has least weight is added as a safe edge. Kruskal’s algorithm sorts the edges of E into
a non-decreasing order by weight w. For each edge (u,v) belonging to E, taken
in non-decreasing order by weight, if the set that u belongs to is different
from the set v belongs to then the edge connecting (u,v) is added to the graph.
In Prim’s algorithm, the set A forms a single tree. A light
edge crossing the cut that is safe for the tree is added. The algorithm
maintains a min priority queue Q to contain all the vertices. For each vertex
extracted from this queue, it adds the edge connecting vertices adjacent to the
extracted vertex whose weight is minimum and updates the parent and the key.
Bellman Ford algorithm: This algorithm solves the single
source shortest path problem even for edges with negative weights. It checks
whether there is a negative weight cycle that is reachable from the source and
returns false otherwise it returns the shortest path and their weights. The
algorithm uses relaxation progressively decreasing an estimate d[v] on the
weight of the shortest path s to each vertex v until it achieves the actual
shortest path weight.
Dijkstra’s algorithm: This algorithm solves the single
source shortest path problem for edges that have non-negative weights. It
maintains a min priority queue of vertices, keyed by their d-values and it
extracts each vertex from the queue, it relaxes the edges connecting to the
adjacent vertices.
Floyd-Warshall algorithm: This algorithm computes the
shortest path weights in a bottom-up manner. It exploits the relationship
between a pair of intermediary vertices and the shortest paths that pass
through them. If there is no intermediary vertex, then such a path has at most
one edge and the weight of the edge is the minimum. Otherwise, the minimum
weight is the minimum of the path from I to j or the path from I to k and k to
j. Thus this algorithm iterates for each of the intermediary vertices for each
of the given input of an N*N matrix to compute the shortest path weight.
Johnson’s algorithm: This algorithm finds the shortest path
between all pairs in shortest and it has better time complexity than Floyd
Warshall even for sparse graphs. It uses both subroutines from both
Bellman-Ford algorithm and Dijkstra’s
algorithms to report that there is a negative weight cycle or a matrix of the
shortest paths weights for all pairs of vertices. It uses the technique of
reweighting which works as follows: If all the edges are non-negative, it uses
Dijkstra’s algorithm iteratively from each vertex. If the edges have negative
weights but no negative weight cycle, it transforms the graph into a one with
non-negative weights and then applies the previous step.
Ford Fulkerson method: This method is based on residual networks (one that can admit more flows), augmenting paths, and cuts. The method is iterative : It starts with f(u,v) = 0 for all (u,v) belongs to V giving an initial flow of value 0 from the source s to the sink t along which we can send more flow, and then augmenting the flow along this path.
Ford Fulkerson method: This method is based on residual networks (one that can admit more flows), augmenting paths, and cuts. The method is iterative : It starts with f(u,v) = 0 for all (u,v) belongs to V giving an initial flow of value 0 from the source s to the sink t along which we can send more flow, and then augmenting the flow along this path.
No comments:
Post a Comment