首页 > 代码库 > 并查集问题
并查集问题
并查集问题主要用于方便地查询任意个体间有没有关系。
初始个体间的关系没有全局性,是局部、分散的,并查集问题要根据已有的局部分散关系分析得到全局关系。
核心思想:根据关系对个体进行分类、贴标签。把属于一类的都贴上一个标签,可以清楚地分辨哪一个是哪一类,不同的是不是同一类。
具体方法:
为了给同一类贴上一样的标签,涉及两个问题,一个是查询标签,一个是更新标签。查询标签是为了判断是否要合并为同类,更新标签是为了合并后将标签统一。
因为标签对同类个体是公共属性,要放在公共位置。
容易想到的是链表,可以指向同一个位置,查询开销小,更新开销大。
另外就是树结构,将根节点作为同类的标签,查询开销大,更新开销小。
进一步优化:
1. 合并的时候将小类向大类合并,这样相对更新数量少些。
2. 在使用树的时候采用“路径压缩”的技巧,p(x) <- FindSet(p(x)) 的方法将x的父节点提升上去。A->B->C,经过此操作,A跨越B直接指向C。
并查集问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。