减少基于循环的代码

时间:2016-09-19 01:10:33

标签: loops

我想减少下面代码的渐近时间复杂度。

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];
        }
    }
}

1 个答案:

答案 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
}

这可以大大简化您的剩余问题。