算法学习——kruskal重构树

kruskal重构树是一个比较冷门的数据结构。数据结构

其实能够看作一种最小生成树的表现形式。spa

在普通的kruskal中,若是一条边链接了在2个不一样集合中的点的话,咱们将合并这2个点所在集合。blog

而在kruskal重构树中,若是一条边链接了在2个不一样集合中的点,咱们将新建一个节点出来,并用这个新节点做为一个中转链接这2个集合。重构

如图就是一棵kruskal重构树,方点表示新建出的节点,圆点是原图中的点,方点点权即边权。im

这样建出的树会有一些美妙的性质,例如往上走点权是递增的,原图中的每一个点都是叶子节点等。数据

固然一个更重要的是,若是咱们要在最小生成树上求一些东西,这些建出的方点能够给咱们提供方向。img

缘由就是咱们每次都将新建的节点做为父亲,那么这些节点将会引导每一个原图中的节点一步步向上,从而造成一个有根树,并且因为每一个点被新建出的顺序将直接决定它的深度等信息,这棵树会有不少奇妙的性质。集合

例如咱们能够一直向上走,找到某个节点使得这个节点即如下的点都知足点权小于k,这样咱们就能够筛选出知足互相到达不会通过超过k的权值的边的点对。co

固然也能够有别的用法,因而咱们就能够快速的筛选出最小生成树上知足具备某些性质的节点。生成

同时kruskal重构树也将平时隐藏在并查集里的一些关系提出来放在了树里,所以也能够看作kruskal重构树实际上是维护了一个相似并查集的关系

相关文章
相关标签/搜索