zoukankan      html  css  js  c++  java
  • 集合及运算

    集合的表示

    • 集合运算:交、并、补、差,判定要给元素是否属于某一集合
    • 并查集:集合并、查某元素属于什么集合

    并查集问题中集合存储如何实现?

    >>可以用树结构表示集合,树的每个结点代表一个集合元素

    1. 采用数组存储形式

    数组中每个元素的类型描述为:

    typedef struct {
        ElementType Data;
        int Parent;
    }SetType;

    集合运算

    (1)查找某个元素所在的集合(用根结点表示)

    int Find(SetType S[], ElementType X)
    {
        /* 在数组S中查找值为X的元素所属的集合 */
        /* MaxSize是全局变量,为数组S的最大长度 */
        int i;
        for(i=0;i<MaxSize&&S[i].Data!=X;i++) ;
        if(i>=MaxSize) return -1;   /* 未找到X,返回-1 */
        for(;S[i].Parent>=0;i=S[i].Parent) ;
        return i;                   /* 找到X所属集合,返回树根结点在数组S中的下标 */
    }

    (2)集合的并运算

    • 分别找到X1和X2两个元素所在集合树的根结点
    • 如果他们不同根,则将其中一个根结点的父结点指针设置成另一个根结点的数组下标
    void Union(SetType S[], ElementType X1, ElementType X2)
    {
        int Root1, Root2;
        Root1 = Find(S, X1);
        Root2 = Find(S, X2);
        if(Root1 != Root2) S[Root2].Parent = Root1;
    }

    小的集合合并到大的集合中,根结点的parent用负号加数字(总共的大小)表示

    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    夺命雷公狗TP3.2.3商城11-----后台头部和左侧导航分离
    夺命雷公狗TP3.2.3商城10-----中间层的创建,防止跨目录访问
    3.spring cloud eureka 高可用
    2.spring cloud eureka client配置
    1.spring cloud eureka server配置
    css去掉input记住密码的黄色
    34-THREE.JS 游泳圈
    32-THREE.JS 球体
    31-THREE.JS 正方体
    30-THREE.JS 圆环
  • 原文地址:https://www.cnblogs.com/ch122633/p/8847637.html
Copyright © 2011-2022 走看看