Coursera 普林斯顿 算法 编程作业 Percolation

这篇博客详细介绍了渗流系统的概念,使用n×n网格模型进行建模,并探讨了在随机分布的开放站点中,系统连通的概率问题。文章涉及的编程作业包括创建Percolation类,实现API,并通过PercolationStats进行测试,得出在不同概率p下,系统的渗透概率。结果表明,当p接近0.592时,系统最有可能发生渗透。

问题描述

渗流系统

给定一个复合系统,该系统由随机分布的绝缘材料和金属材料组成:哪些材料需要是金属的才能使该复合系统成为电导体? 如果表面上有水(或下面的油)是多孔的,那么在什么条件下水能够排到底部(或油涌到表面)? 科学家已经定义了称为渗流的抽象过程来对这种情况进行建模。

模型

使用n到n的网格对渗滤系统进行建模。 每个站点都是打开的或者关闭的。 完整(full)站点是一个开放站点,可以通过一系列相邻的(左,右,上,下)开放站点连接到最上面一行中的开放站点。 我们说如果底部一行有一个完整的站点,系统就会渗入。 换句话说,如果我们填充了连接到第一行的所有开放站点,并且该过程填充了第二行的一些开放站点,则系统会发生渗漏。 (对于绝缘/金属材料,空位对应于金属材料,因此渗透的系统具有从顶部到底部的金属路径,且具有完整的位点导电。对于多孔物质,例如,空位对应于空的空间 水可能会通过它流动,从而使渗透的系统让水充满开放的位置,从上到下流动。)如下图所示:
Model

问题

在一个著名的科学问题中,研究人员对以下问题感兴趣:如果将站点独立设置为以概率p开放(并因此以概率1- p封闭),那么系统连通的概率是多少? 当p等于0时,系统不会渗透;当p等于0时,系统不会渗透。 当p等于1时,系统渗透。 下图显示了20 x 20随机网格(左)和100 x 100随机网格(右)的站点空缺概率p与渗透概率。
在这里插入图片描述
以下为编程作业的链接:
Programming Assignment 1:Percolation

代码实现

API

public class Percolation {
   
   

    // creates n-by-n grid, with all sites initially blocked
    public Percolation(int n)

    // opens the site (row, col) if it is not open already
    public void open(int row, int col)

    // is the site (row, col) open?
    public boolean isOpen(int row, int col)

    // is the site (row, col) full?
    public boolean isFull(int row, int col)

    // returns the number of open sites
    public int numberOfOpenSites()

    // does the system percolate?
    public boolean percolates()

    // test client (optional)
    public static void main(String[] args)
}

需要注意的情况

按照惯例,行索引和列索引是1到n之间的整数,其中(1,1)是左上角的站点:如果open(),isOpen()或isFull()的任何参数不在其抛出的位置,则抛出IllegalArgumentException 规定范围。 如果n≤0,则在构造函数中引发IllegalArgumentException。

Percolation类的实现

/* *****************************************************************************
 *  Name:              Alan Turing
 *  Coursera User ID:  123456
 *  Last modified:     1/1/2019
 **************************************************************************** */

import edu.princeton.cs.algs4.WeightedQuickUnionUF;

public class Percolation {
   
   
    private int[] grid;
    private WeightedQuickUnionUF uf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值