【发布时间】:2014-04-03 20:54:53
【问题描述】:
我有一个练习题,我有一个给定的值和一个给定的数字数组。我可以使用给定数组中的任何值一次来创建等于给定值的总和。
原来,我的算法会针对每个可能的组合遍历数组。后来我对其进行了优化,以检查当前总和是否大于该值。如果是,请停止尝试后面的组合,因为它们都将大于该值。
出于好奇,最好先计算所有总和然后对总和进行排序并进行二分搜索以找到具有相等值的总和吗?我想,对每一个总和进行比较会比只预先计算总和和结果要慢得多。
【问题讨论】:
-
您正在解决子集和问题,即 NP-Complete。试试这个:en.wikipedia.org/wiki/…
-
一旦找到答案,您就可以停止寻找。因此,迭代并检查您是否有答案会更有效。请记住,当您说“二分搜索”时,您隐含地假设数据必须进行排序。这比所有其他选项都贵。
-
嗯,我简单地提到过,我会计算总和的每个组合并对总和进行排序,这样就可以得到 BS。正在猜测该方法是否会比仅对每个级别进行比较更快(尽管要贵得多)。
-
您熟悉 Big-Oh 符号吗?我建议对每种方法在空间和时间方面进行 Big-Oh 分析。从长远来看,这是了解算法效率的好方法。您可能会发现您的所有方法都具有大致相同的算法复杂性,这意味着在大量输入集上进行平均,它们具有大致相同的效率和规模,就原始数组的大小而言,它们以相似的方式进行。跨度>
-
似乎在您忙于构建电源组时,如果结果存在,您就已经找到了结果......
标签: java algorithm optimization