public class ex4test { static void test (String testName, int numTrials, int listSize, int moveDistance, boolean isUniform) { Ex4LinkedList list = new Ex4LinkedList (); for (int i=1; i<=listSize; i++) list.insertAtEnd (""+i); /* Now, repeat over a number of trials and estimate average. */ double totalDist = 0; for (int n=0; n 0) r_seed = t; else r_seed = t + m; return ( (double) r_seed / (double) m ); } static long discrete_uniform (long a, long b) { if (b > a) { double x = uniform (); long c = ( a + (long) Math.floor((b-a+1)*x) ); return c; } else if (a == b) return a; else { System.out.println ("ERROR in uniform.discrete_uniform(): a="+a+" b="+b); return 0; } } static int generateFromPmf (double[] pmf, int length) { int lastIndex, i; double u, sum; if ( ( pmf == null) || (length <= 1) ){ System.out.println ("ERROR: in uniform.generateFromPmf(): pmf null or zero-length"); return 0; } lastIndex = length - 1; u = uniform(); i = 0; sum = pmf[0]; while ( (i < lastIndex) && (u > sum) ) { i++; sum += pmf[i]; } return i; } static int reverseZipf (int size) { double[] pmf; double sum; int index, i; pmf = new double [size+1]; pmf[0] = 0; sum = 0; for (i=1; i<=size; i++) { pmf[i] = 1.0 / (double) (size-i+1); sum += pmf[i]; } for (i=1; i<=size; i++) { pmf[i] = pmf[i] / sum; } index = generateFromPmf (pmf, size+1); if (index == 0) index = 1; return index; } }