package lab11;
import java.io.*;
class Pair {
int nodeId;
float nodeRank;
Pair(int inNodeId, float inRank){
nodeId = inNodeId;
nodeRank = inRank;
}
int getNodeId(){ return nodeId; }
float getNodeRank(){ return nodeRank; }
}
public class GraphClient {
public static void main(String[] args) throws Exception{
Graph graph = new Graph("Z:/lab-subgraph.txt");
graph.getGraphDiameter();
Pair [] nodeDegrees = new Pair[graph.getNumNodes()];
mergesort_descending(nodeDegrees);
writePairArrayToFile(nodeDegrees, "Z:/degreeRanking.txt");
Pair [] clusteringCoefficients = new Pair[100];
mergesort_descending(clusteringCoefficients);
writePairArrayToFile(clusteringCoefficients, "Z:/clusteringRanking.txt");
Pair [] CLC = new Pair[100];
mergesort_ascending(CLC);
writePairArrayToFile(CLC, "Z:/closenessRanking.txt");
}
static void writePairArrayToFile( Pair [] pairs, String outFile )
throws FileNotFoundException{
PrintStream out = new PrintStream(outFile);
for( int i = 0; i < Math.min(pairs.length, 1000); i++ )
out.printf("%7d %12.6f\n", pairs[i].getNodeId(), pairs[i].getNodeRank());
out.close();
}
static void mergesort_ascending( Pair [] A ){
mergesort_descending(A);
for( int i = 0; i < A.length/2; i++ ){
Pair temp = A[i];
A[i] = A[A.length - 1 - i];
A[A.length - 1 - i] = temp;
}
}
public static void mergesort_descending( Pair [] A ){
int chunk = 2;
while(true) {
for( int chunkStart = 0; chunkStart < A.length; chunkStart += chunk ){
int start = chunkStart;
int middle = chunkStart + chunk/2;
int end = chunkStart + chunk - 1;
if( middle >= A.length )
break;
if( end >= A.length )
end = A.length - 1;
merge(A, start, middle, end);
}
if( chunk > A.length )
break;
else
chunk *= 2;
}
}
static void merge (Pair [] A, int leftPos, int rightPos, int rightEnd){
int leftEnd = rightPos - 1;
int numElements = rightEnd - leftPos + 1;
Pair [] B = new Pair[numElements];
int bPos = 0;
while (leftPos <= leftEnd && rightPos <= rightEnd) {
if (A[leftPos].nodeRank >= A[rightPos].nodeRank)
B[bPos++] = A[leftPos++];
else
B[bPos++] = A[rightPos++];
}
while (leftPos <= leftEnd)
B[bPos++] = A[leftPos++];
while (rightPos <= rightEnd)
B[bPos++] = A[rightPos++];
leftPos = rightEnd - numElements + 1;
for (bPos = 0; bPos < numElements; bPos ++)
A[leftPos++] = B[bPos];
}
}
|