forked from zafarmah92/Perculation
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPercolationStats.java
More file actions
97 lines (70 loc) · 2.67 KB
/
Copy pathPercolationStats.java
File metadata and controls
97 lines (70 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
public class PercolationStats {
private int N;
private int T;
private double[] results;
public PercolationStats(int N, int T) {
if (N <= 0 || T <= 0) {
throw new java.lang.IllegalArgumentException(
"N or T must be greater than 0");
}
this.N = N;
this.T = T;
results = new double[T];
for (int t = 0; t < T; t++) {
results[t] = run();
}
}
private double run() {
Percolation percolation = new Percolation(N);
double count = 0;
while (!percolation.percolates()) {
count++;
//pick a random site
//(N+1 because second value to uniform is exclusive)
int i = StdRandom.uniform(1, N+1);
int j = StdRandom.uniform(1, N+1);
//generate new random sites until a blocked one is found
while (percolation.isOpen(i, j)) {
i = StdRandom.uniform(1, N+1);
j = StdRandom.uniform(1, N+1);
}
//open that site
percolation.open(i, j);
}
return count / (N*N); //percolation threshold estimate
}
public double mean() {
return StdStats.mean(results);
}
public double stddev() {
return StdStats.stddev(results);
}
public double confidenceHi() {
return mean() - 1.96 * stddev() / Math.sqrt(T);
}
public double confidenceLo() {
return mean() + 1.96 * stddev() / Math.sqrt(T);
}
public static void main(String[] args) {
int N;
int T;
if (args.length == 0) {
N = 100;
T = 10;
} else {
N = Integer.parseInt(args[0]);
T = Integer.parseInt(args[1]);
}
//double startTime = System.nanoTime();
PercolationStats stats = new PercolationStats(N, T);
double confidenceLow = stats.confidenceHi();
double confidenceHigh = stats.confidenceLo();
System.out.println("mean = " + stats.mean());
System.out.println("stddev = " + stats.stddev());
System.out.println("95% confidence interval = " + confidenceLow
+ ", " + confidenceHigh);
// performance measuring
//double endTime = System.nanoTime();
//System.out.println("time cost: " + (endTime - startTime));
}
}