-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPercolationStats.java
More file actions
61 lines (51 loc) · 2.17 KB
/
PercolationStats.java
File metadata and controls
61 lines (51 loc) · 2.17 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
import edu.princeton.cs.algs4.StdRandom;
import edu.princeton.cs.algs4.StdStats;
import edu.princeton.cs.algs4.StdOut;
public class PercolationStats {
private double[] openSites;
private int t;
private static final double CONFIDENCE_95 = 1.96;
public PercolationStats(int n , int trials) {
if (n <= 0 || trials <= 0 ) throw new IllegalArgumentException("n <= 0 or trials <=0 ");
this.t = trials;
openSites = new double[trials];
for (int i = 0; i < trials ; i++ ) {
Percolation perc = new Percolation(n);
int openedSites = 0;
while (!perc.percolates()) {
int j = StdRandom.uniform(1 , n + 1);
int k = StdRandom.uniform(1 , n + 1);
if (!perc.isOpen(j , k)){
perc.open(j , k);
openedSites++;
}
}
openSites[i]=(double) openedSites / (n * n);
}
}
public double mean() {
return StdStats.mean(openSites);
}
public double stddev() {
return StdStats.stddev(openSites);
}
public double confidenceLo() {
return mean() - CONFIDENCE_95 * stddev() / Math.sqrt(t);
}
public double confidenceHi() {
return mean() + CONFIDENCE_95 * stddev() / Math.sqrt(t);
}
public static void main(String[] args) {
int n = Integer.parseInt( args[0] );
int t = Integer.parseInt( args[1] );
PercolationStats ps = null;
try {
ps = new PercolationStats(n , t);
} catch (IllegalArgumentException e) {
StdOut.println( e.getMessage() );
}
StdOut.println( "mean = " + ps.mean() );
StdOut.println( "stddev = " +ps.stddev() );
StdOut.println( "95% confidence interval = [" + ps.confidenceLo() +","+ ps.confidenceHi() + "]" );
}
}