Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组划分为具有相同和值的K个子集_Java_Algorithm_Subset - Fatal编程技术网

Java 将数组划分为具有相同和值的K个子集

Java 将数组划分为具有相同和值的K个子集,java,algorithm,subset,Java,Algorithm,Subset,试图找出以下问题: 给定一组N个正整数,任务是将它们分成K个子集,使得每个K个子集中的元素值之和相等 我想用一组不超过10个整数的值来做这件事,这些值不超过10,并且小于5个子集。 所有整数都需要分布,并且只接受完美解(意味着所有子集都相等,没有近似值)。 我想使用回溯递归地解决它。我在网上找到的大多数资源都使用了我不了解的其他方法,使用了位掩码之类的,或者只针对两个子集,而不是K个子集 我的第一个想法是 按升序对集合排序,检查所有基本情况(例如,不可能均匀分布),计算所有子集必须具有的平均值,

试图找出以下问题:

给定一组N个正整数,任务是将它们分成K个子集,使得每个K个子集中的元素值之和相等

我想用一组不超过10个整数的值来做这件事,这些值不超过10,并且小于5个子集。 所有整数都需要分布,并且只接受完美解(意味着所有子集都相等,没有近似值)。 我想使用回溯递归地解决它。我在网上找到的大多数资源都使用了我不了解的其他方法,使用了位掩码之类的,或者只针对两个子集,而不是K个子集

我的第一个想法是

  • 按升序对集合排序,检查所有基本情况(例如,不可能均匀分布),计算所有子集必须具有的平均值,以便所有子集相等
  • 检查每个子集,填充每个子集(首先从最大值开始),直到达到平均值(表示它们已满)
  • 如果无法满足某个子集的平均值(未分配的值太大等),返回并尝试前一个子集的其他组合
  • 如果遇到死胡同,继续往回走
  • 如果遇到所有死角或找到完美解决方案,则停止
  • 不幸的是,我真的很难做到这一点,尤其是在实现回溯和重试新的组合时


    感谢您的帮助

    具有N个元素的给定集合:S有2^N个子集。(这里解释得很好:)分区是将集合的元素分组到非空子集中,这样每个元素都包含在一个且仅包含一个子集中。一个n元素集的总数是贝尔数Bn

    此问题的解决方案可按如下方式实施:

    1) 创建所有可能的集合S,称为p(S)


    2) 如果每个子集中的元素值之和不匹配,则在p(S)上循环并过滤掉。

    对不起,作业解析资源也不匹配。带着你的代码尝试到这里来,我理解其中有一些特殊的问题。对于任何可能阅读本文的人,这里有一个帮助:这是。有2^n个子集,但有K^n个分区到K个组。