Code1
Code2
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.
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | Dominater069 | 154 |
8 | awoo | 154 |
10 | luogu_official | 150 |
Why does loop order affect too much to execution time ?
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 — 1] + a[i + k — 1] * b[j + k — 1]; res = max(res, f[i][j][k]); } cout << res;
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 — 1] + a[i + k — 1] * b[j + k — 1]; res = max(res, f[i][j][k]); } cout << res;
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. | Lang. | By | When | Δ | Comment | |
---|---|---|---|---|---|---|
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) |
Name |
---|