我一直在研究某个项目,并偶然发现了一个多路分区问题变体的问题。我们可以如下陈述问题:
给定 n 整数的 S ,并设置 k k 总和,找到 k S 的子集,以便第i个子集具有 K 的第i个元素的总和。
这并不严格要求对 S 集进行分区,因为某些元素可能未被使用。
我天真的尝试是首先遍历 S 的元素,并在该元素匹配某些总和时形成单元素子集。然后我会按升序对 S 的元素进行排序,并总结元素,直到它们达到给定的总和(子集求和问题)。但是,这经常失败。
解决方案无需准确。问题的性质允许每个总和的误差高达10%。但是,它必须相当快。要提供有关输入数据的一些信息, n 预计将达到数百万,而 k 预计介于1到1万之间。该算法应在10秒的范围内运行(它将在Web界面上使用,用户不应等待超过一两分钟)。
如果我没错,这是一个NP完全问题,但我不需要一个精确的解决方案,只需粗略的近似。任何帮助都是值得赞赏的,因为我找不到任何接近我需要的东西,除了多路分区问题,这里不能完全使用。
感谢。