我正在寻找一种简单的算法来获得二分图的边中的最小加权边。我搜索了一下,我都知道这意味着二分图的覆盖边,换句话说,如果我们有二分图并且每条边都有一个数字权重,如何获得其中最小的数字

我正在寻找一种简单的算法来获得二分图的边中的最小加权边。我搜索了一下,我都知道这意味着二分图的覆盖边,换句话说,如果我们有二分图并且每条边都有一个数字权重,如何获得其中最小的数字

提出这个问题的方式使其非常不清楚。我从中得到的一种解释是:“给定一个加权二部图 G,我如何获得 G 的最小边覆盖?”。如果是这种情况,那么匈牙利算法(参见http://reference.wolfram.com/mathematica/ref/FindEdgeCover.html也可以解决您的问题。
你需要匈牙利算法。单击此处 获取讲义。
在处理之前,你应该有一个成本矩阵,其中每个条目是从节点A到节点B的边成本。匹配步骤如下:
上面的算法是基于一个数学定理
Jonker-Volgenant ( LAPJV ) 算法甚至比其他答案中建议的匈牙利算法更好。
看看这个名为Bipartite Solver的 GitHub 存储库,它基本上是一个关于如何在代码中实现 LAPJV 的教程,并带有一个可运行的图形示例。
它的速度非常快,能够在一秒钟内完成 1000 到 1000 次。
库中还包括贪心搜索,它甚至更快,但不能保证最优性。
如果您想尝试算法而不必从源代码构建它,该库还有一些可执行文件。