Prim算法(并查集)

普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小


 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作:

   在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(u0,v0)并入集合TE中,同时v0并入U,直到V=U为止。


图例 说明 不可选 可选 已选(Vnew
此为原始的加权连通图。每条边一侧的数字代表其权值。 - - -
顶点D被任意选为起始点。顶点ABEF通过单条边与D相连。A是距离D最近的顶点,因此将A及对应边AD以高亮表示。 C, G A, B, E, F D
下一个顶点为距离DA最近的顶点。BD为9,距A为7,E为15,F为6。因此,FDA最近,因此将顶点F与相应边DF以高亮表示。 C, G B, E, F A, D
算法继续重复上面的步骤。距离A为7的顶点B被高亮表示。 C B, E, G A, D, F
在当前情况下,可以在 CEG间进行选择。 CB为8, EB为7, GF为11。点 E最近,因此将顶点 E与相应边 BE高亮表示。
C, E, G A, D, F, B
这里,可供选择的顶点只有CGCE为5,GE为9,故选取C,并与边EC一同高亮表示。 C, G A, D, F, B, E
顶点G是唯一剩下的顶点,它距F为11,距E为9,E最近,故高亮表示G及相应边EG G A, D, F, B, E, C
现在,所有顶点均已被选取,图中绿色部分即为连通图的最小生成树。在此例中,最小生成树的权值之和为39。 A, D, F, B, E, C, G

根据提供的引用内容,Prim算法确实使用了并查集Prim算法是一种用于构建最小生成树的贪心算法,它的基本思想是从一个点开始,每次选择一个与当前生成树距离最近的点加入生成树中,直到所有的点都被加入生成树为止。在Prim算法中,我们需要维护一个集合S,表示已经加入生成树的点的集合,以及一个数组d,表示每个点到集合S的距离。每次选择距离集合S最近的点加入集合S中,并更新其他点到集合S的距离。这个过程可以使用堆优化的Dijkstra算法来实现,也可以使用并查集来实现。具体来说,我们可以将所有点分为两个集合,一个集合表示已经加入生成树的点,一个集合表示还没有加入生成树的点。每次选择距离已经加入生成树的点最近的未加入生成树的点加入生成树中,并将这个点加入已经加入生成树的点的集合中。这个过程可以使用并查集来实现,具体来说,我们可以将已经加入生成树的点的集合看作一个并查集,每次加入一个新的点时,我们将这个点加入并查集中,并将这个点与已经加入生成树的点的集合中的点进行合并。这样,我们就可以快速地判断一个点是否已经加入生成树中,以及两个点是否在同一个连通块中。因此,Prim算法使用并查集来维护已经加入生成树的点的集合,以及判断两个点是否在同一个连通块中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值