Algorithms 4

算法4(Algorithms4)- Part 1 动态连通性(

2017-10-14  本文已影响0人  深海__
Percolates
模型 系统化 开放的格子 闭合的格子 连通
电学 电学材料 导体 绝缘体 导电
液体流通 材料 无液体 有液体 渗漏
社交关系 人群 有共同好友

9.2 连通的概率

取决于方格为空的概率 p

PercolatesOrNotPercolatesOrNot

当N很大时,理论证实存在一个陡峭的临界点p*。

问题: p的值是多少?

9.3 蒙特卡罗模拟(Monte Carlo simulation)

9.4 通过动态连通性(Dynamic Connectivity)方法估计连通阈值(percolation threshold)

怎么检测一个 N * N的系统是连通的呢?

一个小技巧:创建两个虚拟的节点,分别连接顶部所有节点和底部所有节点。

怎么模拟开放一个新节点?

改变此节点的状态;该节点和相邻的节点中(共4个)开放的节点相连

连通阈值(percolation threshold)
连通阈值p* 是多少?
根据大量的仿真实验得出p* 大约为0.592746。


好的算法是 可以 对科学问题得出较为精确的答案。

9.5 编程作业(Programming Assignment - Percolation)

其中要求实现Percolation.javaPercolationStats.java 两个文件。
实现这两个文件之后,打包提交到系统中,系统会对两个文件进行详尽的测试,之后给出分数。

Percolation.java 的 API


具体方法的作用
public class Percolation
public Percolation(int n) 创建一个有 n * n 个节点的阵列,每个节点都是封闭的
public void open(int row, int col) 如果节点(row, col)未打开,将其打开
public boolean isFull(int row, int col) 判断节点(row, col)是否是满的(即与顶部连通)
public int numberOfOpenSites() 已经打开的节点数量
public boolean percolates() 整个系统是否连通

PercolationStats.java 的 API

具体方法的作用

public class PercolationStats
public PercolationStats(int n, int trials) 在 n * n 个节点的阵列上进行trial次独立重复实验
public double mean() 测试用例连通阈值(percolation threshold)的平均值
public double stddev() 连通阈值的平均差
public double confidenceLo() 计算结果95%置信区间的左边界
public double confidenceHi() 计算结果95%置信区间的右边界

通过这些方法能解决的问题

关于作业,此处不再详述,因为后面会给出代码,代码中有详细的注释。

可参见参考网址中课程作业的地址,其中有详细要求,作业代码的实现也一并在参考网址中给出。

10. 本节课的言外之意

逐渐实现一个可用的算法步骤:

参考网址

[1] 课程作业 (Assignment - Percolation)
[2] 作业的一个实现
[3] 课件下载(Lecture Slides)

上一篇 下一篇

猜你喜欢

热点阅读