Dynamic Programming and Graph Algorithms
Dynamic Programming and Graph Algorithms
com )
UNIT-3
DYNAMIC PROGRAMMING
DYNAMIC PROGRAMING
The idea of dynamic programming is thus quit simple: avoid calculating the same thing
twice, usually by keeping a table of known result that fills up a sub instances are solved.
When a problem is solved by divide and conquer, we immediately attack the complete
instance, which we then divide into smaller and smaller sub-instances as the algorithm
progresses.
We usually start with the smallest and hence the simplest sub- instances.
The essential difference between the greedy method and dynamic programming is that the
greedy method only one decision sequence is ever generated.
Let G=<N,A> be a directed graph ’N’ is a set of nodes and ‘A’ is the set of edges.
We want to calculate the length of the shortest path between each pair of nodes.
1
Design and Analysis of Algorithm ( [Link] )
The principle of optimality applies: if k is the node on the shortest path from i to j then
the part of the path from i to k and the part from k to j must also be optimal, that is
shorter.
Copy the above matrix-to-matrix D, which will give the direct distance between nodes.
We have to perform N iteration after iteration [Link] matrix D will give you the distance
between nodes with only (1,2...,k)as intermediate nodes.
At the iteration k, we have to check for each pair of nodes (i,j) whether or not there exists
a path from i to j passing through node k.
D0 =L= 0 5
50 0 15 5
30 0 15
15 5 0
1 75 11 12 - -
2 72 21 - - 24
3 3 - 32 - -
4 41 41 – 43 -
vertex 1:
7 5 11 12 - -
7 12 2 21 212 - 24
3 - 32 - -
4 9 1 41 412 43 –
vertex 2:
7 5 7 11 12 - 124
7 12 2 21 212 - 24
10 3 5 321 32 - 324
2
Design and Analysis of Algorithm ( [Link] )
4 9 1 11 41 412 43 4124
vertex 3:
7 5 7 11 12 - 124
7 12 2 21 212 - 24
10 3 5 321 32 - 324
4 4 1 6 41 432 43 4324
vertex 4:
7 5 8 7 11 12 1243 124
6 6 3 2 241 2432 243 24
9 3 6 5 3241 32 3243 324
4 4 1 6 41 432 43 4324
D0= 0 5
50 0 15 5
30 0 15
15 5 0
0 5
50 0 15 5 p[3,2]= 1
D1= 30 35 0 15 p[4,2]= 1
15 20 5 0
15
30
5
5 50 5 15
3
Design and Analysis of Algorithm ( [Link] )
15
0 5 20 10 P[1,3] = 2
D2= 50 0 15 5 P[1,4] = 2
30 35 0 15
15 20 5 0
0 5 20 10
D3= 45 0 15 5 P[2,1]=3
30 35 0 15
15 20 5 0
0 5 15 10
20 0 10 5 P[1,3]=4
D4= 30 35 0 15 P[2,3]=4
15 20 5 0
0042
3040 0 direct path
P= 0100
0100
4
Design and Analysis of Algorithm ( [Link] )
ALGORITHM :
D=L
For k = 1 to n do
For i = 1 to n do
For j = 1 to n do
D [ i , j ] = min (D[ i, j ], D[ i, k ] + D[ k, j ]
Return D
ANALYSIS:
MULTISTAGE GRAPH
1. A multistage graph G = (V,E) is a directed graph in which the vertices are portioned
into K > = 2 disjoint sets Vi, 1 <= i<= k.
2. In addition, if < u,v > is an edge in E, then u < = Vi and V Vi+1 for some i, 1<= i < k.
3. If there will be only one vertex, then the sets Vi and Vk are such that [Vi]=[Vk] = 1.
4. Let ‘s’ and ‘t’ be the source and destination respectively.
5. The cost of a path from source (s) to destination (t) is the sum of the costs of the edger
on the path.
6. The MULTISTAGE GRAPH problem is to find a minimum cost path from ‘s’ to ‘t’.
7. Each set Vi defines a stage in the graph. Every path from ‘s’ to ‘t’ starts in stage-1, goes
to stage-2 then to stage-3, then to stage-4, and so on, and terminates in stage-k.
8. This MULISTAGE GRAPH problem can be solved in 2 ways.
a) Forward Method.
b) Backward Method.
FORWARD METHOD
5
Design and Analysis of Algorithm ( [Link] )
2. In this FORWARD approach, we will find out the cost of each and every node starling
from the ‘k’ th stage to the 1st stage.
3. We will find out the path (i.e.) minimum cost path from source to the destination (ie)
[ Stage-1 to Stage-k ].
PROCEDURE:
V1 V2 V3 V4 V5
4 6
2 2
5 4
9 1
4
7 3 2
7 t
s
3
11 5 5
2
11 6
Maintain a cost matrix cost (n) which stores the distance from any vertex to the
destination.
If a vertex is having more than one path, then we have to choose the minimum distance
path and the intermediate vertex, which gives the minimum distance path, will be stored
in the distance array ‘D’.
In this way we will find out the minimum cost path from each and every vertex.
Finally cost(1) will give the shortest distance from source to destination.
For finding the path, start from vertex-1 then the distance array D(1) will give the
minimum cost neighbour vertex which in turn give the next nearest vertex and proceed
in this way till we reach the Destination.
For a ‘k’ stage graph, there will be ‘k’ vertex in the path.
In the above graph V1…V5 represent the stages. This 5 stage graph can be solved by
using forward approach as follows,
6
Design and Analysis of Algorithm ( [Link] )
STEPS: - DESTINATION, D
=9
cost(3) = 9 =>D(3) = 6
cost(2) = 7 =>D(2) = 7
The path through which you have to find the shortest distance.
(i.e.)
D ( 1) = 2
D ( 2) = 7
D ( 7) = 10
D (10) = 12
9 2 3 2
P[1]=1;
P[k]=n;
For j=2 to k-1 do
P[j]=d[p[j-1]];
}
ANALYSIS:
The time complexity of this forward method is O( V + E )
BACKWARD METHOD
if there one ‘K’ stages in a graph using back ward approach. we will find out the cost of
each & every vertex starting from 1st
stage to the kth stage.
We will find out the minimum cost path from destination to source (ie)[from stage k to
stage 1]
PROCEDURE:
STEP:
9
Design and Analysis of Algorithm ( [Link] )
cost(6) = 9 =>D(6)=3
cost(7) = 11 =>D(7)=2
cost(8) = 10 =>D(8)=2
cost(9) = 15 =>D(9)=6
cost(11) = 16 =>D(11)=8
cost(12)=min(c(9,12)+cost(9),c(10,12)+cost(10),c(11,12)+cost(11))
=min(19,16,21)
cost(12) = 16 =>D(12)=10
PATH:
1 7
3 2
6 5
10 2
12
10
Design and Analysis of Algorithm ( [Link] )
P[1]=1;
P[k]=n;
For j= k-1 to 2 do
P[j]=d[p[j+1]];
}
Let G(V,E) be a directed graph with edge cost c ij is defined such that cij >0 for all i and j
and cij = ,if <i,j> E.
Let V =n and assume n>1.
The traveling salesman problem is to find a tour of minimum cost.
A tour of G is a directed cycle that include every vertex in V.
The cost of the tour is the sum of cost of the edges on the tour.
The tour is the shortest path that starts and ends at the same vertex (ie) 1.
APPLICATION :
1. Suppose we have to route a postal van to pick up mail from the mail boxes located at ‘n’
different sites.
2. An n+1 vertex graph can be used to represent the situation.
3. One vertex represent the post office from which the postal van starts and return.
4. Edge <i,j> is assigned a cost equal to the distance from site ‘i’ to site ‘j’.
5. the route taken by the postal van is a tour and we are finding a tour of minimum length.
11
Design and Analysis of Algorithm ( [Link] )
6. every tour consists of an edge <1,k> for some k V-{} and a path from vertex k to
vertex 1.
7. the path from vertex k to vertex 1 goes through each vertex in V-{1,k} exactly once.
8. the function which is used to find the path is
1. Find g(i,) =ci1, 1<=i<n, hence we can use equation(2) to obtain g(i,s) for all s to size 1.
2. That we have to start with s=1,(ie) there will be only one vertex in set ‘s’.
3. Then s=2, and we have to proceed until |s| <n-1.
4. for example consider the graph.
10
15
10
15
20 8 9 13
8 6
12
7
Cost matrix
0 10 15 20
5 0 9 10
6 13 0 12
8 8 9 0
starting position
STEP 1:
12
Design and Analysis of Algorithm ( [Link] )
g(1,{2,3,4})=min{c12+g(2{3,4}),c13+g(3,{2,4}),c14+g(4,{2,3})}
min{10+25,15+25,20+23}
min{35,35,43}
=35
STEP 2:
g(2,{3,4}) = min{c23+g(3{4}),c24+g(4,{3})}
min{9+20,10+15}
min{29,25}
=25
g(3,{2,4}) =min{c32+g(2{4}),c34+g(4,{2})}
min{13+18,12+13}
min{31,25}
=25
g(4,{2,3}) = min{c42+g(2{3}),c43+g(3,{2})}
min{8+15,9+18}
min{23,27}
=23
STEP 3:
13
Design and Analysis of Algorithm ( [Link] )
STEP 4:
g{4,} =c41 = 8
g{3,} =c31 = 6
g{2,} =c21 = 5
s = 0.
i =1 to n.
s =1
i =2 to 4
s =2
i 1, 1 s and i s.
14
Design and Analysis of Algorithm ( [Link] )
g(2,{3,4}) = min{c23+g(3{4}),c24+g(4,{3})}
min{9+20,10+15}
min{29,25}
=25
g(3,{2,4}) =min{c32+g(2{4}),c34+g(4,{2})}
min{13+18,12+13}
min{31,25}
=25
g(4,{2,3}) = min{c42+g(2{3}),c43+g(3,{2})}
min{8+15,9+18}
min{23,27}
=23
s = 3
g(1,{2,3,4})=min{c12+g(2{3,4}),c13+g(3,{2,4}),c14+g(4,{2,3})}
min{10+25,15+25,20+23}
min{35,35,43}
=35
optimal cost is 35
If we have a matrix A of size pq and B matrix of size q[Link] product of these two matrix C
is given by,
15
Design and Analysis of Algorithm ( [Link] )
For example,
A = 13 5
B = 5 89
C = 89 3
D = 3 34
M = (((A.B).C).D)
A.B C
= (13 * 5 * 89) * (89 * 3)
A.B.C. D
= (13 * 89 * 3) * (3 * 34)
A.B.C.D
= 13 * 3 * 34
(ic) = 13 * 5 * 89 + 13 * 89 * 3 + 13 * 3 * 34
= 10,582 no. of multiplications one required for that
sequence.
2nd Sequence,
M = (A * B) * (C * D)
= 13 * 5 * 89 + 89 * 3 * 34 + 13 * 89 * 34
= 54201 no. of Multiplication
3rd Sequence,
M = (A.(BC)) . D
= 5 * 89 * 3 + 13 * 5 * 3 + 13 * 3 *34
= 2856
For comparing all these sequence, (A(BC)).D sequences less no. of multiplication.
For finding the no. of multiplication directly, we are going to the Dynamic programming
method.
Our aim is to find the total no. of scalar multiplication required to compute the matrix product.
16
Design and Analysis of Algorithm ( [Link] )
In dynamic programming, we always start with the smallest instances and continue till we
reach the required size.
We build the table diagonal by diagonal; diagonal s contains the elements mij such that j-1 =s.
S =0,1,……n-1
i=1,2,……n-1.
A=>135
B=>589
C=>893
D=>334
d[0]=13
d[1]=5
d[2]=89
d[3]=3
d[4]=34
if s=0,
m(1,1)=0
m(2,2)=0
m(3,3)=0
m(4,4)=0
17
Design and Analysis of Algorithm ( [Link] )
if s=1,
if s=2,
mi,i+s =min(mik+mk+1,i+s+di-1dkdi+s)
1 2 3 4
3 0 9078 s=1
4 0 s=0
ALGORITHM:
Procedure cmatrix(n,d[0..n])
18
Design and Analysis of Algorithm ( [Link] )
This problem is similar to ordinary knapsack problem but we may not take a fraction of
an object.
We are given ‘ N ‘ object with weight Wi and profits Pi where I varies from l to N and
also a knapsack with capacity ‘ M ‘.
The problem is, we have to fill the bag with the help of ‘ N ‘ objects and the resulting
profit has to be maximum.
n
Formally, the problem can be started as, maximize Xi Pi
i=l
n
subject to Xi Wi L M
i=l
To solve the problem by dynamic programming we up a table T[1…N, 0…M] (ic) the
size is N. where ‘N’ is the no. of objects and column starts with ‘O’ to capacity (ic) ‘M’.
19
Design and Analysis of Algorithm ( [Link] )
In the table T[i,j] will be the maximum valve of the objects i varies from 1 to n and j
varies from O to M.
If i=l and j < w(i) then T(i,j) =o, (ic) o pre is filled in the table.
If i=l and j w (i) then T (i,j) = p(i), the cell is filled with the profit p[i], since only one
object can be selected to the maximum.
If i>l and j < w(i) then T(i,l) = T (i-l,j) the cell is filled the profit of previous object
since it is not possible with the current object.
If i>l and j w(i) then T (i,j) = {f(i) +T(i-l,j-w(i)),. since only ‘l’ unit can be selected to
the maximum. If is the current profit + profit of the previous object to fill the remaining
capacity of the bag.
Start with the last position of i and j, T[i,j], if T[i,j] = T[i-l,j] then no object of ‘i’ is
required so move up to T[i-l,j].
After moved, we have to check if, T[i,j]=T[i-l,j-w(i)]+ p[I], if it is equal then one unit of
object ‘i’ is selected and move up to the position T[i-l,j-w(i)]
Repeat the same process until we reach T[i,o], then there will be nothing to fill the bag
stop the process.
Consider a Example,
M = 6,
N=3
W1 = 2, W2 = 3, W3 = 4
P1 = 1, P2 =2, P3 = 5
i 1 to N
j 0 to 6
o<2 T1,o =0
20
Design and Analysis of Algorithm ( [Link] )
i=l, j=2
2 o,= T1,2 = l.
i=l, j=3
3>2,= T1,3 = l.
i=l, j=4
4>2,= T1,4 = l.
i=l, j=5
5>2,= T1,5 = l.
i=l, j=6
6>2,= T1,6 = l.
i=2, j=1
l<3= T(2,1) = T(i-l)
T 2,1 =0
GRAPH
DEFINING GRAPH:
2 3
4 21
Design and Analysis of Algorithm ( [Link] )
FIG: Graph G
UNDIRECTED GRAPH:
An undirected graph is that in which, the pair of vertices representing the edges is
unordered.
DIRECTED GRAPH:
An directed graph is that in which, each edge is an ordered pair of vertices, (i.e.)
each edge is represented by a directed pair. It is also referred to as digraph.
DIRECTED GRAPH
COMPLETE GRAPH:
An n vertex undirected graph with exactly n(n-1)/2 edges is said to be complete
graph. The graph G is said to be complete graph .
In Breadth First Search we start at a vertex ‘v’ and mark it as having been reached
(visited).
The vertex ‘v’ is at this time said to be unexplored.
A vertex is said to have been explored by an algorithm when the algorithm has visited
all vertices adjust from it.
All unvisited vertices adjust from ‘v’ are visited next. These are new unexplored
vertices.
Vertex ‘v’ has now been explored. The newly visit vertices have not been explored and
are put on the end of a list of unexplored vertices.
The first vertex on this list in the next to be explored. Exploration continues until no
unexplored vertex is left.
The list of unexplored vertices operates as a queue and can be represented using any of
the start queue representation.
ALGORITHM:
for i= 1 to n do
visited[i] =0;
for i =1 to n do
if (visited[i]=0)then BFS(i)
}
here the time and space required by BFT on an n-vertex e-edge graph one O(n+e) and O(n) resp
if adjacency list is [Link] adjancey matrix is used then the bounds are O(n2) and O(n) resp
TOPOLOGICAL SORT
A topological sort of a DAG G is an ordering of the vertices of G such that for every
edge (ei, ej) of G we have i<j. That is, a topological sort is a linear ordering of all its vertices
such that if DAG G contains an edge (ei, ej), then ei appears before ej in the ordering. DAG is
cyclic then no linear ordering is possible.
In simple words, a topological ordering is an ordering such that any directed path in DAG G
traverses vertices in increasing order.
24
Design and Analysis of Algorithm ( [Link] )
It is important to note that if the graph is not acyclic, then no linear ordering is possible. That is,
we must not have circularities in the directed graph. For example, in order to get a job you need
to have work experience, but in order to get work experience you need to have a job.
Proof:
Let is G acyclic.
Since is G acyclic, must have a vertex with no incoming edges. Let v1 be such a vertex. If we
remove v1 from graph, together with its outgoing edges, the resulting digraph is still acyclic.
Hence resulting digraph also has a vertex *
ALGORITHM: TOPOLOGICAL_SORT(G)
Example:
Diagram
with no incoming edges, and we let v2 be such a vertex. By repeating this process until digraph
G becomes empty, we obtain an ordering v1<v2 < , . . . , vn of vertices of digraph G. Because of
the construction, if (vi, vj) is an edge of digraph G, then vi must be detected before vj can be
deleted, and thus i<j. Thus, v1, . . . , vn is a topological sorting.
Total running time of topological sort is θ(V+E) . Since DFS(G) search takes θ(V+E) time and
it takes O(1) time to insert each of the |V| vertices onto the front of the linked list.
25