数据结构篇三:Union Find

2021-12-04  本文已影响0人  walkerwzy

这是一位 google 工程师分享的8小时的数据结构的视频,我的笔记


Union Find

Usage

Complexity

给定一个无向图,如果它任意两个顶点都联通并且是一棵树,那么我们就称之为生成树(Spanning Tree)。如果是带权值的无向图,那么权值之和最小的生成树,我们就称之为最小生成树(MST, Minimum Spanning Tree)。
-> 用最少的边连接所有的顶点

看到这里,首先想知道什么是unified,看实现,也就是在一个集合里(component)


image.png

Find: 找元素在哪个component里,然后找到它的root
Union: 找两个元素分别在哪个component里,然后找到它们的root,如果不是同一个root,就让其中一个成为另一个的parent

union find里

Path Compression Union Find

image.png

由一层层找到root改为所有顶点直接指向顶点(星形结构),实现路径压缩

这段代码演示的是,查找p的root节点,在查找的过程中,顺便进行了路径压缩


image.png

合并的逻辑就是比较谁的元素多就把谁当作root,另一个component的root的parent设为元素多的组的root
合并完成后组数就少了1

image.png

看代码,这一步里面并没有路径压缩,也就是小组里面的元素并没有进一步再星状地指向新的parent,仍然指向的是老的组的root。

上一篇 下一篇

猜你喜欢

热点阅读