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

Algorithms4-TOP
Algorithms4-TOP

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

8. 应用场景

  • 渗析模型(Perocolation)
  • 围棋
  • 动态连通性
  • 最近祖先寻找问题
  • 有限状态机的等效问题
  • Matlab中处理图像的bwlabel()函数
    ...

9. 渗析模型(Percolation)

9.1 什么是渗析模型(Percolation)

一个在许多物理系统中都有应用的模型。

  • N * N 个方格构成的正方形
  • 每个方格有 p 的概率是开放的(open)(或者有 1-p 的概率是闭合的(blocked))
  • 当且仅当顶部和底部被开放的方格连起来的时候,系统是连通的(percolates)
Percolates
模型 系统化 开放的格子 闭合的格子 连通
电学 电学材料 导体 绝缘体 导电
液体流通 材料 无液体 有液体 渗漏
社交关系 人群 有共同好友

9.2 连通的概率

取决于方格为空的概率 p

PercolatesOrNot
PercolatesOrNot

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

  • p > p*: 基本确信连通
  • p < p*: 基本确信不连通

问题: p的值是多少?

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

  • 初始化一个有N * N个方格的正方形,其中所有方格均是闭合的(blocked)
  • 不断随机选取方格,让其开放(open),直到顶部和底部连通停止
  • 通过开放的方格数估计p*

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

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

  • 为每个方格创建一个实例节点,编号从0到N-1
  • 如果开放的方格之间有“通路”,说明它们处于同一个分量(Component)(此处参见上一篇文章
  • 当且仅当顶部方格和底部方格支架有通路时,系统连通(暴力算法调用N ^ 2次connected()方法)

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

  • 当虚拟顶部节点和底部节点连通时,整个系统连通(这种情况只需要调用1次connected()方法)


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

改变此节点的状态;该节点和相邻的节点中(共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%置信区间的右边界

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

  • 方格为空的概率p的值
  • 渗析模型(Percolation)中连通阈值(percolation threshold)95%置信区间的范围
  • 测试结果的平均差从而得知计算的稳定性
    ...

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

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

10. 本节课的言外之意

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

  • 对问题建模
  • 找出一个能解决它的算法
  • 这个算法足够快吗?内存占用如何?
  • 如果答案是否的话,找出原因
  • 找到解决方法
  • 不断迭代上述步骤,直到满足要求

参考网址

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,016评论 0 12
  • 本系列文章记录学习的过程。 0. 前言 由于课程授课和课件(Lecture Slides)均为英文,所以文中许多专...
    深海__阅读 2,377评论 1 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,561评论 25 707
  • 转型要趁早,越晚付出的代价越大。 如果真的不喜欢现在在做的工作,并且你又无法调整自己的心态至“干一行爱...
    范范_嘟嘟阅读 188评论 0 1
  • 现在想想,加入007两个月了,就说说我在这两个月经历了什么,学会了什么? 第一次见你007的时候是在得到上看到的,...
    魏_7dbf阅读 155评论 1 0