Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 1
INDEX S. No. PROGRAM Page No. 1 Graph Search 2 2 Breadth First Search 5 3 Depth First Search 8 4 Dijikstras Shortest Path Algorithm 12 5 Topological Sorting 18 6 Hill Climbing 22 7 Merge Sort 28 8 Quick Sort 33 9 Producer Consumer 36 10 Concurrency List 39 11 Concurrency Stack 44 12 Concurrency Queue 49 13 Dynamic Programming 54 14 Randomized Algorithm 58 15 Dining Philosophers Problem 61 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 2
GRAPH SEARCH ALGORITHM: Step 1: Start Step 2: Get an input graph, source node S, node to search N Step 3: Add S to notHandled queue Step 4: Take first node, U from notHandled Step 4.1: If U is equal to N Step 4.1.1: Return <Handled, notHandled> Step 4.2: Else Step 4.2.1: Add the child of U to notHandled Step 4.2.2: Move U from notHandled to Handled queue Step 5: Repeat step 4 till notHandled is not empty Step 6: Return <Handled, notHandled> Step 7: End the Algorithm
JAVA CODE import java.util.*; public class GraphSearch { public static void main(String[] arg) { ArrayList<String> start = new ArrayList<String>(); ArrayList<String> end = new ArrayList<String>(); ArrayList<String> nodes = new ArrayList<String>(); ArrayList<String> notHandled = new ArrayList<String>(); ArrayList<String> handled = new ArrayList<String>(); int edgeCount, i, hSize, nSize; String node; Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 3
// get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } nSize=nodes.size(); System.out.println( "Enter the node to be found:"); node=s.next(); notHandled.add(start.get(0)); // root node handled.add(notHandled.get(0)); if(node.equalsIgnoreCase(notHandled.get(0))) hSize=nSize; else hSize=handled.size(); nodes.remove(notHandled.get(0)); notHandled.remove(0);
// till all nodes are handled while(hSize<nSize) {
// for the rear node in handled queue, add its children in notHandled queue for(i=0; i<start.size(); i++) if(handled.get(hSize-1).equalsIgnoreCase(start.get(i))) if(!(notHandled.contains(end.get(i))) && !(handled.contains(end.get(i)))) notHandled.add(end.get(i));
//remove the front node from notHandled and add it to the handled queue if(!(handled.contains(notHandled.get(0))) && !(notHandled.get(0).equalsIgnoreCase(node))) handled.add(notHandled.get(0)); if(node.equalsIgnoreCase(notHandled.get(0))) hSize=nSize; else hSize=handled.size(); nodes.remove(notHandled.get(0)); notHandled.remove(0); } System.out.println(" "); System.out.println("Nodes Handled = "+handled); System.out.println("Node "+ node +" Found !!! "); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 4
a b c e d System.out.println("Nodes Not Handled = "+nodes); } }
GRAPH
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 4 Enter the FROM node: a Enter the TO node: b Enter the FROM node: a Enter the TO node: c Enter the FROM node: b Enter the TO node: d Enter the FROM node: b Enter the TO node: e Enter the node to be found: c
Nodes Handled = [a, b] Node c Found !!! Nodes Not Handled = [d, e]
RESULT Thus the code in written in Java and executed for finding a node in a graph. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 5
BREADTH FIRST SEARCH ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S Step 3: Add S to notHandled queue Step 4: Take first node, U from notHandled Step 4.1: Add the child of U to notHandled Step 4.2: Move U from notHandled to Handled queue Step 5: Repeat step 4 till notHandled is not empty Step 6: Return <Handled, notHandled> Step 7: End the Algorithm
JAVA CODE import java.util.*; public class BreadthFirstSearch { public static void main(String[] arg) { ArrayList<String> start = new ArrayList<String>(); ArrayList<String> end = new ArrayList<String>(); ArrayList<String> nodes = new ArrayList<String>(); ArrayList<String> notHandled = new ArrayList<String>(); ArrayList<String> handled = new ArrayList<String>(); int edgeCount, i, hSize;
Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { // get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 6
System.out.println( "Enter the TO node:"); end.add(s.next()); } if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } notHandled.add(start.get(0)); // root node System.out.println("Handled Not Handled"); System.out.println("[] "+ notHandled); handled.add(notHandled.get(0)); hSize=handled.size(); // till all nodes are handled while(notHandled.size()>0) { notHandled.remove(0); // for the rear node in handled queue, add its children in notHandled queue for(i=0; i<edgeCount; i++) if(handled.get(hSize-1).equalsIgnoreCase(start.get(i))) if(!(notHandled.contains(end.get(i))) && !(handled.contains(end.get(i)))) notHandled.add(end.get(i)); System.out.println(handled +" "+ notHandled); //remove the front node from notHandled and add it to the handled queue if(notHandled.size()>0) if(!(handled.contains(notHandled.get(0)))) handled.add(notHandled.get(0)); hSize=handled.size(); } System.out.println("All Nodes are traversed in BFS"); } } GRAPH
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 4 Enter the FROM node: a Enter the TO node: b
a b d e c U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 7
Enter the FROM node: b Enter the TO node: c Enter the FROM node: a Enter the TO node: d Enter the FROM node: d Enter the TO node: e Handled Not Handled [] [a] [a] [b, d] [a, b] [d, c] [a, b, d] [c, e] [a, b, d, c] [e] [a, b, d, c, e] [] All Nodes are traversed in BFS
RESULT Thus the code is written in Java and executed for implementing Breadth First Search. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 8
DEPTH FIRST SEARCH ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S Step 3: Push S to notHandled stack Step 4: Pop top node, U from notHandled Step 4.1: Push the child of U to notHandled Step 4.2: Pop U from notHandled stack and add to Handled queue Step 5: Repeat step 4 till notHandled is not empty Step 6: Return <Handled, notHandled> Step 7: End the Algorithm
JAVA CODE import java.util.*; public class DepthFirstSearch { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static String[] stack = new String[10]; static ArrayList<String> handled = new ArrayList<String>(); static ArrayList<String> notHandled = new ArrayList<String>(); static ArrayList<String> child = new ArrayList<String>(); static int edgeCount,top=-1; public static void main(String[] arg) { Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node is assumed as ROOT"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(int i=0; i<edgeCount;i++) { // get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 9
{ end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } } System.out.println("Handled STACK"); check(start.get(0)); printStack(); System.out.println("All Nodes are traversed in DFS"); }
static void cSort() { //since the child nodes are inserted in reverse order, reverse it for(int q=child.size();q>0;q--) push(child.get(q-1)); }
static void pop() { //move the top node from notHandled to handled if(top>-1) { handled.add(stack[top]); notHandled.remove(stack[top]); top--; } }
static void check(String node) { // insert the parent node in notHandled node push(node); printStack(); int flag=1; for(int q=0; q<start.size();q++) if(start.get(q).equalsIgnoreCase(node)) { //the child nodes for top of stack if any if(flag==1) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 10
a b c e d pop(); flag=0; } //since they are not arranged, use child array ad temp array child.add(end.get(q)); } //sort the child of current top of stack cSort(); if(flag==1) // if no child nodes, then pop the top of stack pop(); if(top>-1) //recurse the check function with new top of stack check(stack[top]); }
static void printStack() { //print the notHandled node in reverse order, since its stack ArrayList<String> sort = new ArrayList<String>(); for(int q=notHandled.size();q>0;q--) sort.add(notHandled.get(q-1)); System.out.println(handled+" "+sort); } } GRAPH
OUTPUT NOTE: The first node is assumed as ROOT Enter the number of edges: 4 Enter the FROM node: a Enter the TO node: b Enter the FROM node: a Enter the TO node: c Enter the FROM node: b Enter the TO node: e Enter the FROM node: c Enter the TO node: d Handled STACK U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 11
[] [a] [a] [b, c] [a, b] [e, c] [a, b, e] [c] [a, b, e, c] [d] [a, b, e, c, d] [] All Nodes are traversed in DFS
RESULT Thus the code is written in Java and executed for implementing Depth First Search. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 12
DIJIKSTRAS SHORTEST PATH ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S with cost of each edge c <u, v> Step 3: Assign path of each node as NIL Step 4: Assign distance of each node except S as INFINITY Step 5: Assign distance of S as 0 Step 6: Add S to notHandled Step 7: Sort the nodes based on the distance Step 8: Choose the node U, with minimum distance Step 8.1: Add all children of U to notHandled Step 8.2: For all the child nodes of U Step 8.2.1: Assign path as node U Step 8.2.2: If distance of current node greater than d(U) + c <u, v> Step 8.2.2.1: Assign distance as d(U) + c <u, v> Step 8.3: Move U from notHandled to Handled Step 9: Go to step 7 if notHandled is not empty Step 10: End Algorithm
JAVA CODE import java.util.*;
public class ShortestPath_Dijikstra { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<Integer> cost = new ArrayList<Integer>(); static ArrayList<String> nodes = new ArrayList<String>(); static String[] path = new String[20]; static int[] length = new int[20]; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 13
static ArrayList<String> handled = new ArrayList<String>(); static ArrayList<String> notHandled = new ArrayList<String>(); static int edgeCount;
public static void main(String[] arg) { int node, i; Scanner s= new Scanner(System.in); // Get start node, end node, cost of each edge from user System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } System.out.println( "Enter the cost of edge:"); cost.add(s.nextInt()); if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } System.out.println("No. of nodes="+nodes.size()); //Initialising table values for(i=0;i<nodes.size();i++) if(i==0) { // for ROOT/SOURCE node notHandled.add(nodes.get(i)); length[i]=0; path[i]="NIL"; } else // other nodes in the graph length[i]=1000; System.out.println("NODE KNOWN LENGTH PATH"); print(); for(i=0;i<nodes.size();i++) { node=findMinimum(); findChild(node); System.out.println("NODE KNOWN LENGTH PATH"); print(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 14
System.out.println(" "); notHandled.clear(); handled.add(nodes.get(node)); } System.out.println("NODE KNOWN LENGTH PATH"); print(); System.out.println(""); } static int findMinimum() { int cost=1000; int node=0; for(int k=0; k<nodes.size(); k++) if(cost>length[k] && !(handled.contains(nodes.get(k)))) { cost=length[k]; node=k; } return node; }
static int known(int index) { if(handled.contains(nodes.get(index))) return 1; else U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 15
3 5 7 2 6 4 p q r t s return 0; }
}
GRAPH
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 6 Enter the FROM node: p Enter the TO node: q Enter the cost of edge: 5 Enter the FROM node: p Enter the TO node: r Enter the cost of edge: 4 Enter the FROM node: q Enter the TO node: s Enter the cost of edge: 5 Enter the FROM node: q Enter the TO node: t Enter the cost of edge: 3 Enter the FROM node: r U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 16
Enter the TO node: s Enter the cost of edge: 2 Enter the FROM node: r Enter the TO node: t Enter the cost of edge: 6 No. of nodes=5
NODE KNOWN LENGTH PATH p 0 0 NIL q 0 1000 null r 0 1000 null s 0 1000 null t 0 1000 null
NODE KNOWN LENGTH PATH p 0 0 NIL q 0 5 p r 0 4 p s 0 1000 null t 0 1000 null
NODE KNOWN LENGTH PATH p 1 0 NIL q 0 5 p r 0 4 p s 0 6 r t 0 10 r
NODE KNOWN LENGTH PATH p 1 0 NIL q 0 5 p r 1 4 p s 0 6 r t 0 8 q
NODE KNOWN LENGTH PATH p 1 0 NIL q 1 5 p r 1 4 p s 0 6 r t 0 8 q
NODE KNOWN LENGTH PATH p 1 0 NIL q 1 5 p r 1 4 p s 1 6 r t 0 8 q U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 17
NODE KNOWN LENGTH PATH p 1 0 NIL q 1 5 p r 1 4 p s 1 6 r t 1 8 q
RESULT Thus the code is written in Java and executed for implementing Dijikstras Shortest Path Algorithm. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 18
TOPOLOGICAL SORT ALGORITHM: Step 1: Start Step 2: Get an input graph G Step 3: Find the in-degree of each node in graph G Step 4: Sort the nodes with respect to their in-degrees Step 5: Remove the node with in-degree 0 from graph Step 6: Add the node to Handled queue Step 7: Go to step 3 if graph is not empty Step 8: Return Handled Step 9: End Algorithm
JAVA CODE package Graph; import java.util.*;
public class TopologicalSort { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<String> nodes = new ArrayList<String>(); static int[] indegree = new int[20]; static ArrayList<String> handled = new ArrayList<String>(); static int edgeCount, i, nodeSize, k, j, count, pNodeSize; static boolean flag=true;
public static void main(String[] arg) { int min; Scanner s= new Scanner(System.in); System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { // get FROM node and TO node for each edge System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 19
while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i);//to remove node added before checking error System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } nodeSize=nodes.size(); for(k=0;k<nodeSize;k++) { if(flag) { pNodeSize=nodes.size(); inDegree(); if(check()) { min=minDegree(); if(!(handled.contains(nodes.get(min)))) { handled.add(nodes.get(min)); } nodes.remove(min); System.out.println(" "); System.out.println( "Sorted queue "+handled); System.out.println("-----------------------------------"); System.out.println(" "); } else { System.out.println("The graph is cyclic and hence cant be sorted"); flag=false; } } } }
static void inDegree() { for(i=0;i<pNodeSize;i++) { count=0; for(j=0;j<edgeCount;j++) { if(nodes.get(i).equalsIgnoreCase(end.get(j)) && !(handled.contains(start.get(j)))) count++; } indegree[i]=count; System.out.println( "indegree of "+nodes.get(i)+" is "+count); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 20
a e b c d } }
static int minDegree() { int min=indegree[0],index=0; for(i=0;i<pNodeSize;i++) { if(min>indegree[i]) { min=indegree[i]; index=i; } } return index; }
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 5 Enter the FROM node: a Enter the TO node: b Enter the FROM node: b Enter the TO node: c Enter the FROM node: U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 21
c Enter the TO node: d Enter the FROM node: c Enter the TO node: e Enter the FROM node: a Enter the TO node: d
indegree of a is 0 indegree of b is 1 indegree of c is 1 indegree of d is 2 indegree of e is 1
RESULT Thus the code is written in Java and executed for implementing Topological sorting. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 22
HILL CIMBING ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S, destination node D with flow_capacity of each edge, rate of flow Step 3: Find the various paths from source and destination Step 4: Select a path from set of path Step 4.1: Find min_cut of selected path Step 4.2: Netflow is the sum of min_cut of all paths Step 5: If the netFlow > rate of flow then Step 5.1: Select a path from set of path Step 5.2: Find min_cut of selected path Step 5.3: For each edge of the path Step 5.3.1: Calculate flow_capacity min_cut Step 5.3.2: Assign the result to flow_capacity of the edge Step 5.3.3: Calculate and assign netFlow = netFlow min_cut Step 5.4: Goto Step 5.1 if netFlow > 0 Step 5.5: Else Return the flow through each edge of the graph Step 6: Else Exit Step 7: End Algorithm
JAVA CODE import java.util.*; public class HillClimbing { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<String> nodes = new ArrayList<String>(); static ArrayList<Integer> capacity = new ArrayList<Integer>(); static ArrayList<String> stack = new ArrayList<String>(); static int []flow = new int[20]; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 23
static String dest,source; static int edgeCount,i,j,netFlow,flag=0,top,netCapacity=0,capa; public static void main(String[] arg) { Scanner s= new Scanner(System.in); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: SAME AS START NODE"); System.out.println( "Enter the TO node:"); end.add(s.next()); } System.out.println( "Enter the capacity of the edge:"); capa=s.nextInt(); capacity.add(capa); flow[i]=capa; } capa=0; System.out.println( "Enter the Source Node "); source=s.next(); System.out.println( "Enter the Destination Node "); dest=s.next(); System.out.println( "Enter the Flow/Rate of the network "); netFlow=s.nextInt(); findPath(source); stack.clear(); flag=1; findPath(source); print(); check(); }
static void findPath(String node) { ArrayList<String> queue = new ArrayList<String>(); stack.add(node); for(i=0;i<edgeCount;i++) if(start.get(i).equalsIgnoreCase(node)) if(!stack.contains(end.get(i))) { if(end.get(i).equalsIgnoreCase(dest)) { stack.add(end.get(i)); pathCapacity(stack); stack.remove(stack.size()-1); } U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
if(flag==0) netCapacity=netCapacity+min; else { if(netFlow>min) { netFlow=netFlow-min; capa=capa+min; System.out.println("Flow along the PATH "+stack+" with FLOW "+min); for(int q=0;q<edges.size();q++) { int index=edges .get(q); flow[index]=flow[index]-min; } } else { capa=capa+netFlow; System.out.println("Flow along the PATH "+stack+" with FLOW " +netFlow); for(int q=0;q<edges.size();q++) { int index=edges .get(q); flow[index]=flow[index]-netFlow; } netFlow=0; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 25
8 16 7 12 42 17 15 10 b 13 a e c d t s }
} }
static void check() { if(netFlow>0) { System.out.println("The Maximum flow of the network is "+capa); System.out.println("The requested flow cant be accomodated.."+netFlow); } }
static void print() { System.out.println(" "); for(j=0;j<edgeCount;j++) { System.out.println("Flow across the edge "+start.get(j)+" "+end.get(j)+" is : "+ (capacity.get(j)-flow[j])+"/"+capacity.get(j)); } } }
GRAPH
OUTPUT Enter the number of edges: 9 Enter the FROM node: s Enter the TO node: a Enter the capacity of the edge: 10 Enter the FROM node: s Enter the TO node: d Enter the capacity of the edge: 13 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 26
Enter the FROM node: s Enter the TO node: c Enter the capacity of the edge: 12 Enter the FROM node: d Enter the TO node: e Enter the capacity of the edge: 16 Enter the FROM node: d Enter the TO node: b Enter the capacity of the edge: 7 Enter the FROM node: a Enter the TO node: b Enter the capacity of the edge: 15 Enter the FROM node: e Enter the TO node: c Enter the capacity of the edge: 8 Enter the FROM node: b Enter the TO node: c Enter the capacity of the edge: 17 Enter the FROM node: c Enter the TO node: t Enter the capacity of the edge: 42 Enter the Source Node s Enter the Destination Node t Enter the Flow/Rate of the network 35 Flow along the PATH [s, a, b, c, t] with FLOW 10 Flow along the PATH [s, d, e, c, t] with FLOW 8 Flow along the PATH [s, d, b, c, t] with FLOW 5 Flow along the PATH [s, c, t] with FLOW 12
Flow across the edge s - a is : 10/10 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 27
Flow across the edge s - d is : 13/13 Flow across the edge s - c is : 12/12 Flow across the edge d - e is : 8/16 Flow across the edge d - b is : 5/7 Flow across the edge a - b is : 10/15 Flow across the edge e - c is : 8/8 Flow across the edge b - c is : 15/17 Flow across the edge c - t is : 35/42
RESULT Thus the code is written in Java and executed for implementing Hill Climbing. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 28
MERGE SORT ALGORITHM: Step 1: Start Step 2: Get n inputs elements Step 3: If the number of elements >2 then Step 3.1: Split the elements into 2 halves, right and left using the index of the element Step 3.2: Recurse the Step 3 with right array Step 3.3: Recurse the Step 3 with left array Step 3.4: Call merge function Step 4: Else if the number of elements ==2 then Step 4.1: Add first element to right array n second element to left array Step 4.2: Call the merge function Step 5: In the merge function Step 5.1: Compare each element of the right and left array Step 5.2: Add the sorted list to a global array Step 6: End Algorithm
JAVA CODE import java.util.*;
public class MergeSort { static int n,i; static ArrayList<Integer> element = new ArrayList<Integer>(); static ArrayList<Integer> sorted = new ArrayList<Integer>(); public static void main(String[] arg) { Scanner s= new Scanner(System.in); System.out.println( "NOTE: Duplicate terms will be removed"); System.out.println( "Enter the number of elements to be sorted:"); n=s.nextInt(); for(i=0;i<n;i++) { System.out.println( "Enter the element "+(i+1)+" :"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 29
element.add(s.nextInt()); } splitting(element); System.out.println(" "); System.out.println("Sorted List of given List is : "+sorted); }
static void splitting(ArrayList<Integer> entire) { int size=entire.size()/2; ArrayList<Integer> right = new ArrayList<Integer>(); ArrayList<Integer> left = new ArrayList<Integer>(); // if n>2 then recurse if(entire.size()>2) { //divide into 2 for(i=0;i<entire.size();i++) if(i<size) right.add(entire.get(i)); else left.add(entire.get(i)); splitting(right); splitting(left); merging(right,left); } if(entire.size()==2) { right.add(entire.get(0)); left.add(entire.get(1)); merging(right,left); } }
static void merging(ArrayList<Integer> right,ArrayList<Integer> left) { ArrayList<Integer> merged = new ArrayList<Integer>(); int rs=right.size(),ls=left.size(),x=0,y=0,z=0,ss=sorted.size(); int sum=rs+ls+ss; i=0; System.out.println("Left : "+left); System.out.println("Previously Sorted : "+sorted); System.out.println("Right : "+right);
while(i<(sum)) { if(rs>x && ls==y && ss==z)//only right { if(!merged.contains(right.get(x))) merged.add(right.get(x)); x++; i++; } else if(ls>y && rs==x && ss==z)//only left { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 30
if(!merged.contains(left.get(y))) merged.add(left.get(y)); y++; i++; } else if(ls==y && rs==x && ss>z)//only sort { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } else if(ls>y && rs==x && ss>z)//left n sort { if(left.get(y)<sorted.get(z)) { if(!merged.contains(left.get(y))) merged.add(left.get(y)); y++; i++; } else { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } } else if(ls==y && rs>x && ss>z)//right n sort { if(right.get(x)<sorted.get(z)) { if(!merged.contains(right.get(x))) merged.add(right.get(x)); x++; i++; } else { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } } else if(ls>y && rs>x && ss==z)//right n left { if(right.get(x)<left.get(y)) { if(!merged.contains(right.get(x))) merged.add(right.get(x)); x++; i++; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
} else { if(right.get(x)<sorted.get(z)) { if(!merged.contains(right.get(x))) merged.add(right.get(x)); y++; i++; } else { if(!merged.contains(sorted.get(z))) merged.add(sorted.get(z)); z++; i++; } } } else { System.out.println("Error........."); } } System.out.println("-----------------------------"); System.out.println("Locally Merged Sorted List : "+merged); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 32
System.out.println(" "); sorted=merged; } }
OUTPUT NOTE: Duplicate terms will be removed Enter the number of elements to be sorted: 5 Enter the element 1 : 1 Enter the element 2 : 3 Enter the element 3 : 5 Enter the element 4 : 2 Enter the element 5 : 4 Left : [3] Previously Sorted : [] Right : [1] ----------------------------- Locally Merged Sorted List : [1, 3]
Left : [4] Previously Sorted : [1, 3] Right : [2] ----------------------------- Locally Merged Sorted List : [1, 2, 3]
Left : [2, 4] Previously Sorted : [1, 2, 3] Right : [5] ----------------------------- Locally Merged Sorted List : [1, 2, 3, 4, 5]
Left : [5, 2, 4] Previously Sorted : [1, 2, 3, 4, 5] Right : [1, 3] ----------------------------- Locally Merged Sorted List : [1, 2, 3, 4, 5]
Sorted List of given List is : [1, 2, 3, 4, 5]
RESULT Thus the code is written in Java and executed for implementing Merge Sort. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 33
QUICK SORT ALGORITHM: Step 1: Start Step 2: Get n elements to be sorted Step 3: If element size>2 Step 3.1: Find the average of n elements, pivot Step 3.2: if element lesser than pivot Step 3.2.1: Add element to lesser queue Step 3.2.2: Recurse step 3 with lesser queue Step 3.3: else Step 3.3.1: Add element to bigger queue Step 3.3.2: Recurse step 3 with bigger queue Step 4: else Step 4.1: if element[0] < element[1] Step 4.1.1: Swap elements Step 4.1.2: Join lesser and bigger list continuously Step 6: End Algorithm
JAVA CODE import java.util.*; public class QuickSort { static int n,i; static ArrayList<Integer> element = new ArrayList<Integer>(); static ArrayList<Integer> sorted = new ArrayList<Integer>(); public static void main(String[] arg) { Scanner s= new Scanner(System.in); //get elements System.out.println( "Enter the number of elements to be sorted:"); n=s.nextInt(); for(i=0;i<n;i++) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 34
System.out.println( "Enter the element "+(i+1)+" :"); element.add(s.nextInt()); } if(n>1) { System.out.println("Pivot -- Smaller -- Larger"); quickSort(element); System.out.println("Sorted list : "+sorted); } else { System.out.println("List is : "+element); } }
static void quickSort(ArrayList<Integer> entire) { int sum=0,pivot=0; ArrayList<Integer> smaller = new ArrayList<Integer>(); ArrayList<Integer> higher = new ArrayList<Integer>(); // if n>2 then recurse if(entire.size()>2) { //find pivot element for(i=0;i<entire.size();i++) sum=sum+entire.get(i); pivot=sum/entire.size(); //divide into 2 for(i=0;i<entire.size();i++) if(entire.get(i)>pivot) higher.add(entire.get(i)); else smaller.add(entire.get(i)); System.out.println(" "+pivot+" "+smaller+" "+higher); quickSort(smaller); quickSort(higher);
} //else sort and merge else { if(entire.size()==2) { pivot=(entire.get(0)+entire.get(1))/2; if(entire.get(0)<entire.get(1)) { sorted.add(entire.get(0)); sorted.add(entire.get(1)); } else { sorted.add(entire.get(1)); sorted.add(entire.get(0)); } U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
} } } OUTPUT Enter the number of elements to be sorted: 5 Enter the element 1 : 46 Enter the element 2 : 25 Enter the element 3 : 47 Enter the element 4 : 36 Enter the element 5 : 12 Pivot -- Smaller -- Larger 33 [25, 12] [46, 47, 36] 18 [25] [12] 43 [36] [46, 47] 46 [46] [47] Sorted list : [12, 25, 36, 46, 47]
RESULT Thus the code is written in Java and executed for implementing Merge Sort. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 36
PRODUCER CONSUMER ALGORITHM: Step 1: Start Step 2: Get choice Step 3: If choice is to produce Step 3.1: Get the amount to be produced Step 3.2: Add the amount to total amount Step 4: Else if choice is to consume Step 4.1: Get the amount to be consumed Step 4.2: Subtract the amount from total amount Step 5: Else Step 5.1: Exit Step 6: If total amount > threshold Step 7: Exit Step 8: End Algorithm
JAVA CODE import java.util.*; public class ProducerConsumer { static int amount=0, currAmt; static boolean flag=true; static String choice; public static void main(String[] arg) { Scanner s=new Scanner(System.in); System.out.println( "If u want to produce enter p/P"); System.out.println( "If u want to consume enter c/C"); System.out.println( "Others if u want to exit"); while(flag) { System.out.println( "Enter your Choice.."); System.out.println( "Amount present in warehouse = "+amount); choice=s.next(); if(choice.equalsIgnoreCase("p")) U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 37
{ System.out.println( "What quantity do u want to produce?"); currAmt=s.nextInt(); amount=amount+currAmt; if(amount>500)flag=false; } else if(choice.equalsIgnoreCase("c")) { if(amount==0) System.out.println( "No production to be consumed.."); else { System.out.println( "What quantity do u want to consume?"); currAmt=s.nextInt(); if(currAmt>amount) System.out.println( "Can't consume more than production !"); else amount=amount-currAmt; } } else { System.out.println( "Wrong choice ! ! "); flag=false; } System.out.println( " "); } System.out.println( "The quantity in warehouse is "+amount); if(amount>500) System.out.println( "More production and few/no consumption"); } } OUTPUT If u want to produce enter p/P If u want to consume enter c/C Others if u want to exit Enter your Choice.. Amount present in warehouse = 0 p What quantity do u want to produce? 34
Enter your Choice.. Amount present in warehouse = 34 p What quantity do u want to produce? 56
Enter your Choice.. Amount present in warehouse = 90 c What quantity do u want to consume? U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 38
100 Can't consume more than production !
Enter your Choice.. Amount present in warehouse = 90 c
What quantity do u want to consume? 90
Enter your Choice.. Amount present in warehouse = 0 c No production to be consumed..
Enter your Choice.. Amount present in warehouse = 0 s Wrong choice ! !
The quantity in warehouse is 0
RESULT Thus the code is written in Java and executed for implementing Producer and consumer problem. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 39
CONCURRENT LIST ALGORITHM: Step 1: Start Step 2: Run all the threads simultaneously Step 3: Lock the list to access it with the thread one and make other threads if present to wait Step 3.1: Get choice as input Step 3.2: To add an element list Step 3.2.1: Get the element and add to the end of the list Step 3.3: To delete the element Step 3.3.1: Get the element and remove from the list Step 3.4: To display the list, print the list Step 3.5: when choice is wrong, terminate the current thread and unlock the list Step 4: If a thread is waiting then continue till list is locked Step 4.1: Check if list is free for each second then Step 4.2: If list is free then go to Step3 Step 4.3: Else go to Step 4 Step 5: End Algorithm when no thread is waiting
JAVA CODE List_Thread.java package ConList; class RunnableList implements Runnable { Thread runner; boolean flag=true; public RunnableList() {
} public void run() { System.out.println("Now executing thread----"+ Thread.currentThread()); List l = new List(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 40
l.myList(); } }
public class List_Thread { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableList(), "thread1"); Thread thread2 = new Thread(new RunnableList(), "thread2"); //Start the threads thread1.start(); if(List.choice>3) { thread2.start(); } else { System.out.println(" "); System.out.println("Some thread is accessing the List..."); System.out.println("Now "+Thread.currentThread() +" is waiting......"); create(thread2); } }
public static void create(Thread thread) { try { //delays for one second Thread.sleep(1000); } catch (InterruptedException e) { } finally { if(List.choice>3) { thread.start(); } else { create(thread); } } } } List.java package ConList; import java.util.*; public class List { static ArrayList<Integer> list1=new ArrayList<Integer>(); public static int choice; U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 41
static Scanner s = new Scanner(System.in); public void myList() { int item; System.out.println("1. add element"); System.out.println("2. delete element"); System.out.println("3. display list"); System.out.println("Enter choice..."); choice=s.nextInt(); while(choice<4 && choice>0) { if(choice==1) { System.out.println("Enter item to be added.."); item=s.nextInt(); add(item); } else if(choice==2) { System.out.println("Enter item to be removed.."); item=s.nextInt(); remove(item); } else if(choice==3) { System.out.println("The List is.."+list1); } System.out.println("Enter choice..."); choice=s.nextInt(); } System.out.println("---------Thread Execution completed-----------"); } static void add(int item) { list1.add(item); }
static void remove(int item) { if(!list1.isEmpty()) { if(list1.contains(item)) list1.remove(find(item)); else System.out.println("element not found"); } else System.out.println("List is empty...."); }
static int find(int item) { for(int i=0;i<list1.size();i++) if(list1.get(i)==item) U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 42
return i; return 0; } }
OUTPUT Now executing thread----Thread[thread1,5,main]
1. add element Some thread is accessing the List... 2. delete element Now Thread[main,5,main] is waiting...... 3. display list Enter choice... 1 Enter item to be added.. 1 Enter choice... 1 Enter item to be added.. 2 Enter choice... 1 Enter item to be added.. 3 Enter choice... 3 The List is..[1, 2, 3] Enter choice... 2 Enter item to be removed.. 1 Enter choice... 4 ---------Thread Execution completed----------- Now executing thread----Thread[thread2,5,main] 1. add element 2. delete element 3. display list Enter choice... 3 The List is..[2, 3] Enter choice... 1 Enter item to be added.. 5 Enter choice... 3 The List is..[2, 3, 5] U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 43
Enter choice... 2 Enter item to be removed.. 1 Enter choice... 5 ---------Thread Execution completed-----------
RESULT Thus the code is written in Java and executed for accessing list concurrently. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 44
CONCURRENT STACK ALGORITHM: Step 1: Start Step 2: Run all the threads simultaneously Step 3: Lock the stack to access it with the thread one and make other threads if present to wait Step 3.1: Get choice as input Step 3.2: To push an element list Step 3.2.1: Get the element and add to the top of stack Step 3.3: To pop an element Step 3.3.1: Remove the element from top of the stack Step 3.4: To display the stack, print the stack Step 3.5: when choice is wrong, terminate the current thread and unlock the stack Step 4: If a thread is waiting then continue till list is locked Step 4.1: Check if list is free for each second then Step 4.2: If list is free then go to Step3 Step 4.3: Else go to Step 4 Step 5: End Algorithm when no thread is waiting
JAVA CODE Stack_Thread.java package ConStack; class RunnableStack implements Runnable { Thread runner; boolean flag=true; public RunnableStack() { } public void run() { System.out.println("Now executing thread----" +Thread.currentThread()); Stack s = new Stack(); s.myStack(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 45
} }
public class Stack_Thread { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableStack(), "thread1"); Thread thread2 = new Thread(new RunnableStack(), "thread2"); //Start the threads thread1.start(); if(Stack.choice>3) thread2.start(); else { System.out.println("<-------------> Some thread is accessing the Stack..."); System.out.println("<-------------> Now "+ Thread.currentThread() +" is waiting......"); create(thread2); } }
public static void create(Thread thread) { try { //delays for one second Thread.sleep(1000); } catch (InterruptedException e) { } finally { if(Stack.choice>3) thread.start(); else create(thread); } } } Stack.java package ConStack; import java.util.*;
public class Stack { static int[] stack1 = new int[25]; public static int choice,top=-1; static Scanner s = new Scanner(System.in);
public void myStack() { int item; System.out.println("1. Push element"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
static void pop() { System.out.println("The element popped is "+stack1[top]); top--; }
static void printStack() { if(top==-1) System.out.print("empty"); else { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
OUTPUT Now executing thread----Thread[thread1,5,main] <-------------> Some thread is accessing the Stack... 1. Push element 2. Pop element 3. Display Stack Enter choice... <-------------> Now Thread[main,5,main] is waiting...... 1 Enter item to be pushed.. 1 Enter choice... 1 Enter item to be pushed.. 2 Enter choice... 1 Enter item to be pushed.. 3 Enter choice... 3 The stack is..[ 3 2 1 ] Enter choice... 4 -----------Thread Execution completed---------- Now executing thread----Thread[thread2,5,main] 1. Push element 2. Pop element 3. Display Stack Enter choice... 3 The stack is..[ 3 2 1 ] Enter choice... 2 The element popped is 3 Enter choice... 1 Enter item to be pushed.. 4 U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 48
Enter choice... 3 The stack is..[ 4 2 1 ] Enter choice... 5 -----------Thread Execution completed----------
RESULT Thus the code is written in Java and executed for accessing stack concurrently. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 49
CONCURRENT QUEUE ALGORITHM: Step 1: Start Step 2: Run all the threads simultaneously Step 3: Lock the queue to access it with the thread one and make other threads if present to wait Step 3.1: Get choice as input Step 3.2: To enqueue an element to the queue Step 3.2.1: Get the element and add to the end of the queue Step 3.3: To dequeue an element Step 3.3.1: remove the element which is in the beginning of the queue Step 3.4: To display the queue, print the queue Step 3.5: when choice is wrong, terminate the current thread and unlock the queue Step 4: If a thread is waiting then continue till list is locked Step 4.1: Check if list is free for each second then Step 4.2: If list is free then go to Step3 Step 4.3: Else go to Step 4 Step 5: End Algorithm when no thread is waiting
JAVA CODE Queue_Thread.java package ConQueue; class RunnableQueue implements Runnable { Thread runner; boolean flag=true; public RunnableQueue() {
} public void run() { System.out.println("Now executing thread----"+Thread.currentThread()); Queue l = new Queue(); l.myQueue(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 50
} }
public class Queue_Thread { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableQueue(), "thread1"); Thread thread2 = new Thread(new RunnableQueue(), "thread2"); //Start the threads thread1.start(); if(Queue.choice>3) thread2.start(); else { System.out.println(" "); System.out.println("Some thread is accessing the Queue..."); System.out.println("Now "+Thread.currentThread() +" is waiting......"); create(thread2); } }
public static void create(Thread thread) { try { //delays for one second Thread.sleep(1000); } catch (InterruptedException e) { } finally { if(Queue.choice>3) thread.start(); else create(thread); } } } Queue.java package ConQueue; import java.util.*; public class Queue { static int[] queue1 = new int[25]; public static int choice,rear=0,front=0; static Scanner s = new Scanner(System.in); public void myQueue() { int item; System.out.println("1. Push element"); System.out.println("2. Pop element"); System.out.println("3. Display Stack"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
static void dequeue() { System.out.println("The element dequeued is "+queue1[front]); front++; }
static void printQueue() { if(rear==front) System.out.print("empty"); else { System.out.print("[ "); for(int i=front;i<rear;i++) System.out.print(queue1[i]+" "); System.out.println("]"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 52
} } }
OUTPUT Now executing thread----Thread[thread1,5,main]
Some thread is accessing the Queue... Now Thread[main,5,main] is waiting...... 1. Push element 2. Pop element 3. Display Stack Enter choice... 1 Enter item to be added.. 1 Enter choice... 1 Enter item to be added.. 2 Enter choice... 1 Enter item to be added.. 3 Enter choice... 3 The queue is.. [ 1 2 3 ] Enter choice... 2 The element dequeued is 1 Enter choice... 4 ---------Thread Execution completed----------- Now executing thread----Thread[thread2,5,main] 1. Push element 2. Pop element 3. Display Stack Enter choice... 3 The queue is.. [ 2 3 ] Enter choice... 1 Enter item to be added.. 4 Enter choice... U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 53
3 The queue is.. [ 2 3 4 ] Enter choice... 5 ---------Thread Execution completed-----------
RESULT Thus the code is written in Java and executed for accessing queue concurrently. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 54
DYNAMIC PROGRAMMING ALGORITHM: Step 1: Start Step 2: Get an input graph G, source node S with cost of each edge c <u, v> Step 3: Assign path of each node as NIL Step 4: Assign distance of each node except S as INFINITY Step 5: Assign distance of S as 0 Step 6: Add S to notHandled Step 7: Sort the nodes based on the distance Step 8: Choose the node U, with minimum distance Step 8.1: Add all children of U to notHandled Step 8.2: For all the child nodes of U Step 8.2.1: Assign path as node U Step 8.2.2: If distance of current node greater than d(U) + c <u, v> Step 8.2.2.1: Assign distance as d(U) + c <u, v> Step 8.3: Move U from notHandled to Handled Step 9: Go to step 7 if notHandled is not empty Step 10: Return all the nodes and their cost from the source node S Step 11: End Algorithm
JAVA CODE import java.util.*; public class DynamicPrgm { static ArrayList<String> start = new ArrayList<String>(); static ArrayList<String> end = new ArrayList<String>(); static ArrayList<Integer> cost = new ArrayList<Integer>(); static ArrayList<String> nodes = new ArrayList<String>(); static int[] length = new int[20]; static ArrayList<String> handled = new ArrayList<String>(); static ArrayList<String> notHandled = new ArrayList<String>(); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 55
static int edgeCount;
public static void main(String[] arg) { int node; int i; Scanner s= new Scanner(System.in); // Get start node, end node, cost of each edge from user System.out.println( "NOTE: The first node will be taken as source"); System.out.println( "Enter the number of edges:"); edgeCount=s.nextInt(); for(i=0; i<edgeCount;i++) { System.out.println( "Enter the FROM node:"); start.add(s.next()); System.out.println( "Enter the TO node:"); end.add(s.next()); while(start.get(i).equalsIgnoreCase(end.get(i))) { end.remove(i); System.out.println( "Error: ***--SAME AS START NODE--***"); System.out.println( "Enter the TO node:"); end.add(s.next()); } System.out.println( "Enter the cost of edge:"); cost.add(s.nextInt()); if(!(nodes.contains(start.get(i)))) nodes.add(start.get(i)); if(!(nodes.contains(end.get(i)))) nodes.add(end.get(i)); } //Initialising table values for(i=0;i<nodes.size();i++) if(i==0) { // for ROOT/SOURCE node notHandled.add(nodes.get(i)); length[i]=0; } else // other nodes in the graph length[i]=1000; for(i=0;i<nodes.size();i++) { node=findMinimum(); findChild(node); notHandled.clear(); handled.add(nodes.get(node)); } System.out.println("NODE LENGTH"); print(); System.out.println(""); }
static int findMinimum() U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 56
3 5 7 2 6 4 p q r t s { int cost=1000; int node=0; for(int k=0; k<nodes.size(); k++) if(cost>length[k] && !(handled.contains(nodes.get(k)))) { cost=length[k]; node=k; } return node; }
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 57
OUTPUT NOTE: The first node will be taken as source Enter the number of edges: 6 Enter the FROM node: p Enter the TO node: q Enter the cost of edge: 5 Enter the FROM node: p Enter the TO node: r Enter the cost of edge: 4 Enter the FROM node: q Enter the TO node: s Enter the cost of edge: 7 Enter the FROM node: q Enter the TO node: t Enter the cost of edge: 3 Enter the FROM node: r Enter the TO node: s Enter the cost of edge: 2 Enter the FROM node: r Enter the TO node: t Enter the cost of edge: 6 NODE LENGTH p - 0 q - 5 r - 4 s - 6 t - 8
RESULT Thus the code is written in Java and executed for performing dynamic programming in calculating the cost of each node from source node. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 58
RANDOMIZED ALGORITHM ALGORITHM: Step 1: Start Step 2: Get the choice from user either Combination or Permutation Step 3: If choice is Combination Step 3.1: Get n and r Step 3.2: Calculate n! / [(n-r)! r!] Step 3.3: Return result Step 4: If choice is Permutation Step 4.1: Get n and r Step 4.2: Calculate n! / (n-r)! Step 4.3: Return result Step 5: End Algorithm
public class RandomizedAlgm { static boolean flag=true; static String choice; static int n; static int r; public static void main(String[] arg) { Scanner s=new Scanner(System.in); System.out.println( "If u want to find Permutations p/P"); System.out.println( "If u want to find Combinations c/C"); System.out.println( "Others if u want to exit"); while(flag) { System.out.println( " "); System.out.println( "Enter your choice.."); choice=s.next(); if(choice.equals("p")) { System.out.println( "TO CALCULATE nPr :"); U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 59
System.out.println( "Enter the total no. of items, n :"); n=s.nextInt(); System.out.println( "Enter the no. of items in one sample, r :"); r=s.nextInt(); if(n>=r) findP(n,r); else System.out.println( "r should be lesser than or equal to n"); } else if(choice.equals("c")) { System.out.println( "TO CALCULATE nCr :"); System.out.println( "Enter the total no. of items, n :"); n=s.nextInt(); System.out.println( "Enter the no. of items in one sample, r :"); r=s.nextInt(); if(n>=r) findC(n,r); else System.out.println( "r should be lesser than or equal to n"); } else { System.out.println( "Wrong Choice..."); flag=false; } } }
public static void findP(int n, int r) { // npr = n!/(n-r)! int result=fact(n)/fact(n-r); System.out.println( n+" P "+r+" = "+result); }
public static void findC(int n, int r) { // ncr = n!/(n-r)!r! int result=fact(n)/(fact(n-r)*fact(r)); System.out.println( n+" C "+r+" = "+result); }
public static int fact(int n) { int fact=1; for(int i=1;i<=n;i++) { fact=fact*i; } return fact; } } U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 60
OUTPUT If u want to find Permutations p/P If u want to find Combinations c/C Others if u want to exit
Enter your choice.. p TO CALCULATE nPr : Enter the total no. of items, n : 10 Enter the no. of items in one sample, r : 5 10 P 5 = 30240
Enter your choice.. c TO CALCULATE nCr : Enter the total no. of items, n : 7 Enter the no. of items in one sample, r : 4 7 C 4 = 35
Enter your choice.. h Wrong Choice...
RESULT Thus the code is written in Java and executed for a randomized algorithm to calculate combination and permutation. U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 61
DINING PHILOSOPHERS PROBLEM Algorithm: Step 1: Start Step 2: Assume all philosophers are reading Step 3: Input a philosopher and his action Step 3.1: If action is to eat Step 3.1.1: Check if both chopsticks are available for the philosopher then Step 3.1.1.1: Lock the chopsticks Step 3.1.2: Else keep the philosopher waiting Step 3.2: if action is to read Step 3.2.1: Check if the chopsticks are locked then Step 3.2.1.1: Unlock the chopsticks Step 3.3: Else Exit Step 4: End Algorithm
public class PhilosopherPrblm { static Scanner s=new Scanner(System.in); static int[] reader={0,0,0,0,0}; static int[] chopStick={0,0,0,0,0}; static int philo; static String choice; static boolean flag=true;
public static void main(String[] arg) { System.out.println( "NOTE: Initally all philosophers are reading..."); while(flag) { System.out.println( "Select a philosopher.."); philo=s.nextInt(); if(philo<6 && philo>0) { U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 62
System.out.println( "Does he want to eat(e/E) / read(r/R)?"); choice=s.next(); if(choice.equalsIgnoreCase("e")) { switch(philo) { case 1: lock(0,1); break; case 2: lock(1,2); break; case 3: lock(2,3); break; case 4: lock(3,4); break; case 5: lock(4,0); break; } } else if(choice.equalsIgnoreCase("r")) { switch(philo) { case 1: unlock(0,1); break; case 2: unlock(1,2); break; case 3: unlock(2,3); break; case 4: unlock(3,4); break; case 5: unlock(4,0); break; } } else { System.out.println( "Wrong choice.. The philosopher can either read or eat.."); flag=false; } job(); System.out.println( "........................................."); } else U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 63
{ System.out.println( "There are only 5 philosophers on the table.."); flag=false; } } }
static void lock(int m, int n) { if(chopStick[m]==0 && chopStick[n]==0) { chopStick[m]=1; chopStick[n]=1; reader[m]=1; } else { System.out.println( "Wait till philosopher's neighbour finishes eating.."); System.out.println( " "); } }
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 64
1 2 3 5 4 1 2 3 4 5 PICTURIZATION
OUTPUT NOTE: Initally all philosophers are reading... Select a philosopher.. 2 Does he want to eat(e/E) / read(r/R)? e Philosopher 1 is reading Philosopher 2 is eating Philosopher 3 is reading Philosopher 4 is reading Philosopher 5 is reading ......................................... Select a philosopher.. 4 Does he want to eat(e/E) / read(r/R)? e Philosopher 1 is reading Philosopher 2 is eating Philosopher 3 is reading Philosopher 4 is eating Philosopher 5 is reading ......................................... Select a philosopher..
U N I T E D
I N S T I T U T E
O F
T E C H N O L O G Y
UNITED INSTITUTE OF TECHNOLOGY Periyanaickenpalayam, Coimbatore- 641 020. Department of Computer Science and Engineering Advanced Data Structures Laboratory
Antonita Shilpa . J UIT ( FMCS02 ) 65
5 Does he want to eat(e/E) / read(r/R)? e Wait till philosopher's neighbour finishes eating..
Philosopher 1 is reading Philosopher 2 is eating Philosopher 3 is reading Philosopher 4 is eating Philosopher 5 is reading ......................................... Select a philosopher.. 6 There are only 5 philosophers on the table..
RESULT Thus the code is written in Java and executed for the implementation of dining philosophers problem. U N I T E D