Ho questa domanda a cui ho bisogno di rispondere:
What is the asymptotic running time for the following piece of code?
if (N < 1000) for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) A[i] = j; else for (int i = 0; i < N; i++) A[i] = i;
- logarithmic in N
- linear in N ()
- linearithmic in N
- quadratic in N
E il risultato corretto è " 2. lineare in N "che non riesco a capire perché, dal momento che per quello che ho capito, vogliamo accettare il caso peggiore > best case.
Il caso peggiore qui è che l'istruzione if è eseguita e il tempo sarebbe quindi quadratico in N. Sono consapevole che stiamo cercando di trovare un qualche tipo di media di più tentativi, ma come posso sapere qual è il valore di N è? Se N è veramente alto (10000), è ovviamente l'altra istruzione che viene eseguita la maggior parte delle volte. Ma possiamo assumere questo o ho frainteso qualcosa?