大图中最大二部匹配的有效技巧

Efficient trick for maximal bipartite matching in bigger graph

本文关键字:有效 二部      更新时间:2023-10-16

问题:给定两个数组A &B的整数。现在在每一步中,我们都可以从这两个数组中取出任意两个非协素数。我们必须找到可以通过这些步骤去除的最大对数。

范围: 5
每个整数<=109
Dinic算法- O(V2E)
Edmonds-karp算法- O(VE2)
Hopcroft-Karp算法O(E sqrt(V))

我到目前为止的方法:这可以建模为具有两个集合A和B的二部匹配问题,并且可以在相应集合中的每个非协素数整数对之间创建边。
但问题是图中可能有O(V2)条边,大多数二部匹配和最大流算法对于如此大的图将会非常慢。

我正在寻找一些具体的问题或数学优化,可以在合理的时间内解决问题。为了通过测试用例,我最多需要O(V log V)或O(V sqrt(V))算法。

你可以尝试做一个顶点图:

  1. A
  2. 中的每个元素
  3. A
  4. 中出现的任意数的质数
  5. B中的每个元素
  6. 目的地

添加容量为1的有向边,从源到A中的元素,从B中的元素到目的。

将A中每个元素x的容量为1的有向边相加到x质因数分解中的每个不同素数上。

从每个素数p到B中p除x的每个元素x添加容量为1的有向边

然后求从源到目的的最大流量

这些数字将有少量的因子(最多9个,因为2.3.5.7.11.13.17.19.23.29大于10**9),所以你将在中间最多有180万条边。

这比你之前可能拥有的10,000,000,000条边要少得多(例如,如果A和B中的所有100,000个条目都是偶数),所以也许你的最大流量算法有机会满足时间限制。