Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 改进子集解_Java_Algorithm_Optimization - Fatal编程技术网

Java 改进子集解

Java 改进子集解,java,algorithm,optimization,Java,Algorithm,Optimization,我有一个练习题,我有一个给定的值和一个给定的数字数组。我可以使用给定数组中的任意值创建一个等于给定值的和 最初,我的算法会针对每个可能的组合遍历数组。我后来对它进行了优化,以检查当前和是否大于该值。如果是,请停止尝试后面的组合,因为它们也都将大于该值 出于好奇,是否最好先计算所有的和,然后对和进行排序,然后进行二进制搜索以找到一个值相等的和?我认为,在每一笔金额上进行比较,要比仅仅预先计算金额并得出结果慢得多 计算所有的和,然后搜索一个等于期望值的和,会比简单的暴力搜索更有效(在时间上) 如果我

我有一个练习题,我有一个给定的值和一个给定的数字数组。我可以使用给定数组中的任意值创建一个等于给定值的和

最初,我的算法会针对每个可能的组合遍历数组。我后来对它进行了优化,以检查当前和是否大于该值。如果是,请停止尝试后面的组合,因为它们也都将大于该值


出于好奇,是否最好先计算所有的和,然后对和进行排序,然后进行二进制搜索以找到一个值相等的和?我认为,在每一笔金额上进行比较,要比仅仅预先计算金额并得出结果慢得多

计算所有的和,然后搜索一个等于期望值的和,会比简单的暴力搜索更有效(在时间上)

如果我们考虑不存在这样一个集合的最坏情况,那么对于两个解决方案,你需要做的加法运算的数量是相等的,因为你已经计算了解决方案中的每一个总和,而蛮力搜索最终会尝试每一个组合。 在您的解决方案中进行的比较数量是否小于或等于使用暴力进行的比较数量?对您肯定不需要首先计算所有的和,然后对结果进行排序:您可以在进行所有计算时简单地构建一个排序集。暴力强迫最终将进行与组合数量相同的比较,但构建所有总和的排序集合,然后对匹配值进行二进制搜索不应该是指数型的


但话说回来,你可能已经找到了一个解决方案,而你正在建设你的电源设置,所以我不知道有多不同,它是比较简单的暴力。这看起来像是一种更昂贵的暴力,因为现在如果你选择这样做,你必须处理存储所有这些和和其他中间计算。

你正在解决子集和问题,这是NP完全问题。试试这个:一旦你找到了答案,你就可以停止寻找。因此,迭代并检查是否有答案会更有效。请记住,当您说“二进制搜索”时,您隐含地假设必须对数据进行排序。这比所有其他选项都要昂贵。我简要地提到,我只需要计算每一个和的组合,并对这些和进行排序,这样就可以得到一个BS。我在猜测这种方法是否比仅仅对每一个级别进行比较更快(尽管要贵得多)。你熟悉大Oh符号吗?我建议在空间和时间方面对每种方法进行大Oh分析。从长远来看,这是一个很好的方法,可以从重要因素的角度来理解算法的效率。您可能会发现,您的所有方法都具有大致相同的算法复杂性,这意味着在大量输入集上求平均值时,它们的效率和规模与原始阵列的大小大致相同。似乎在您忙于构建电源集时,如果结果存在,您将已经找到您的结果。。。