我坚持优化算法;算法就是这样运作的。假设我们有一个表达式a+b+c+d
,并且该算法是为了获得可能达到数字的每个数字组合;比方说,n= 10
。
所以算法会输出这个;
1+1+1+1
1+1+1+2
1+1+1+3
..............
1+1+1+10
1+1+2+1
依此类推,直到它到达结尾为止
10+10+10+10
然而,我遇到的问题是随着n
(最大数量)的增加,算法的运行时间会迅速增加。
当n
增加时,是否存在削减运行时的方法?我很难过。
无法发布源代码ATM,因为我不在家,但它是在c ++中完成的。
答案 0 :(得分:1)
对于组合部分,如果“a + b + c + d”等于“a + b + d + c”,则可以通过将循环写为
来节省一些时间for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j {
// etc.
}
}
但需要O(n ^ 4)。
否则,如果问题确切地“达到了数字的每个数字组合”,那么应该有一个4到4 * n的封闭形式解决方案。
你不需要达到每一种组合。只是计算结果。或者我误解了这个问题。