Programming Assignment 1: Percolation
作业网址如下:
http://coursera.cs.princeton.edu/algs4/assignments/percolation.html
正文
--------------------------------------------------------------
第一章的作业需要制作两个类
第一个Percolation包含五个方法,主要是用来打开渗漏的格子。
第二个类PercolationStats 同样有五个方法,用来找出N*N格子中,能够产生渗漏的阈值概率的95%置信区间。
先说一下大概的想法和原理。
官网上提供有这道题目的思路,就是在创建格子的过程中首先要在顶层和底层各加一层,
这样的话在测试是否渗漏时直接测试(0,1)和(N+1,1)就好了
首先来说下第一个类:
官网的API已经写好:
1.构造函数 public Percolation(int N)
运用了虚拟节点的方法,把坐标(i,j)转化为(i*N+J),这样能更直观的找到坐标点的位置。
可以直接使用quick-find 和quick-union。
为了实现这个目标,调用WeightedQuickUnionUF创建了一个((N+1)*(N)+N+1)的一位数组。
第零排和第N+1排用来判断是否渗漏,而第零列被整体抛弃。
这样的做法是浪费了一定的存储空间,若非为了查找坐标方便,采用N*N+2个格子也是足够用的。
2.public void open(int i, int j)
判断该点是否打开,如果打开则结束。未打开则与上下左右四个点连接。
3.public boolean isOpen(int i, int j)
只需要返回该点的开闭状态值;
4.public boolean isFull(int i, i
第一个Percolation包含五个方法,主要是用来打开渗漏的格子。
第二个类PercolationStats 同样有五个方法,用来找出N*N格子中,能够产生渗漏的阈值概率的95%置信区间。
先说一下大概的想法和原理。
官网上提供有这道题目的思路,就是在创建格子的过程中首先要在顶层和底层各加一层,
这样的话在测试是否渗漏时直接测试(0,1)和(N+1,1)就好了
首先来说下第一个类:
官网的API已经写好:
public class Percolation {
public Percolation(int N) // create N-by-N grid, with all sites blocked
public void open(int i, int j) // open site (row i, column j) if it is not open already
public boolean isOpen(int i, int j) // is site (row i, column j) open?
public boolean isFull(int i, int j) // is site (row i, column j) full?
public boolean percolates() // does the system percolate?
public static void main(String[] args // test client (optional)
}
1.构造函数 public Percolation(int N)
运用了虚拟节点的方法,把坐标(i,j)转化为(i*N+J),这样能更直观的找到坐标点的位置。
可以直接使用quick-find 和quick-union。
为了实现这个目标,调用WeightedQuickUnionUF创建了一个((N+1)*(N)+N+1)的一位数组。
第零排和第N+1排用来判断是否渗漏,而第零列被整体抛弃。
这样的做法是浪费了一定的存储空间,若非为了查找坐标方便,采用N*N+2个格子也是足够用的。
2.public void open(int i, int j)
判断该点是否打开,如果打开则结束。未打开则与上下左右四个点连接。
3.public boolean isOpen(int i, int j)
只需要返回该点的开闭状态值;
4.public boolean isFull(int i, i