-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
并查集(union find) #10
Comments
Quick union【lazy approach】我们可以发先 上面的实现方式很容易去查找 是否属于同一个集合,但是当我们相连n个集合的时候,需要遍历n次整个数组,这个操作是很巨大的。我们需要优化。 我们采用新的结构来表达,类似与树的模式 这样,我们去检查是否在一个集合,只需要查看root节点是否相同。同时我们去merge集合的时候,只需要将2个树的root进行merge即可 那么我们需要避免构成一个tall tree,利用 树重 的概念来进行优化。(当前树拥有多少节点) 同时我们还可以在 回溯root的时候,去优化我们目前拥有的树,将path上经过的所有结点直接链接到根节点,压平当前的路径。 扩展一下: 还有rank的方式去进行优化,这种方式可以进一步避免tall tree的形成。
|
实际应用我们还记得当初的union find 的应用。常见的类似说 在一张图片中 标记相连的区域。 参考资料 |
并查集(union find)数据结构学习记录
动态连通性 (Dynamic connectivity)
如下图。我们给了几个数字 数字之间是否相连来判断是否是同一个集合 , 下图就只有2个集合
进阶的使用,可以用来判断 p 和 q点是否相连
The text was updated successfully, but these errors were encountered: