Prerrequisito: Análisis de Algoritmos
1. ¿Cuál es la complejidad de tiempo y espacio del siguiente código:
CPP
int a = 0, b = 0; for (i = 0; i < N; i++) { a = a + rand(); } for (j = 0; j < M; j++) { b = b + rand(); }
Python
a = 0 b = 0 for i in range(N): a = a + random() for i in range(M): b= b + random()
Opciones:
- O(N * M) tiempo, O(1) espacio
- O(N + M) tiempo, O(N + M) espacio
- O(N + M) tiempo, O(1) espacio
- O(N * M) tiempo, O(N + M) espacio
Producción:
3. O(N + M) time, O(1) space
Explicación: El primer bucle es O(N) y el segundo bucle es O(M). Dado que N y M son variables independientes , no podemos decir cuál es el término principal. Por lo tanto , la complejidad temporal del problema dado será O(N+M).
Dado que el tamaño de las variables no depende del tamaño de la entrada, la Complejidad del Espacio será constante o O(1)
2. ¿Cuál es la complejidad del tiempo del siguiente código:
CPP
int a = 0; for (i = 0; i < N; i++) { for (j = N; j > i; j--) { a = a + i + j; } }
Python3
a = 0; for i in range(N): for j in reversed(range(i,N)): a = a + i + j;
Opciones:
- EN)
- O(N*log(N))
- O(N * Raíz cuadrada(N))
- O(N*N)
Producción:
4. O(N*N)
Explicación:
El código anterior ejecuta el número total de veces
= N + (N – 1) + (N – 2) + … 1 + 0
= N * (N + 1) / 2
= 1/2 * N^2 + 1/ 2 *
NO(N^2) veces.
3. ¿Cuál es la complejidad temporal del siguiente código:
CPP
int i, j, k = 0; for (i = n / 2; i <= n; i++) { for (j = 2; j <= n; j = j * 2) { k = k + n / 2; } }
Python3
k = 0; for i in range(n//2,n): for j in range(2,n,pow(2,j)): k = k + n / 2;
Opciones:
- En)
- O(N registro N)
- O(n^2)
- O(n^2Iniciar sesión)
Producción:
2. O(nLogn)
Explicación: Si te fijas, j sigue duplicándose hasta que es menor o igual que n. Varias veces, podemos duplicar un número hasta que sea menor que n sería log(n).
Tomemos los ejemplos aquí.
para n = 16, j = 2, 4, 8, 16
para n = 32, j = 2, 4, 8, 16, 32
Entonces, j correría por O(log n) pasos.
corro por n/2 pasos.
Entonces, pasos totales = O(n/ 2 * log (n)) = O(n*logn)
4. ¿Qué significa cuando decimos que un algoritmo X es asintóticamente más eficiente que Y?
Opciones:
- X siempre será una mejor opción para entradas pequeñas
- X siempre será una mejor opción para entradas grandes
- Y siempre será una mejor opción para entradas pequeñas
- X siempre será una mejor opción para todas las entradas
Producción:
2. X will always be a better choice for large inputs
Explicación: En el análisis asintótico, consideramos el crecimiento del algoritmo en términos del tamaño de entrada. Se dice que un algoritmo X es asintóticamente mejor que Y si X toma menos tiempo que y para todos los tamaños de entrada n mayores que un valor n0 donde n0 > 0.
5. ¿Cuál es la complejidad temporal del siguiente código:
CPP
int a = 0, i = N; while (i > 0) { a += i; i /= 2; }
Python3
a = 0 i = N while (i > 0): a += i i //= 2
Opciones:
- EN)
- O(Sqrt(N))
- EN 2)
- O (registro N)
Producción:
4. O(log N)
Explicación: Tenemos que encontrar la x más pequeña tal que N / 2^x N
x = log(N)
6. ¿Cuál de los siguientes describe mejor el criterio útil para comparar la eficiencia de los algoritmos?
- Tiempo
- Memoria
- Los dos anteriores
- Ninguna de las anteriores
3. Both of the above
Explicación: la comparación de la eficiencia de un algoritmo depende del tiempo y la memoria que ocupa un algoritmo. El algoritmo que se ejecuta en menos tiempo y ocupa menos memoria, incluso para un tamaño de entrada grande, se considera un algoritmo más eficiente.
7. ¿Cómo se mide la complejidad del tiempo?
- Contando el número de algoritmos en un algoritmo.
- Contando el número de operaciones primitivas realizadas por el algoritmo en un tamaño de entrada dado.
- Contando el tamaño de la entrada de datos al algoritmo.
- Ninguna de las anteriores
2. By counting the number of primitive operations performed by the algorithm on a given input size.
8. ¿Cuál será la complejidad temporal del siguiente código?
Javascript
for(var i=0;i<n;i++) i*=k
C++
for(int i=0;i<n;i++){ i*=k; }
Python3
# code for i in range(n): i=i*k
- En)
- OK)
- O(log kn )
- O(registro n k)
Producción:
3. O(logkn)
Explicación: Debido a que los bucles k n-1 veces, después de tomar log, se convierte en log k n.
9. ¿Cuál será la complejidad temporal del siguiente código?
Javascript
var value = 0; for(var i=0;i<n;i++) for(var j=0;j<i;j++) value += 1;
C++
int value = 0; for(int i=0;i<n;i++) for(int j=0;j<i;j++) value += 1;
Python3
value = 0; for i in range(n): for j in rnage(i): value=value+1
- norte
- (n+1)
- n(n-1)
- n(n+1)
Producción:
3. n(n-1)
Explicación: El primer bucle for se ejecutará (n) veces y otro bucle for se ejecutará (n-1) veces, por lo que el tiempo total será n(n-1).
10. Los algoritmos A y B tienen un tiempo de ejecución en el peor de los casos de O(n) y O(logn), respectivamente. Por lo tanto, el algoritmo B siempre se ejecuta más rápido que el algoritmo A.
- Verdadero
- Falso
False
Explicación: la notación Big-O proporciona una comparación asintótica en el tiempo de ejecución de los algoritmos. Para n < n 0 , el algoritmo A podría ejecutarse más rápido que el algoritmo B, por ejemplo.
Publicación traducida automáticamente
Artículo escrito por Abhishek Sharma 44 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA