才接触到union find, 刷题看到很多题都可以用这个数据结构来做。在网上查了一下,发现最容易理解的是quosa上的一个讲解,链接:https://www.quora.com/What-is-an-intuitive-explanation-of-union-find 以及自己模仿的做法:http://blog.csdn.net/xinqrs01/article/details/54571073
用union find 可以来实现detect undirect graph 是否有cycle, 比用dfs/bfs代码简洁,参考:https://discuss.leetcode.com/topic/28436/simple-and-clean-c-solution-with-detailed-explanation
大概写一下现在自己的理解,以后有新的见解,再补充。首先,给定一组节点,组成若干个集合,查找某个节点属于哪一个集合,用到find: 查找这个group的根节点,即:node[i]==i的点;然后把属于不同集合的两个点对应的集合union成一个更大的集合,用到union: 让一个集合的根节点指向另一个集合的根节点即可,即:node[s]=f.
数据结构及算法: union find学习
最新推荐文章于 2020-11-08 20:48:33 发布