码迷,mamicode.com
首页 > 其他好文 > 详细

并查集问题

时间:2017-06-22 23:02:56      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:相对   路径   分类   路径压缩   判断   更新   方便   查询   父节点   

并查集问题主要用于方便地查询任意个体间有没有关系。

初始个体间的关系没有全局性,是局部、分散的,并查集问题要根据已有的局部分散关系分析得到全局关系。

核心思想:根据关系对个体进行分类、贴标签。把属于一类的都贴上一个标签,可以清楚地分辨哪一个是哪一类,不同的是不是同一类。

具体方法:

为了给同一类贴上一样的标签,涉及两个问题,一个是查询标签,一个是更新标签。查询标签是为了判断是否要合并为同类,更新标签是为了合并后将标签统一。

因为标签对同类个体是公共属性,要放在公共位置。

容易想到的是链表,可以指向同一个位置,查询开销小,更新开销大。

另外就是树结构,将根节点作为同类的标签,查询开销大,更新开销小。

进一步优化:

1. 合并的时候将小类向大类合并,这样相对更新数量少些。

2. 在使用树的时候采用“路径压缩”的技巧,p(x) <- FindSet(p(x)) 的方法将x的父节点提升上去。A->B->C,经过此操作,A跨越B直接指向C。

并查集问题

标签:相对   路径   分类   路径压缩   判断   更新   方便   查询   父节点   

原文地址:http://www.cnblogs.com/hoopoe/p/7067501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!