Esta pregunta se hace para fines de revisión de un pasado hoja de examen Yo sólo quiero saber si estoy en el camino correctoComplejidad de tiempo
1. int i=1;
2. while (i <= n) {
3. for (int j=1; j<10; j++)
4. sum++;
5. i++;
6. }
7. for(int j = 1; j <= n; j++)
8. for(int k = 1; k <= n; k=k*2)
9. sum++;
1.) ¿Cuántas veces se ejecuta comunicado 4?
A. O (n)
B. O (n^2)
C. O (log n)
D. O (n log n)
E. ninguno de los anteriormente
Aquí eligió A
2.) ¿Cuántas veces se ejecuta la instrucción 9?
A. O (n)
B. O (n^2)
C. O (log n)
D. O (n log n)
E. Ninguno de los anteriores
Debido línea 8 (k = k * 2) Elegí C
3.) ¿Cuál es el tiempo de ejecución de todo el fragmento de código?
A. O (n)
B. O (n^2)
C. O (log n)
D. O (n log n)
Desde O (n) + O (log n) = O (n) así que elegí A
@Neil: ¿Por qué crees que es así? (Presumiblemente esto no es la totalidad del documento de examen, por supuesto.) – ShreevatsaR
@ShreevatsaR: probablemente porque big-O no es ni una cantidad ("¿cuántas veces es ...?") Ni una duración ("¿cuál es el tiempo de ejecución? de ...? "). Mucho mejor sería la más precisa "¿cuál es la complejidad del tiempo de ...?". – paxdiablo
@paxdiablo: Es perfectamente exacto decir "el número de veces que se ejecuta la declaración 4 es O (n)". Es decir, la cantidad/función 10n es O (n). (Una cuestión completamente diferente es que tal vez el periódico debería haber pedido Theta o haber pedido la O (.) Más pequeña, pero eso es perdonable según el nivel del curso). – ShreevatsaR