Union-find 可以应用在很多方面

之前我们看到了union-find在dynamic connectivity上的应用,接下来介绍它在percolation上的应用。

union-find在Kruskal's minumum spanning tree algorithm(一种图像处理算法)上也有应用(之后会介绍)

Percolation问题

percolate问题是很多物理系统的模型。

白色代表是open site,黑色是blocked site。如果从顶到底可以由open sites相连,则它是percolates,否则不是percolate.

percolation model的一些例子

可以用来判断一个物体是否导电,可以判断一个物体是否渗水,还可以用来判断两个人之间是否有联系。

medium vacancy是否percolation

如果vacancy的概率是low(0.4),则由上图可知,它是not percolate

如果vacancy的概率是medium(0.6),则由上图可知,它可能percolate,也可能不会。

如果vacancy的概率是high(0.8),则由上图可知,它是percolate.

那么当我们遇到medium vacancy时,我们怎么才能知道是否是percolate呢?

Percolation phase transition(相变):如何找到这个threshold P*(临界点)

Monte Carlo simulation:有计算机来解决找到这个threshold P*的问题

初使化时都是blocked,随机的使site变成open,直到它成为percolation时的vacancy比率,即为p*

我们可以在计算机上对这个模拟运行很多次来计算,找到这个P*在数学上是不可以实现的,但是在计算机上却是可以实现

用dynamic connectivity来估计P*  

         

看上面的一排与底下的一排是否相连,但是这样做并不好,因为这样会运行n2次connected来判断,导致运行非常慢,那么我们该怎么办呢?

如右图所示,我们创建两个虚拟的site(virtual top site和virtual bottom site),这样只需要判断top site与bottom site是否相连就可以了。(只需要运行一次connected())

用dynamic connectivity来估计P* :怎么model opening a new site

当opening a new site时,将它与邻近的也是open的site的相连(最多4个),通过调用union操作来执行

Percolation threshold

这样我们通过运行这个simulation来计算出这个P*(这在数学上是不可能计算出来的),我们只有通过fast的算法才能实现这个问题(因为这类问题的N与M一般来说都很大)

总结

通过以上这些我们可以看到解决问题的基本步骤,首先我们会对问题进行建模,将问题抽象出来;

然后找到算法来实现它,之前介绍的quick-find 与quick-union算法都不是好的算法(对于解决huge problem来说),故我们不断的通过迭代来寻找高效的算法,即weighted quick-union with path compression

Union-Find(并查集): Union-Find Application的更多相关文章

  1. 并查集(Union/Find)模板及详解

    概念: 并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图.求最小生成树的Kruskal 算法和求最近公共祖先等. 操作: 并查集的基本操作有两个 ...

  2. POJ 1611 The Suspects 并查集 Union Find

    本题也是个标准的并查集题解. 操作完并查集之后,就是要找和0节点在同一个集合的元素有多少. 注意这个操作,须要先找到0的父母节点.然后查找有多少个节点的额父母节点和0的父母节点同样. 这个时候须要对每 ...

  3. Java 并查集Union Find

    对于一组数据,主要支持两种动作: union isConnected public interface UF { int getSize(); boolean isConnected(int p,in ...

  4. <算法><Union Find并查集>

    Intro 想象这样的应用场景:给定一些点,随着程序输入,不断地添加点之间的连通关系(边),整个图的连通关系也在变化.这时候我们如何维护整个图的连通性(即判断任意两个点之间的连通性)呢? 一个比较简单 ...

  5. 最小生成树(Minimum Spanning Tree)——Prim算法与Kruskal算法+并查集

    最小生成树——Minimum Spanning Tree,是图论中比较重要的模型,通常用于解决实际生活中的路径代价最小一类的问题.我们首先用通俗的语言解释它的定义: 对于有n个节点的有权无向连通图,寻 ...

  6. bzoj1854 [Scoi2010]游戏【构图 并查集】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1854 没想到怎么做真是不应该,看到每个武器都有两个属性,应该要想到连边构图的!太不应该了! ...

  7. [leetcode] 并查集(Ⅰ)

    预备知识 并查集 (Union Set) 一种常见的应用是计算一个图中连通分量的个数.比如: a e / \ | b c f | | d g 上图的连通分量的个数为 2 . 并查集的主要思想是在每个连 ...

  8. 并查集(Union Find)的基本实现

    概念 并查集是一种树形的数据结构,用来处理一些不交集的合并及查询问题.主要有两个操作: find:确定元素属于哪一个子集. union:将两个子集合并成同一个集合. 所以并查集能够解决网络中节点的连通 ...

  9. 并查集 (Union Find ) P - The Suspects

    Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...

  10. 并查集(Disjoint Set Union,DSU)

    定义: 并查集是一种用来管理元素分组情况的数据结构. 作用: 查询元素a和元素b是否属于同一组 合并元素a和元素b所在的组 优化方法: 1.路径压缩 2.添加高度属性 拓展延伸: 分组并查集 带权并查 ...

随机推荐

  1. 一、Spring之组件注册-@Configuration&@Bean给容器中注册组件

    xml配置方式 首先我们创建一个实体类Person public class Person { private String name; private Integer age; private St ...

  2. TCP/IP学习笔记16--TCP--特点,数据重发,连接管理,段

    TCP充分实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的包进行顺序控制,这些在UDP中都是没有的.UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议.TCP是面向有 ...

  3. ubuntu18.04LTS服务器用vituralenv安装和配置pytorch和tensorflow

    ============tensorflow================= $ python3 -m venv tf14====输入例子====# $ vim ~/.bashrc #(添加如下行, ...

  4. Java开发笔记(一百二十八)Swing的图标

    前面提过,AWT没提供能够直接显示图像的控件,这无疑是个令人诟病的短板,因为一上来就得由程序员自己去定义新控件,对于初学者来讲很不友好.这个问题在Swing中也解决掉了,不过Swing并未提供单独的图 ...

  5. C++中的强制类型转换

    在C语言中,强制类型转换的方式为(Type)Expression,另外还有一种现在已经不用的旧式写法Type(Expression),这两种方式是等价的. 但是,C语言的强制类型转换方式存在一些问题: ...

  6. python_scratch教程:绘制荧光圈教程

    在演唱会中,出现最多的就是荧光棒,很多粉丝也都会举着荧光棒为自己的爱豆加油,当然也会有一些人用的荧光圈,为此南京小码王scratch培训机构,就想到了和小朋友一起绘制荧光圈,现在我们就一起来看看吧! ...

  7. Django-03-静态文件配置

    一.django静态文件配置原理 静态文件配置就是为了让用户请求时django服务器能找到静态文件返回. 首先要理解几个概念: 媒体文件:用户上传的文件 静态文件:css,js,image等 开发环境 ...

  8. bootstrap Modal或者 bootbox弹窗时,页面混动至顶部

    bootstrap使用Modal时,页面自动滚动至了最顶部, 调用bootbox时,也是如此 查了半天资料,最后参考下述帖子,解决问题 https://stackoverflow.com/questi ...

  9. mysql_select 单表查询

    select *         *代表全部   查询多个字段 select  字段1,字段2,字段3   聚合函数  count(*)       统计 select count(*)       ...

  10. promise实现

    目录 promise实现 Promise 是 ES6 新增的语法,解决了回调地狱的问题. 可以把 Promise 看成一个状态机.初始是 pending 状态,可以通过函数 resolve 和 rej ...