渗滤阈值Java算法_Design and Analysis of Algorithms

算法分析与设计上机作业

** (一)渗透问题(Percolation)**

使用合并-查找(union-find)数据结构,编写程序通过蒙特卡罗模拟(Monte Carlo simulation)来估计渗透阈值的值。

安装Java编程环境。 按照以下各步指令,在你的计算机上(操作系统Mac OS X (http://algs4.cs.princeton.edu/mac)· Windows (http://algs4.cs.princeton.edu/windows)· Linux (http://algs4.cs.princeton.edu/linux)安装Java编程环境。执行这些指令后,在你的Java classpath下会有stdlib.jar and algs4.jar。前者包含库:从标准输入读数据、向标准输出写数据以及向标准绘制绘出结果,产生随机数、计算统计量以及计时程序;后者包含了教科书中的所有算法。

给定由随机分布的绝缘材料和金属材料构成的组合系统:金属材料占多大比例才能使组合系统成为电导体? 给定一个表面有水的多孔渗水地形(或下面有油),水将在什么条件下能够通过底部排出(或油渗透到表面)? 科学家们已经定义了一个称为渗透(percolation)的抽象过程来模拟这种情况。

模型。 我们使用N×N网格点来模型一个渗透系统。 每个格点或是open格点或是blocked格点。 一个full site是一个open格点,它可以通过一连串的邻近(左,右,上,下)open格点连通到顶行的一个open格点。如果在底行中有一个full site格点,则称系统是渗透的。(对于绝缘/金属材料的例子,open格点对应于金属材料,渗透系统有一条从顶行到底行的金属路径,且full sites格点导电。对于多孔物质示例,open格点对应于空格,水可能流过,从而渗透系统使水充满open格点,自顶向下流动。)

![

47b502088f8c4559093c1ef477739b38.png]

问题。 ** 在一个著名的科学问题中,研究人员对以下问题感兴趣:如果将格点以空置概率p独立地设置为open格点(因此以概率1-p被设置为blocked格点),系统渗透的概率是多少? 当p = 0时,系统不会渗出; 当p=1时,系统渗透。 下图显示了20×20随机网格(左)和100×100随机网格(右)的格点空置概率p与渗滤概率。

48a26aaf82eca85a0c7b4c43091f7a07.png                 

4676a0fb3c8a5c622dcb07d30391b9c0.png    

当N足够大时,存在阈值p,使得当p

p时,随机N N网格几乎总是渗透。 尚未得出用于确定渗滤阈值p的数学解。你的任务是编写一个计算机程序来估计p*。

Percolation数据类型。 模型化一个Percolation系统,创建含有以下API的数据类型Percolation。

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 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</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值