当前位置: 首页 > 编程笔记 >

Prim算法和Kruskal算法之间的区别

周健
2023-03-14
本文向大家介绍Prim算法和Kruskal算法之间的区别,包括了Prim算法和Kruskal算法之间的区别的使用技巧和注意事项,需要的朋友参考一下

在本文中,我们将了解Prim算法和Kruskal算法之间的差异。

最小生成树(MST)的Kruskal算法

  • 给定一个连通图和无向图时,此类图的生成树就是子图,该子图是连接所有顶点的树。

  • 单个图可以具有多个生成树。

  • 加权图,连接图和无向图的最小生成树(MST)(也称为最小权重生成树)是一种生成树,其权重小于或等于其他所有生成树的权重。

  • 生成树的权重是通过将与生成树的每个边缘关联的权重相加来确定的。

  • 最小生成树可以从图中权重最小的顶点构建。

  • 一个节点仅被遍历一次。

  • 它可以在稀疏图中快速运行。

  • 时间复杂度为O(E log V),其中V是顶点数。

  • 它也可以与断开的组件一起使用。

使用Kruskal算法查找MST的步骤:

  • 按其相关权重的升序对边缘进行排序。

  • 选择最小的边缘。

  • 检查它是否与在该时间点之前已经形成的生成树形成一个循环。

  • 如果尚未形成循环,则必须包括该边。

  • 否则,可以将其丢弃。

  • 重复步骤2、3、4,直到生成树包含V-1边为止。

Prim的算法最小生成树(MST)

  • 这类似于Kruskal算法,i.e它是一个贪婪算法。

  • 它从一棵空的生成树开始。保留了两组顶点。

  • 第一组包含已包含在MST中的顶点,而另一组包含尚未包含的顶点。

  • 在每一步中,算法都会考虑将两组连接的所有边。然后,在这些边缘中选择最小的权重边缘。

  • 此步骤之后,算法移至包含MST的集合边缘的另一个端点。

  • 最小生成树可以从图中的任何顶点构建。

  • 一个节点经过多次移动以获得最小距离值。

  • 它的时间复杂度为O(V2),其中V是顶点数。使用斐波那契堆可以将此时间复杂度提高到O(E + log V)。

  • 它可以在密集图形中快速运行。

  • 它提供了连接的组件,并且仅与连接的图形一起使用。

使用Prim's算法查找MST的步骤:

  • 创建了一个mstSet,该跟踪记录了MST中已经包含的顶点。

  • 键值分配给输入图的所有顶点。

  • 键值最初分配为“ INFINITE”。

  • 将键值0分配给第一个顶点,以便可以首先选择它。

  • 当mstSet不包括所有顶点时,请执行以下步骤。

    • 选择的顶点'u'在mstSet中不存在,并且具有最小的键值。

    • 现在,此“ u”包含在mstSet中。

    • 'u'的所有相邻顶点的键值都会更新。

    • 这可以通过迭代所有相邻的顶点来完成。

    • 对于每个相邻顶点“ v”,如果边“ u”-“ v”的权重小于先前键值“ v”的权重,则将键值更新为“ u-v”的权重。

 类似资料:
  • 一、最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 二、克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。

  • 一、普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树的算法。 基本思想 对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如此不断重复,直到U=V为

  • 本文向大家介绍python最小生成树kruskal与prim算法详解,包括了python最小生成树kruskal与prim算法详解的使用技巧和注意事项,需要的朋友参考一下 kruskal算法基本思路:先对边按权重从小到大排序,先选取权重最小的一条边,如果该边的两个节点均为不同的分量,则加入到最小生成树,否则计算下一条边,直到遍历完所有的边。 prim算法基本思路:所有节点分成两个group,一个为

  • Kruskal用于查找最小成本生成树的算法使用贪婪方法。 此算法将图形视为森林,将每个节点视为单个树。 树仅连接到另一个树,并且仅当它在所有可用选项中具有最低成本且不违反MST属性时。 要了解Kruskal的算法,让我们考虑以下示例 - 步骤1 - 删除所有循环和平行边缘 从给定图中删除所有循环和平行边。 如果是平行边缘,请保留成本最低的一个并删除所有其他边缘。 步骤2 - 按重量增加的顺序排列所

  • 本文向大家介绍算法和伪代码之间的区别,包括了算法和伪代码之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解算法和伪代码之间的区别- 算法 它被定义为一系列明确定义的步骤。 这些步骤提供了解决现有问题的解决方案/方法。 这是一种系统且逻辑的方法,其中过程是逐步定义的。 它为特定问题提供了解决方案。 该解决方案将转换为机器代码,然后由系统执行以提供相关的输出。 结合了许多简单

  • 本文向大家介绍Javascript中的Prim算法,包括了Javascript中的Prim算法的使用技巧和注意事项,需要的朋友参考一下 Prim的算法是一种贪婪算法,可为加权无向图找到最小生成树。它找到形成树的边缘子集,该树包括每个顶点,树中所有边缘的总权重最小。 该算法的工作方式是,从任意起始顶点一次构建一个树,在每个步骤中,从树到另一个顶点添加最便宜的连接。 Prim的算法如何工作? 让我们看