Considere estas dos funciones y dos declaraciones S1 y S2 sobre ellas
int work1(int *a, int i, int j) { int x = a[i+2]; a[j] = x+1; return a[i+2] – 3; } int work2(int *a, int i, int j) { int t1 = i+2; int t2 = a[t1]; a[j] = t2+1; return t2 – 3; }
S1: La transformación de trabajo1 a trabajo2 es válida, es decir, para cualquier estado del programa y argumentos de entrada, trabajo2 calculará la misma salida y tendrá el mismo efecto en el estado del programa que trabajo1
S2: Todas las transformaciones aplicadas a trabajo1 para obtener trabajo2 siempre serán mejorar el rendimiento (es decir, reducir el tiempo de CPU) de trabajo2 en comparación con trabajo1
(A) S1 es falso y S2 es falso
(B) S1 es falso y S2 es verdadero
(C) S1 es verdadero y S2 es falso
(D) S1 es verdadero y S2 es verdadero
Respuesta: (A)
Explicación: (S1): tome un contraejemplo, Array = [1 , 2, 3, 4, 5] e i = 0. Sea j = (i+2), entonces j = (0+2) = 2.
Para este ejemplo, trabajo1 y trabajo2 devolverán 1 y 0 respectivamente. Entonces, la afirmación es falsa.
(S2): No podemos comparar un programa determinado en función del tiempo de ejecución. No podemos decir que el rendimiento de work2 siempre será mejor que work1 para cualquier entrada. Entonces, la afirmación es falsa.
La opción (A) es correcta.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA