我想减少下面代码的渐近时间复杂度。
for(i=0; i<n; i++)
{
c[i] = a[i] + b[i];
if(c[i] > 2)
enter code here
{
for(j=0; j<n; j++)
{
c[i] += c[i] * d[j];
}
}
}
答案 0 :(得分:0)
首先,我不知道还有什么可能出现在&#34;在这里输入代码&#34 ;;我希望您在发布时忘记从源代码中删除它。
最明显的变化是最内层循环中的尴尬代码。您可以访问 d 数组,直到 i 次,重新计算不会更改的效果。在第一个循环之前移动它,仅执行一次:
d_factor = 1
for(j=0; j<n; j++)
d_factor += d_factor * d[j]
for(i=0; i<n; i++)
{
c[i] = a[i] + b[i];
if(c[i] > 2)
c[i] *= d_factor
}
这可以大大简化您的剩余问题。