import java.util.*; import java.io.*; public class AnalyseDEC { private static double kappa(int n,int k,double p){ double kappa = (k*(k-1)*Math.log(1.0/(1.0 - p)))/(2.0 *(logFactorial(n) - logFactorial(k) - logFactorial(n-k)));; return kappa; } private static double logFactorial(int n){ double fac = 0; for (int a = 2; a <= n; a++) fac += Math.log(a); return fac; } private static void show(long[]x){ int n = x.length; for (int i=0;i<n;i++) System.out.print(x[i] + " "); System.out.println(); } private static long average(long[]x){ int n = x.length; long sum = 0; for (int i=0;i<n;i++) sum = sum + x[i]; return sum/n; } private static double geometricMean(long[]x){ int n = x.length; double logSum = 0.0; for (int i=0;i<n;i++) logSum = logSum + Math.log((double)x[i]); return Math.exp(logSum/(double)n); } private static long median(long[]x){ int n = x.length; Arrays.sort(x); return x[n/2]; } private static long min(long[]x){ int n = x.length; long min = x[0]; for (int i=1;i<n;i++) min = Math.min(min,x[i]); return min; } private static long max(long[]x){ int n = x.length; long max = x[0]; for (int i=1;i<n;i++) max = Math.max(max,x[i]); return max; } private static void stats(String style,int n,int p,int k,int lwb,int upb) throws IOException { int count = 0; int sat = 0; String fname = ""; long[] nds = new long[upb-lwb+1]; // nodes visited long[] solveTime = new long[upb-lwb+1]; // milliseconds for (int i=lwb;i<=upb;i++){ if (i < 10) fname = "results/"+ style +"-"+ k +"-"+ n +"-"+ p +"-0"+ i +".txt"; else fname = "results/"+ style +"-"+ k +"-"+ n +"-"+ p +"-"+ i +".txt"; Scanner sc = new Scanner(new File(fname)); if (sc.next().equals("true")) sat++; nds[count] = sc.nextLong(); solveTime[count] = sc.nextLong(); count++; sc.close(); } System.out.format("%d %.2f %d ",n,((float)p)/100.0,k); System.out.print(average(nds) +" "+ min(nds) +" "+ median(nds) +" "+ max(nds) +" "); System.out.print(average(solveTime) +" "+ min(solveTime) +" "+ median(solveTime) +" "+ max(solveTime) +" "); System.out.print(((sat * 100)/count) +" "); //System.out.format("%.2f -- ",geometricMean(nds)); System.out.format("%.2f ",kappa(n,k,((double)p)/100.0)); System.out.println(); } public static void main(String[] args) throws IOException { String style = args[0]; int n = Integer.parseInt(args[1]); // vertices in a graph int p = Integer.parseInt(args[2]); // edge probability int kLo = Integer.parseInt(args[3]); // size of independent set int kHi = Integer.parseInt(args[4]); // size of independent set int lwb = Integer.parseInt(args[5]); // index of 1st results file int upb = Integer.parseInt(args[6]); // index of last results file for (int k=kLo;k<=kHi;k++) stats(style,n,p,k,lwb,upb); } }