• 并查集的一些理解


    并查集:一种树型的数据结构,用于处理不交集的合并及查询问题。

    先直接给出代码:

     1 // 初始化F[i]=i;即每个节点的父节点都是自己
     2 
     3 // 查找一个数据属于哪一个集合,也就是返回这个集合的根节点
     4 int find(int x){
     5 // 查找根节点,根节点就代表着一个集合
     6 int b=x;
     7 while(F[x]!=x) x=F[x];
     8  // 路径压缩,将路径上的每个点指向根节点x
     9 while(F[b]!=x){
    10 int p=F[b];    // 当前节点的父节点
    11 F[b]=x;       // 本节点指向根节点
    12 b=p;           // 因为当前元素可能是热元素,为加速这个元素的查找,父节点也要继续指向根节点哦;
    13 // 子节点的话还是先跟在我后面吧,下次查到你或你的子孙节点再说;
    14 }
    15 return x;
    16 }
    17 
    18 // 合并集合:把两个根节点合并(一个根节点做为另一个根节点的子节点)
    19 int Union(int x,int y){
    20 F[find(x)]=find(y);
    21 return find(y);
    22 }
    23  

    假设我们现在有6个集合{0}{1}{2}{3}{4}{5},

    • 先合并0和1:F[0]=1;    1->0  
    • 再合并0和2:F[1]=2;     2->1->0
    • 再合并0和3:F[2]=3;     3->2->{1,0}

    如果需要统计集合的个数,以及集合中元素的个数,那就这么改

     

    心之所愿,永不相忘
  • 相关阅读:
    wxpython仿写记事本
    HIVE提交command过程图
    SQL编辑器自动提醒实现
    hive.sh的内容分析
    Hive配置项的含义详解(5)
    比特币、莱特币来一发?
    引导孩子从“打针有点疼”开始
    For Wife
    我是真的爱你
    .net core 添加本地dll
  • 原文地址:https://www.cnblogs.com/zgll/p/15508423.html
Copyright © 2020-2023  润新知