Python中的最小割算法2025年1月5日 | 阅读6分钟 在本教程中,我们将学习 Python 的最小割算法。在这里,我们给定一个无向且无权重的图。从这个图中,我们需要找到最小割(将图形分成两部分的边的数量)。输入图可能包含一些平行边。例如,我们考虑下面的例子。在这里,最小割是 2 条边。 ![]() 上述图的最小割是 {a, d} 或 {b, e}。一个简单的解决方案是使用基于最大流的 s-t 割算法来找到最小割。将每对源视为“s”并将汇视为“t”,然后调用最小 s-t 割算法。它用于查找 s-t 的所有割。每个割都返回 s-t 的最小值。该算法对图的最优时间复杂度为 O(V5)。存在所有可能的 V2 对,并且单对的 s-t 割算法需要 O(V*E) 和 E = O(V2) 时间。 以下是一个简单的 Karger 算法用于此目的。下面的 Karger 算法可以在 O(E) = O(V2) 时间内完成。
现在,我们通过给定的例子来理解上述算法。首先,我们随机选择了顶点“a”,它连接顶点 0 和 1。我们删除这条边并使图变小(通过合并 0 和 1 顶点)。我们看到下面的图。 ![]() 现在,下一个随机选择的边是“d”。然后我们删除这条边并将顶点(0,1)和 3 放在一起。 ![]() 从图中,我们需要移除自环。所以,我们移除边“c”。 ![]() 图现在有两个顶点,所以我们停止。得到的边数是 Karger 算法造成的割。Karger 算法是一种蒙特卡洛算法,它造成的割不一定是最小的。例如,下图显示了不同顺序的随机选择边会创建一个大小为 3 的最小段。 ![]() 程序代码 现在,我们给出 Python 中最小割算法的程序代码。输入图表示为边的集合,并且并集查找用于跟踪对象的模型。代码如下: 输出 现在,我们在 Python 中编译上述代码,成功编译后运行它。输出如下: The Contracting edge is 0-2 The Contracting edge is 0-1 The Contracting edge is 2-3 min cut found by Karger's randomized algo is 0 本文将讨论简单的 Karger 算法,并表明它不需要产生最小割。上述算法以大于或等于 1/(n2) 的概率产生最小割。 上述代码的复杂度分析 上述代码的时间复杂度为 O (EV^2)。这里,E 代表图中的边数,V 代表顶点数。该算法仅保证找到最小割,但通过大量迭代,它有很大机会找到最小割。时间复杂度由运行 V-2 次迭代并在每次迭代中执行固定量工作的循环决定。每次迭代的工作包括折叠元素子集、子集组合和边。因此,时间复杂度为 O (EV^2),其中 V 是顶点数,E 是边数。 辅助空间 O(E + V) 在上述代码中。E 代表图中的边数,V 代表顶点数。这是因为程序使用了需要 O (E) 空间来存储图的连续列表。它还使用了需要 O(V) 空间来访问的顶点和 BFS 队列。总的来说,这个程序使用 O(E+V) 的辅助空间。 结论因此,在本教程中,我们正在学习 Python 的最小割算法。我们使用了 Karger 算法来查找无向、连通图中的最小割,并且是无权重的。我们还提供了一个 Python 最小割算法的程序代码,并分享了它的输出。 下一主题Python中的回归算法 |
简介 试位法,通常称为 Regula Falsi 法,是一种用于求解非线性方程的数值方法。但当根位于特定区间时,该方法特别有效。在这里,我们将深入探讨 False 的基础...
5 分钟阅读
append()函数是Python中的一个内置函数,用于将一个新的项目添加到可迭代对象(称为列表)的末尾。此函数只能与可迭代列表一起使用。语法 list.append(item) 在这里,append函数()接受任何项目……
阅读 3 分钟
引言:在本教程中,我们将使用 Matplotlib 学习 Python 中的误差条形图。误差条形图用作显示笛卡尔坐标图上绘制数据的差异的显示增强。误差条形图可用于图形中,为数据提供额外的结构...
阅读 4 分钟
简介计算机视觉是技术领域的一个创新领域,在不同行业有许多用途。它推动了医疗保健、自动驾驶汽车、安全和增强现实等领域的创新。尽管 2023 年有许多选择,但 Python 仍然是使用的语言...
阅读 6 分钟
在 Python 中,装饰器(函数包装器)是非常有用且强大的工具,可让程序员更改函数或类的行为。借助装饰器,我们可以在不永久更改的情况下扩展被包装函数的功能。函数被调用...
阅读 3 分钟
应用开发的世界是广阔多样的,有许多编程语言和工具可用于创建功能强大的应用程序。一种有趣且高效的创建移动应用的方式是通过使用 Python,这是一种多功能且流行的...
阅读 6 分钟
字符串插值是一种在 Python 中创建动态灵活字符串的强大方法。它允许将变量、表达式甚至函数嵌入字符串字面量中,从而生成复杂且高度可定制的输出。Python 有多种字符串插值方法,例如...
5 分钟阅读
Python 凭借其简洁性和多功能性,已成为最受欢迎的编程语言之一。当开发人员深入复杂项目时,他们经常需要强大的调试工具来高效地识别和纠正错误。在 Python 生态系统中,内置调试器,被称为...
阅读 4 分钟
假设你正在从文件或数组中读取数字,或者只是输入一个然后另一个,并且持续有数字流涌入。落在你目前看到的所有数字之间的那个数字...
阅读 15 分钟
数据库迁移简介 在快速发展的创新领域,对于希望改进数据管理策略的组织来说,数据库迁移已成为一项关键任务。数据库迁移是指将数据从一个数据库转移到另一个数据库的过程,其中...
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India