If I had in my algorithm something like this:
for (int i = 0; i < n; i++) if (i % 2) continue; else { code code code... }
Will the time complexity be O(n) or O(n / 2)?
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 166 |
2 | maomao90 | 163 |
2 | Um_nik | 163 |
4 | atcoder_official | 161 |
5 | adamant | 160 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | nor | 153 |
9 | Dominater069 | 153 |
If I had in my algorithm something like this:
for (int i = 0; i < n; i++) if (i % 2) continue; else { code code code... }
Will the time complexity be O(n) or O(n / 2)?
Name |
---|
Strictly there are n/2 operations, but in asymptotic notation O(n) = O(n/2), so they are essentially the same (In Big O notation), because n/2 = (1/2)*n and 1/2 is a constant that is not dependent on n.
A more formal definition is to come back to the Big O definition, it means that we can find a constant k such that k*n >= n/2 for sufficiently large n. In simple words it means that n is an upper bound of n/2.
The O(n/2) is only an example. I mean, if I had something like:
for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (j != 0) continue; else { code code code... }
And the expected time complexity was O(n), would this pass the test cases?
Edit: I didn't see the nested for!
Yes, that code would get TLE, because at best is O(n^2), that is if we suppose that "code..code" is O(1), if that isn't constant the complexity can be even bigger.
What are you talking about? Ofcourse answer is No! Complexity of this cycle is O(n2) even if code code code runs in O(1).
Interesting... VS optimizes this
but not this
Wouldn't pass because it will perform O(N2) operations. If you replace the continue with break then your complexity will be O(N) and it would pass. This is all assuming "code code code" runs in O(1)
Strictly there are n operations as
if
is operation too. If example is simple, like here, compiler may optimize it to run faster but it is not guarenteed.I checked this
code is disassembler. VS 2013 doesn't optimize it neither in debug nor in realise mode :(
-O2? -O3?
Both