package edu.cmu.graphchi.walks;
import java.io.*;
/**
* Analyzes walks produced by the DrunkardMob and computes
* a <b>global distribution</b>
*/
public class WalkDistributionAnalyzer {
public static double[] analyzeGlobal(final String directory, final String prefix, final int numVertices) throws IOException {
File dir = new File(directory);
int[] counts = new int[numVertices];
/* Get files */
String[] files = dir.list(new FilenameFilter() {
@Override
public boolean accept(File file, String s) {
return s.startsWith(prefix);
}
});
long totalVisits = 0;
System.out.println("Analyzing " + files.length + " files.");
for(String file : files) {
File resultFile = new File(dir, file);
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(resultFile)));
try {
int source = dis.readInt();
int dest = dis.readInt();
totalVisits++;
counts[dest]++;
} catch (EOFException e) {}
}
/* Compute final distribution */
double[] ranks = new double[numVertices];
for(int i=0; i < ranks.length; i++) ranks[i] = counts[i] * 1.0 / totalVisits;
return ranks;
}
}