将 N 个数组划分为具有约束的 K 个组

Partitioning N arrays into K groups with constraints

我一直卡在这个问题中,找不到有效的解决方案。

我有 N(最多 1000 万)个数组,最多包含 100 个元素。这些数组包含 1-10000 的数字。

现在我的问题是将这些数组分成 K 个组,这样我可以最大限度地减少所有数组中的重复项,即一个包含 1、4、10、100 的数组和另一个包含 1、100 的数组。我希望它们进入同一组,因为这样可以最大程度地减少口是心非。我的问题有两个限制如下 -

  1. 我不想为一组数组增加超过 110 个唯一元素的大小。所以我有一个大小为 100 的数组,还有另一个大小为 100 的数组,这是一个 60% 的匹配我宁愿创建新组,因为这增加了 no。独特元素的数量增加到 140 个,而且这个数字还会继续增加。

  2. 组中的向量个数要均匀分布

根据大小降序对这些数组进行分组。然后找到唯一向量唯一哈希并应用与约束最大匹配的贪婪算法,但贪婪算法似乎效果不佳,因为这将完全取决于我首先选择的分区。我无法弄清楚如何应用 DP,因为给定向量总数的组合数量非常大。我不确定我应该采用什么方法。

我的算法的一些失败案例是,假设有两个相互排斥的向量,但如果我与它们组成一个组,我可以 100% 匹配第三个向量,否则只匹配 30%在一个组中并在添加到该组后使该组充满这将增加我的口是心非,因为第三个向量应该与前两个向量形成一个组。

简单但计算和内存密集型为每个数组迭代 1000 万次以匹配最大数字匹配。现在将匹配数存储在一个数组中,并通过迭代匹配至少应为 60%

的条件来类似地找到此类数组的匹配项