0% found this document useful (0 votes)
31 views18 pages

Algorithm Unit 4 This Is A Study Material For Bca Students For Getting Knowledge

Uploaded by

dinkandu22333
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views18 pages

Algorithm Unit 4 This Is A Study Material For Bca Students For Getting Knowledge

Uploaded by

dinkandu22333
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

lOMoARcPSD|26759719

Algorithm Unit 4 - This is a study material for BCA students


for getting knowledge
Bachelor of Computer Applications (Mahatma Gandhi University)

Scan to open on Studocu

Studocu is not sponsored or endorsed by any college or university


Downloaded by Dinkan Du ([email protected])
lOMoARcPSD|26759719

UNIT IV – Dynamic Programming

The General Method

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

Multistage Graphs

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

(Four-stage graph corresponding to a three-project problem)

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

1 void FGraph(graph G, int k, int n, int p[])


2 // The input in a k-stage graph G = (V, E) with n
3 //vertices indexed in order of stages. E is a set
4 //of edges and c[i,j] is the cost of <i,j>.
5 // p[l:k] is a minimum-cost path.
6 {
7 float cost[MAXSIZE]; int d[MAXSIZE], r;
8 cost[n] = 0.0;
9 for (int j=n – 1; j>=1; j--) {// Compute cost[j].
10 let r be a vertex such that <j,r> is an edge
11 of G and c[j][r] + cost[r] is minimum;
12 cost[j] = c[j][r] + cost[r]
13 d[j] = r;
14 }
15 // Find a minimum-cost path.
16 p[l]=1; p[k] = n;
17 for( j =2; j <= k-1; j++) p[j] = d[p[j-1]];
18 }

(Multistage graph pseudocode corresponding to the forward approach)

All-Pairs Shortest Paths

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

(Graph with negative cycle)

1 void AllPaths(float cost[] [SIZE], float A[] [SIZE], int n)


2 // cost[1:n] [1:n] is the cost adjacency matrix of
3 // a graph with vertices ; A[i][ j]is the cost of
4 //a shortest path from vertex i to vertex j.
5 // cost[i][i] = 0.0 for 1≤i ≤n.
6 {
7 for( i = 1; i<=n;i++)
8 for(int j =1; j <=n; j++)
9 A[i][j]=cost[i][j]; //Copy cost into A.
10 for(int k =1; k<=n; k++)
11 for( i =1; i<=n; i++)
12 for( j =1; j<=n; j++)
13 A[i][j] = min(A[i][j], A[i][k] + A[k][j]);

14 }

(Function to compute lengths of shortest paths)

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

(Directed graph and associated matrices)

Single-source Shortest Paths:


General Weights

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

(Directed graph with a negative-length edge)

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

(Shortest paths with negative edge lengths)

The pseudocode of the following program computes the length of the shortest path
from vertex v to each other vertex of the graph. This algorithm is referred to as the
Bellman and Ford algorithm.

1 void BellmanFord (int v, float cost[][SIZE], float dist[], const int n)


2 // Single-source/all-destination shortest paths
3 //with negative edge costs
4 /********/
5 {
6 for (int i = 1; i<= n; i++) // Initialize dist.
7 dist[i] = cost[v][i];
8 for (int k =2; k<=n-1; k++)
10

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

9 for (each u such that u != v and u has


10 at least one incoming edge)
11 for (each <i,u> in the graph
12 if dist[u] > dist[i] + cost[i] [u])
13 dist[u]= dist[i]+cost[i][u];`````````````````````
14 }

0/1 Knapsack Problem

11

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

12

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

Algorithm for 0/1 Knapsack Problem:


struct PW {float p, w; };
1 void DKnap (float p[], float w[], int x, int n, float m)
2 {
3 struct PW pair[SIZE]; int b[MAXSIZE], next;
4 b[0]=1; pair[l].p = pair[l].w =0.0; //S0
5 int t=l; h=1; // Start and end of S0
6 b[l] = next = 2; // Next free spot in pair[]
7 for (int i =1; i<=n-1; i++) {// Generate Si.
8 int k=t;
9 int u = Largest(pair, w, t, h, i, m);
10 for (int j =t ; j<=u; j++) { // Generate S1i-1 and merge.
11 float pp = pair[j].p + p[i]; float ww =pair[j].w + w[i];
12 // (pp,ww) is the next element in S1i-1.
13 while((k <= h) && (pair[k].w <= ww)) {
14 pair[next].p = pair[k].p; pair[next].w = pair[k].w;

13

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

15 next++; k++;
16 }
17 if ((k<= h) && ((pair[k].w ==ww)) {
18 if( pp < pair[k].p) pp =pair[k].p; k++;
19 }
20 if ( pp > pair[next - l].p) {
21 pair[next].p=pp; pair[next].w = ww; next++;
22 }
23 while ((k <= h) && (pair[k].p<= pair[nex - l].p))
24 k++;
25 }
26 // Merge in remaining terms from Si-1
27 while (k <= h) {
28 pair[next].p = pair[k].p; pair[next].w:=pair[k].w;
29 next++; k ++;
30 }
31 // Initialize for Si+1.
32 t = h + 1; h =next - 1;b[i + 1] = next;
33 }
34 TraceBack(p, w, pair, x, m, n);
35 }

14

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

The Travelling salesperson Problem

15

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

(Directed graph and edge length matrix c)

16

Downloaded by Dinkan Du ([email protected])


lOMoARcPSD|26759719

17

Downloaded by Dinkan Du ([email protected])

You might also like