《算法导论》第21章 用于不相交集合的数据结构 个人笔记

第21章 用于不相交集合的数据结构

21.1 不相交集合的操作

用一个对象表示一个集合的每个元素,设x表示一个对象,希望支持以下三个操作:

  • MAKE-SET(x):建立一个新的集合,它的唯一成员(因而为代表)是x。因为各个集合是不相交的,故x不会出现在别的某个集合中。
  • UNION(x,y):将包含x和y的两个动态集合(表示为 Sx,Sy )合并成一个新的集合,即这两个集合的并集。
  • FIND-SET(x):返回一个指针,这个指针指向包含x的(唯一)集合的代表。

不相交集合数据结构的许多应用之一是确定无向图的连通分量。下面伪代码中,图G的顶点集用G.V表示,边集用G.E表示

CONNECTED-COMPONENTS(G){
    for each vextex v in G.V
        MAKE-SET(v)
    for each edge(u,v) in G.E
        if FIND-SET(u) != FIND-SET(v)
            UNION(u,v)
}

SAME-COMPONENT(u,v){
    if FIND-SET(u) == FIND-SET(v)
        return TRUE
    else
        return FALSE
}

21.2 不相交集合的链表表示

每个集合用一个自己的链表来表示。每个集合的对象包含head属性和tail属性,head属性指向表的第一个对象,tail属性指向表的最后一个对象。链表中的每个对象都包括一个集合成员、一个指向链表中下一个对象的指针和一个指回到集合对象的指针。

21.3 不相交集合森林

MAKE-SET(v){
    x.p = x
    x.rank = 0
}

UNION(u,v){
    LINK(FIND-SET(u),== FIND-SET(v))
}

LINK(x,y){
    if x.rank > y.rank
        y.p = x
    else
        x.p = y
        if x.rank == y.rank
            y.rank++
}

FIND-SET(x){
    if x != x.p
        x.p = FIND-SET(x.p)
    return x.p
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值