Why does loop order affect too much to execution time ?
Разница между en1 и en2, 101 символ(ов) изменены


<spoiler summary="Code1">
~~~~~
ll res = -oo;↵
    for(int k=1; k<=n; k++)↵
        for(int i=1; i<=n-k+1; i++)↵
            for(int j=1; j<=n-k+1; j++)↵
            {↵
                f[i][j][k] = f[i][j][k &mdash; 1] + a[i + k &mdash; 1] * b[j + k &mdash; 1];↵
                res = max(res, f[i][j][k]);↵
            }↵
    cout << res;↵
</spoiler>↵


<spoiler summary="Code2">
~~~~~↵

~~~~~

ll res = -oo;↵
    for(int i=1; i<=n; i++)↵
        for(int j=1; j<=n; j++)↵
            for(int k=1; k<=n; k++)↵
            {↵
                if(k + i > n || k + j > n) break;↵
                f[i][j][k] = f[i][j][k &mdash; 1] + a[i + k &mdash; 1] * b[j + k &mdash; 1];↵
                res = max(res, f[i][j][k]);↵
            }↵
    cout << res;↵
</spoiler>~~~~~↵




These code seem not to be differ too much but execution time have much differ. Example in case n = 500, code1 run in 3103ms but code 2 run only 789ms. What is the reason ? Pls explain to me. Thanks.

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en3 Английский ExpectoPatronum 2021-09-26 18:57:28 48
en2 Английский ExpectoPatronum 2021-09-26 18:56:10 101 Tiny change: ' << res;\n\n\n\n\n~~' -> ' << res;\n~~~~~\n\n\n\n~~'
en1 Английский ExpectoPatronum 2021-09-26 09:27:41 997 Initial revision (published)