我一直陷在这个问题中,找不到解决这个问题的有效方法。
我有N个(最多1000万个)数组,例如最多100个元素。这些数组包含1-10000之间的数字。
现在,我的问题是将这些数组划分为K个组,以便我将所有数组中的重复项减到最少,例如,对于包含1,4,10,100的数组和另一个包含1,100的数组。我希望它们进入同一组,因为这样可以最大程度地减少重复性。我的问题有两个约束如下-
我不想为一组数组将唯一元素的大小增加到110以上。所以我有一个大小为100的数组,还有另一个大小为100的数组,这是60%的匹配,我宁愿创建新组,因为这不会增加。的独特元素增加到140个,并且还会继续增加。
组中向量的数量应均匀分布。
根据大小按降序对这些数组进行分组。然后找到唯一的向量,进行唯一的散列,并在约束条件下应用最大匹配的贪婪算法,但是贪婪似乎效果不佳,因为这完全取决于我首先选择的分区。我不知道如何应用DP,因为给定矢量总数的组合数量非常庞大。我不确定应该采用哪种方法。
我的算法的一些失败案例是,说有两个相互排斥的向量,但是如果我与它们组成一个组,我可以将100%与第三个向量相匹配,否则,第三个向量仅与30%相匹配组,并在添加到该组之后使该组满员,这将增加我的重复性,因为第三个向量应该已经与前两个向量组成了一个小组。
答案 0 :(得分:0)
简单而密集的计算和内存迭代使每个数组匹配一千万次以匹配最大数量的匹配项。现在,将匹配数字存储在数组中,并通过匹配条件至少应为60%进行迭代来类似地找到此类数组的匹配项