Kruskals 算法的时间复杂度2024年12月8日 | 阅读时长 6 分钟 在本篇文章中,我们将讨论 Kruskal 算法。我们还将在这里研究 Kruskal 算法的难度、功能、示例和实现。 然而,在继续讨论该技术之前,我们需要首先理解基本概念,例如生成树和最小生成树。 Kruskal 算法通过查找无向边加权图的最小生成森林来找到它。如果图已连接,则查找最小生成树。(最小生成树是一组边,它构成一个树,其中连通图中的每个顶点都在其中,并且树中所有边的加权平均值最小。不连通图的最小生成森林由每个连通分量的最小生成树组成。)在图论中,它被称为贪婪方法,因为它不断添加下一个不会构成循环的最低权重边到最小生成森林中。 无向连通图的生成树是该图的子图。 最小生成树 - 最小生成树是总边权重最低的树。生成树的权重是其边所分配权重的总和。 现在让我们谈谈重点。 对于连通加权图,Kruskal 算法用于确定最小生成树。该算法的主要目标是识别边的子集,这将使我们能够遍历每个图顶点。它不关注全局最优,而是采用贪婪策略,在每一步中寻求最佳结果。 Kruskal 算法如何实现?使用 Kruskal 方法,我们从权重最低的边开始,并不断添加边,直到获得所需的结果。以下是应用 Kruskal 算法的步骤:
Kruskal 算法的用途包括:
Kruskal 算法示例现在让我们通过一个例子来演示 Kruskal 算法的工作原理。一个插图将使理解 Kruskal 算法更容易。 假设一个加权图是 ![]() 下表提供了上述图的边权重。
现在根据升序权重对上面列出的边进行排序。
现在让我们开始构建最小生成树。 步骤 1: 首先在步骤 1 中将权重为 1 的边 AB 添加到 MST 中。 ![]() 步骤 2: 由于权重为 2 的边 DE 没有产生循环,因此将其添加到 MST 中。 ![]() 步骤 3: 在步骤 3 中将权重为 3 的边 BC 添加到 MST 中,因为它不产生循环。 ![]() 步骤 4: 此时选择权重为 4 的边 CD 添加到 MST 中,因为没有形成循环。 ![]() 步骤 5: 接下来,选择边 AE 上权重为 5 的边。必须消除此边,因为包含它会开始循环。 步骤 6: 在步骤 6 中使用权重选择 AC 边。必须消除此边,因为包含它会开始循环。 步骤 7: 在步骤 7 中选择权重为 10 的边 AD。丢弃此边将阻止循环的开始。 步骤 8: 因此,使用 Kruskal 方法从给定加权图创建的最终最小生成树是: ![]() MST 的成本 = AB + DE + BC + CD = 1 + 2 + 3 + 4 = 10。 在上述树中,边的数量现在与顶点的数量减 1 相匹配。因此算法在此结束。 Kruskal 算法的时间复杂度Kruskal 方法的时间复杂度为 O(E logE) 或 O(V logV),其中 E 是边的数量,V 是顶点的数量。 一个连接的无向图,包含其所有顶点,被称为生成树,它是图的树状子图。或者,用外行的话说,它是图边的一个子集,它们共同形成一个无环树,图的所有节点都是其成员。 最小生成树具有生成树的所有特性,并附加了所有可能的生成树中权重最低的限制。与生成树类似,一个图可能存在多个可能的 MST。 生成树的属性生成树遵循以下原则:
Kruskal 算法的实现现在让我们检查 Kruskal 方法是如何付诸实施的。 创建一个实现 Kruskal 算法的 C++ 程序。 代码 输出 Following are the edges in the constructed MST 2 -- 3 == 4 0 -- 3 == 5 0 -- 1 == 10 Minimum Cost Spanning Tree: 19 时间复杂度: O (E*logE) 或 O (E*logV)
辅助空间: O (V + E),其中 V 是图中边的总数,E 是顶点的总数。 下一主题旅行商问题 |
我们请求您订阅我们的新闻通讯以获取最新更新。