package GPL; //dja: added for performance improvement import java.util.HashMap; import java.util.Map; import java.util.LinkedList; // ********************************************************* public class Graph { public Graph ComputeTranspose( Graph the_graph ) { int i; String theName; //dja: added for performance improvement Map newVertices = new HashMap( ); // Creating the new Graph Graph newGraph = new Graph(); // Creates and adds the vertices with the same name for ( VertexIter vxiter = getVertices(); vxiter.hasNext(); ) { theName = vxiter.next().getName(); //dja: changes for performance improvement Vertex v = new Vertex( ).assignName( theName ); // newGraph.addVertex( new Vertex().assignName( theName ) ); newGraph.addVertex( v ); //dja: added for performance improvement newVertices.put( theName, v ); } Vertex theVertex, newVertex; Vertex theNeighbor; Vertex newAdjacent; EdgeIfc newEdge; // adds the transposed edges // dja: added line below for performance improvements VertexIter newvxiter = newGraph.getVertices( ); for ( VertexIter vxiter = getVertices(); vxiter.hasNext(); ) { // theVertex is the original source vertex // the newAdjacent is the reference in the newGraph to theVertex theVertex = vxiter.next(); // dja: performance improvement fix // newAdjacent = newGraph.findsVertex( theVertex.getName() ); newAdjacent = newvxiter.next( ); for( VertexIter neighbors = theVertex.getNeighbors(); neighbors.hasNext(); ) { // Gets the neighbor object theNeighbor = neighbors.next(); // the new Vertex is the vertex that was adjacent to theVertex // but now in the new graph // dja: performance improvement fix // newVertex = newGraph.findsVertex( theNeighbor.getName() ); newVertex = ( Vertex ) newVertices.get( theNeighbor.getName( ) ); // Creates a new Edge object and adjusts the adornments newEdge = newGraph.addEdge( newVertex, newAdjacent ); //newEdge.adjustAdorns( theNeighbor.edge ); // Adds the new Neighbor object with the newly formed edge // newNeighbor = new $TEqn.Neighbor(newAdjacent, newEdge); // (newVertex.neighbors).add(newNeighbor); } // all adjacentNeighbors } // all the vertices return newGraph; } // of ComputeTranspose }