`
leonzhx
  • 浏览: 794270 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Union-Find

阅读更多

1. Dynamic Connectivity Problem :

    a)  Union command : connect two objects

    b)  Find/connected query: is there a path connecting the two objects?

 

2. Quick-find

    a) Integer array id[] of size N

    b) Interpretation: p and q are connected iff they have the same id.

    c) Find: Check if p and q have the same id.

    d) Union : To merge components containing p and q, change all entries whose id equals id[p] to id[q].

    Find is quick which only takes 2 array access. Union is expensive , it cost N array access and N union will cost N^2

 

3. Quick-union

    a) Integer array id[] of size N.
    b) Interpretation: id[i] is parent of i.
    c)  Root of i is id[id[id[...id[i]...]]].

    d)  Find: Check if p and q have the same root.

    e)  Union: To merge components containing p and q, set the id of p's root to the id of q's root.

    Both Union and Find can be expensive in worst case.

 

4.  Quick-find defect:
    a) Union too expensive (N array accesses).
    b) Trees are flat, but too expensive to keep them flat.

      Quick-union defect.
    a) Trees can get tall.
    b) Find too expensive (could be N array accesses).

 

5.  Weighted quick-union.
    a)  Modify quick-union to avoid tall trees.
    b)  Keep track of size of each tree (number of objects).
    c)  Balance by linking root of smaller tree to root of larger tree.

    Proposition: Depth of any node x is at most lg N.

    Pf. When does depth of x increase?
    Increases by 1 when tree T1 containing x is merged into another tree T2.
      1)  The size of the tree containing x at least doubles since | T 2 | ≥ | T 1 |.
      2)  Size of tree containing x can double at most lg N times. (the total # of nodes is at most N)

 

6.  Quick union with path compression: Just after computing the root of p, set the id of each examined node to point to that root.

    Two-pass implementation: add second loop to root() to set the id[] of each examined node to the root.
    Simpler one-pass variant: Make every other node in path point to its grandparent (thereby halving path length).

 

 

 

分享到:
评论

相关推荐

    基于Union-Find的Kruskal算法C++实现

    - `class UnionFind`:自定义的并查集类,包括 `find()`(查找顶点所属集合的根节点)和 `unionSet()`(合并两个集合)等方法。 - `void kruskalMST()`:Kruskal算法的主要函数,进行上述步骤。 在代码设计和变量...

    Union-Find: A Data Structure for Disjoint Set Operations

    ### Union-Find: 数据结构与不交集操作 #### 一、引言 在计算机科学领域,特别是数据结构的研究中,**Union-Find**(并查集)是一种用于处理一些不交集(Disjoint Sets)合并及查询问题的重要数据结构。这种数据...

    Union-find压缩路径最小生成树

    利用Union-find算法实现路径压缩最小生成树,使用c编写

    node-union-find:这是 Node.js 中 union-find 数据结构的一个实现

    联合查找 这是 Node.js 中 union-find 数据结构的一个实现。 在做个人项目时,我没有找到适合我需求的 NPM 模块并创建了它。 如果有人对此模块感兴趣,或者想要... 使用 UnionFind#inSameGroup 确定两个节点是否在同一

    前端大厂最新面试题-union-find.docx

    并查集(Union-Find)是一种在图论和算法设计中常见的数据结构,主要用于处理一些不相交集合的合并与查询问题。它在前端开发面试中也是一个重要的考察点,因为并查集可以解决许多实际场景中的问题,如网络连接、社交...

    并查集(Union-Find)介绍.zip

    并查集(Union-Find)是一种用于处理连接关系的数据结构,它在计算机科学中有着广泛的应用,尤其是在图论、算法设计以及数据结构的学习中。这个数据结构的主要目标是高效地解决“查找”和“合并”两个操作,常用于...

    数据结构--并查集(Union-Find Sets)

    并查集(Union-Find Sets)是数据结构中一种用于管理元素集合的高效算法,它主要处理两个操作:连接(union)与查找(find)。在并查集中,元素被分到不同的集合中,每个集合代表一个独立的组件。连接操作将两个元素...

    data.union-find:Union-Find 数据结构的 Clojure 实现

    data.union-find 使用 Tarjan 的联合查找算法的持久不相交集森林的 Clojure 实现。 可通过在莱宁根: [org.jordanlewis/data.union-find "0.1.0"] 用法 创建一个新的 union-find 数据结构,包含其作为单例集的...

    UnionFind-2x2.pdf

    Union-Find数据结构 Union-Find数据结构是一种特殊的数据结构,用于管理一组不相交的集合(Disjoint-sets),支持三个基本操作:MAKE-SET、FIND和UNION。这种数据结构广泛应用于解决动态连通性问题,例如图形算法、...

    实验一:渗透问题(Percolation)1

    1. **合并-查找(Union-Find)数据结构**:这是解决渗透问题的关键。在这个问题中,我们有一个n*n的网格,每个点可以是Open或Closed状态。当最底部的点与最顶端的点连通时,我们认为系统是渗透的。使用并查集可以...

    数据结构:并查集 Union-Find算法(不相交集)原理及C++实现.zip

    数据结构、算法相关的资源 数据结构、算法相关的资源 数据结构、算法相关的资源 数据结构、算法相关的资源 数据结构、算法相关的资源 数据结构、算法相关的资源 数据结构、算法相关的资源 数据结构、算法相关的资源 ...

    dset:具有路径压缩和按等级并集的无锁并行不相交集数据结构(也称为UNION-FIND)

    这是UNION-FIND数据结构的小型独立C ++ 11实现,具有按等级压缩和按路径合并以及一些附加功能。它支持并发find() , same()和unite()调用,如本文所述 联合发现问题的免等待并行算法,作者:Richard J. Anderson和...

    Disjoint-Sets-using-Union-Find:使用联合查找和树进行路径压缩的不相交集

    在这个实现中,`Disjoint-Sets-using-Union-Find-main`可能是主程序文件,它包含了测试用例,用于验证DisjointSet类的正确性和性能。可能包括一些示例,比如模拟图中的边连接,然后使用不相交集来检测图中是否存在...

Global site tag (gtag.js) - Google Analytics