匈牙利算法 Python2025年3月17日 | 阅读 7 分钟 引言作为一名数据科学家或软件开发人员,您可能经常在分配资源以最高效的方式完成任务时遇到效率问题。其中一个问题是分配问题,我们需要根据成本或价值来确定如何最佳地分配资源给任务。解决此问题的一种流行方法是匈牙利算法。在本文中,我们将探讨匈牙利算法并在 Python 中实现它。 什么是分配问题?您可以如下定义分配问题:给定一组资源和一组任务,其中每种资源只能用于一项任务,并且每项任务只需要一种资源,我们必须选择一个分配,以使总成本最小化或总价值最大化。这个问题出现在各种领域,包括匹配问题、工作调度和生产计划。 简单的分配问题代表了在最小化支出的同时最大化可用资源数量的需求。举个例子,考虑下面的二维网格,其中每一行代表一个特定的供应商,每一列代表雇佣该供应商生产特定商品的成本。每个供应商最多只能专精于生产其中一种商品。对于网格中的每个列和行,只能选择一个元素,并且必须最小化所选元素的完成(最小成本支出)。 匈牙利算法:概述匈牙利算法(有时也称为 Kuhn-Munkres 算法)是一种用于在多项式时间内解决分配问题的强大方法。它使用组合优化技术来识别最佳分配。该方法通过“对偶性”技术来改进问题,并依赖于在二分图的增广路径。 匈牙利算法用来确定最佳分配的步骤如下:
匈牙利算法的 Python 实现scipy 库有一个名为 linear_sum_assignment 的函数,该函数应用匈牙利方法来解决分配问题,使我们能够在 Python 中实现匈牙利算法。这是一种如何应用它的示例: 在此示例中,我们构建了一个成本矩阵来表示将三个资源分配给三个任务的成本。然后使用 linear_sum_assignment 函数找到最佳分配。该函数返回的两个数组 row_indices 和 col_indices 包含最佳分配的行和列索引。然后提取分配,并打印结果。 给定一个 N*N 的二维数组 arr,其中 arr[i][j] 表示第 i 个工人完成第 j 个任务的成本。任何工人都可以被分配执行任何任务。目标是分配任务,以便每个工人一次只能专注于一项任务,同时使分配的总成本最小化。 示例 在本文中,描述了许多解决此问题的方法。 方法:将使用匈牙利算法来解决此问题。算法工作原理如下:
为了理解该方法,请考虑以下示例: ![]() 目标是使用 dlib 包中的 max_cost_assignment() 函数来构建上述过程。该函数实现了有时称为 Kuhn-Munkres 算法的匈牙利算法,并以 O(N^3) 的时间复杂度完成。解决了最佳分配问题。 上述策略的应用如下所示: 输出 5 时间复杂度:O(N^3) 辅助空间:O(N^2) 结论匈牙利方法是一种有效的方法,可以快速解决分配问题。该算法通过在二分图中利用增广路径来最小化成本或最大化价值,从而确定最佳分配。在此,我们研究了匈牙利方法,并使用 scipy 库在 Python 中实现了它。作为数据科学家或程序员,您现在可以利用这项技能在自己的项目中利用匈牙利算法来处理作业问题。 匈牙利方法只是众多优化算法中的一种;在选择最佳算法来处理特定情况之前,了解约束和问题上下文至关重要。 |
环境变量是软件开发中的一个关键概念,用于指定和维护系统特定的设置、路径和配置。它们使得处理开发、测试和生产等不同环境的设置更加简单,并提供了一种隔离配置信息的方法...
阅读 6 分钟
在本教程中,我们将学习如何在 Python 中获取亲和数。首先,我们将了解亲和数是什么以及如何使用它们。亲和数是两个不同的数字,它们之间存在如此的关系,即每个数字的真因子之和都等于...
阅读 3 分钟
作为数据科学家,我们可能不拘泥于数据格式。PDF,即便携式文档格式文件的简称,是很好的数据来源。有许多组织只以 PDF 格式发布他们的数据。随着人工智能的扩展,我们需要更多的数据来进行预测和...
阅读 3 分钟
Python 使用 LEGB 规则来解析名称,该规则以 Python 的名称作用域命名。以下是对这些术语中每一个含义的简要解释:任何 Python 函数和 lambda 表达式的代码块和主体都属于...
阅读 3 分钟
在本教程中,我们将介绍如何使用线性回归创建模型,以预测经济活动导致的房价。本教程将涵盖相关主题,如探索性分析、逻辑诊断和高级回归建模。让我们立即开始...
阅读 15 分钟
Python 的内置 ConfigParser 库是基础模块的一部分。该库提供了一个控制台解析器,用于轻松配置由键值对组成的文件。该库支持的全球公认的流行约定是“INI”语法,最常用于 Microsoft 平台。...
7 分钟阅读
Kivy 是 Python 中一个独立于平台的图形用户界面工具。因为它兼容 Android、iOS、Linux 和 Windows。它通常用于 Android 应用程序的开发,但这并不妨碍它在桌面程序中的应用。屏幕管理器小部件:一个名为...的小部件
阅读 62 分钟
Apriori 算法是一种机器学习算法,用于理解各种产品之间的关系模式。该算法最流行的用途是根据用户购物车中已有的商品来推荐商品。沃尔玛特别使用了该算法...
5 分钟阅读
Selenium 是一个用于自动化互联网交互的有效工具,使其成为网络测试和抓取任务的热门选择。在处理网络应用程序时,管理 cookie 通常是自动化过程的关键部分。Cookie 在用户的设备上存储各种信息...
阅读 4 分钟
在接下来的教程中,我们将了解 Python 编程语言中的 Web2py 框架。了解 Web2py 框架 Web2py 是一个易于使用的框架,不需要任何安装和配置。该框架是可移植的,也可以在 U 盘上执行。它是...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India