【发布时间】:2015-10-24 21:42:11
【问题描述】:
SHORT我应该如何减少(优化)代码中所需操作的数量?
更长 为了研究,我用 C++ 编写了一组方程,如果它适合模型,则输出一个序列。在代码的最里面是这个函数,在运行时被调用了很多次:
int Weight(int i, int q, int d){
int j, sum = 0;
if (i <= 0)
return 0;
else if (i == 1)
return 1;
for (j = 1; j <= d; j++){
sum += Weight((i - j), q, d);
}
sum = 1 + ((q - 1) * sum);
return sum;
}
所以根据变量d的大小,索引i的大小,以及其余代码中这个函数被调用的次数,做了很多冗余计算。我应该如何减少计算次数?
理想情况下,例如,在计算 Weight(5, 3, 1) 之后,如果函数是递归定义的,我如何告诉计算机在调用 Weight(6, 3, 1) 时替换它的值而不是重新计算它的值?
在这种情况下多维向量是否可以存储值?我应该将值打印到要读取的文件吗?我还没有遇到我给它的输入大小溢出,但是尾递归有助于优化它吗?
注意:我仍在学习如何编程,我很惊讶我什至能够在一开始就正确地制作模型。
【问题讨论】:
-
您熟悉动态编程或记忆化吗?
-
@templatetypedef 我多次听说过动态编程,但仍然不确定它的含义。从它的样子来看,记忆是一个流行的答案,可能只是一个查找表,所以这就是我要首先尝试的。
标签: c++ optimization recursion memoization