Cuestionarios Unidos PDF
Document Details
Uploaded by NeatestWilliamsite6266
Universidad Tecnológica Nacional, Facultad Regional Córdoba
2023
Tags
Related
- Lecture 3 - CS50x 2024 Introduction to Computer Science PDF
- COMP 8547 Advanced Computing Concepts Fall 2024 Lecture Notes PDF
- Parcial 1 Enero 2021 ADA PDF
- Data Structures and Algorithms with Python and C++ PDF
- Data Structures and Algorithm Analysis in C++ 4th Edition PDF
- Intro To Programming In Python 4.1 Performance PDF
Summary
These are past exam papers related to the subject of AED (2023). The questions and answers cover topics such as algorithm analysis, recursion, and programming concepts.
Full Transcript
Página Principal / Mis cursos / AED (2023) / Ficha 14 / Cuestionario 14 [Temas: hasta Ficha 14] Comenzado el martes, 15 de agosto de 2023, 20:49 Estado Finalizado Finalizado en jueves, 17 de agosto de 2023, 11:57 Tiempo 1 día 15 horas...
Página Principal / Mis cursos / AED (2023) / Ficha 14 / Cuestionario 14 [Temas: hasta Ficha 14] Comenzado el martes, 15 de agosto de 2023, 20:49 Estado Finalizado Finalizado en jueves, 17 de agosto de 2023, 11:57 Tiempo 1 día 15 horas empleado Puntos 24/24 Calificación 10 de 10 (98%) Pregunta 1 Correcta Se puntúa 2 sobre 2 El cálculo del valor an (para simplificar, asumimos a > 0 y n >= 0 y sabiendo que si n = 0 entonces a0 = 1) es igual a multiplicar n veces el número a por sí mismo. Por caso, 53 = 5 * 5 * 5 = 125. Sabiendo esto, ¿cuál de las siguientes sería una definición recursiva matemáticamente correcta de la operación potencia(a, n)? Seleccione una: a. b. c. d. Pregunta 2 Correcta Se puntúa 1 sobre 1 Suponga que se quiere plantear una definición recursiva del concepto de bosque. ¿Cuál de las siguientes propuestas generales es correcta y constituye la mejor definición? Seleccione una: a. Un bosque es un conjunto que puede contener uno o más árboles agrupados con otro bosque. b. Un bosque es un conjunto de árboles que puede estar vacío, o puede contener uno o más árboles agrupados con otro bosque. c. Un bosque es un conjunto de árboles que puede estar vacío, o puede contener n árboles (con n > 0). d. Un bosque es un bosque. Pregunta 3 Correcta Se puntúa 1 sobre 1 ¿Cuáles de los siguientes son factores esenciales a tener en cuenta cuando se realiza el análisis de la eficiencia de un algoritmo (por ejemplo, para efectuar una comparación de rendimiento entre dos algoritmos que resuelven el mismo problema)? Seleccione una o más de una: a. El tiempo de ejecución. b. El consumo de memoria. c. El diseño de la interfaz de usuario. d. La complejidad aparente del código fuente. Pregunta 4 Correcta Se puntúa 1 sobre 1 Suponga que la versión recursiva de la función para el cálculo del factorial que se presentó en clases fuese redefinida en la forma siguiente: def factorial(n): f = n * factorial(n - 1) if n == 0: return 1 return f ¿Cuá es el problema (si lo hubiese) con esta versión de la función? Seleccione una: a. No hay ningún problema. Funciona correctamente. b. La función siempre retorna un 1, sin importar cual sea el valor de n. c. Para calcular el factorial necesita un ciclo for que genere los números a multiplicar. Así planteada, la función hace un único primer cálculo incompleto y lo retorna. d. Contiene todos los elementos que debería tener una función recursiva bien planteada, pero en el orden incorrecto: la condición para chequear si n es cero debería estar antes que la llamada recursiva para evitar la recursión infinita. Pregunta 5 Correcta Se puntúa 2 sobre 2 A lo largo del curso hemos visto la forma de plantear programas controlados por menú de opciones, y sabemos que esos programas incluyen un ciclo para el control del proceso. Pero también podríamos hacer un planteo basado en recursión, sin usar el ciclo, en forma similar a la que se muestra aquí: __author__ = 'Cátedra de AED' def menu(): print('1. Opcion 1') print('2. Opcion 2') print('3. Salir') op = int(input('Ingrese opcion: ')) if op == 1: print('Eligio la opcion 1...') elif op == 2: print('Eligio la opcion 2...') elif op == 3: return menu() # script principal... menu() ¿Hay algún problema o contraindicación respecto del uso y aplicación de esta versión recursiva para la gestión de un menú? Seleccione la respuesta que mejor describa este punto. Seleccione una: a. No hay ningún problema ni contraindicación. Y no sólo eso: la versión recursiva es más simple y compacta que la versión basada en un ciclo, por lo cual es incluso preferible usarla. b. Esta versión recursiva posiblemente sea más simple y compacta que la versión basada en un ciclo, pero la versión recursiva pide memoria de stack cada vez que se invoca, por lo que es más conveniente la iterativa. c. La versión recursiva que se mostró no funciona. Sólo permite cargar una vez la opción elegida, e inmediatamente se detiene. d. Esta versión recursiva es completamente equivalente a la versión iterativa. No hay ningún motivo para preferir la una sobre la otra. Da lo mismo si el programador usa la recursiva o la iterativa. Pregunta 6 Correcta Se puntúa 2 sobre 2 El producto de dos números a y b mayores o iguales cero, es en última instancia una suma: se puede ver como sumar b veces el número a, o como sumar a veces el número b. Por ejemplo: 5 * 3 = 5 + 5 + 5 o bien 5 * 3 = 3 + 3 + 3 + 3 + 3. Sabiendo esto, se puede intentar hacer una definición recursiva de la operación producto(a, b) [a >= 0, b >= 0], que podría ser la que sigue: ¿Es correcto el siguiente planteo de la función producto(a, b)? def producto(a, b): if a == 0 or b == 0: return 0 return a + producto(a, b-1) Seleccione una: a. No. La función sugerida siempre retornará 0, sean cuales fuesen los valores de a y b. b. No. La propia definición previa del concepto de producto es incorrecta: un producto es una multiplicación, y no una suma... c. No. La última línea debería decir return a + producto(a-1, b-1) en lugar de return a + producto(a, b-1). d. Sí. Es correcto. Pregunta 7 Correcta Se puntúa 2 sobre 2 En la tabla siguiente se muestra un resumen comparativo entre las versiones iterativa (basada en ciclos) y recursiva del algoritmo de cálculo del término n-ésimo de la Sucesión de Fibonacci. Note que se han dejado sin completar los casilleros que corresponden al tiempo de ejecución para ambos casos. Cálculo del término n-ésimo de Fibonacci Complejidad código Consumo de memoria Tiempo de ejecución [F(n)] fuente Versión iterativa Aceptable Constante (no depende ???? de n) Versión recursiva Optima Proporcional a n (lineal) ???? ¿Cuál es la estimación para el tiempo de ejecución de ambos algoritmos? Seleccione una: a. Versión iterativa: tiempo proporcional a n (lineal) - Versión recursiva: tiempo proporcional a bn (exponencial, para algún b > 1) b. Versión iterativa: tiempo proporcional a n (lineal) - Versión recursiva: tiempo proporcional a n (lineal) c. Versión iterativa: tiempo constante (no depende de n) - Versión recursiva: tiempo proporcional a bn (exponencial, para algún b > 1) d. Versión iterativa: tiempo proporcional a bn (exponencial, para algún b > 1) - Versión recursiva: tiempo proporcional a n (lineal) Pregunta 8 Correcta Se puntúa 1 sobre 1 ¿Cuáles de las siguientes propuestas generales son ciertas en relación al segmento de memoria conocido como Stack Segment? Seleccione una o más de una: a. El Stack Segment funciona como una pila (o apilamiento) de datos (modalidad LIFO: Last In - First Out): el último dato en llegar, se almacena en la cima del stack, y será por eso el primero en ser retirado. b. El Stack Segment se utiliza como soporte interno en el proceso de invocación a funciones (con o sin recursividad): se va llenando a medida que se desarrolla la cascada de invocaciones, y se vacía a medida que se produce el proceso de regreso o vuelta atrás. c. El Stack Segment funciona como una cola (o fila) de datos (modalidad FIFO: First In - First Out): el primer dato en llegar, se almacena al frente del stack, y será por eso el primero en ser retirado. d. El Stack Segment se utiliza como soporte interno solamente en el proceso de invocación a funciones recursivas: se va llenando a medida que la cascada recursiva se va desarrollando, y se vacía a medida que se produce el proceso de regreso o vuelta atrás. Pregunta 9 Correcta Se puntúa 2 sobre 2 Sabemos que la recursión es una de las técnicas o estrategias básicas para el planteo de algoritmos y que una de sus ventajas es que permite el diseño de algoritmos compactos y muy claros, aunque al costo de usar algo de memoria extra en el stack segment y por consiguiente también un algo de tiempo extra por la gestión del stack. Algunos problemas pueden plantearse en forma directa procesando recursivamente diversos subproblemas menores. Tal es el caso de la sucesión de Fibonacci, en la cual cada término se calcula como la suma de los dos inmediatamente anteriores [esto se expresa con la siguiente relación de recurrencia: F(n) = F(n-1) + F(n-2) con F(0) = 0 y F(1) = 1]. La función sencilla que mostramos a continuación que calcula el término n-ésimo de la sucesión en forma recursiva: def fibo(n): if n 1 en las primeras fases, y terminar con h = 1 en la última. b. El algoritmo Shellsort es complejo de analizar para determinar su rendimientos en forma matemática, ya que ese rendimiento depende fuertemente de la serie de incrementos decreciente que se haya seleccionado. c. Una muy buena serie de incrementos decrecientes a usar, es la serie h = {...16, 8, 4, 2, 1} d. El algoritmo Shellsort consiste en una mejora del algoritmo de Selección Directa, basada en buscar iterativamente el menor (o el mayor) entre los elementos que quedan en el vector, para llevarlo a su posición correcta, pero de forma que la b;usqueda del menor en cada vuelta se haga en tiempo logarítmico. Pregunta 8 Correcta Se puntúa 1 sobre 1 ¿Cuál es el problema si en el algoritmo Shellsort se elige una serie de incrementos decrecientes de la forma {..., 16, 8, 4, 2, 1} ? Seleccione una: a. El arreglo no quedará ordenado al final. b. Los subconjuntos analizados contendrán casi los mismos elementos cuando la distancia usada sea cada vez menor, sin garantías de lograr una buena organización del arreglo antes de la última pasada. c. Ningún problema: esa serie es tan buena como cualquier otra. d. No sólo no hay ningún problema, sino que esa serie es la mejor posible para el algoritmo Shellsort. Pregunta 9 Correcta Se puntúa 1 sobre 1 Sabemos que en el algoritmo de Shell se termina haciendo una última pasada sobre el arreglo con incremento de compración h = 1 ¿Cuál de las siguientes es cierta respecto de esa última pasada con h = 1? Seleccione una: a. No es obligatorio que lo haga, pero favorece un ordenamiento más rápido. b. Con h = 1 el algoritmo sólo controla si el arreglo está ya ordenado, y en caso de no estarlo relanza el proceso con otra sucesión de valores h. c. La pasada con h = 1 es obligatoria pero no es necesario que sea la última. d. Con h = 1 el algoritmo se convierte en un ordenamiento por inserción simple, y sólo entonces garantiza que el arreglo quede ordenado. Pregunta 10 Parcialmente correcta Se puntúa 1 sobre 1 ¿Cuáles de las siguientes son características correctas del algoritmo Heapsort? (Más de una puede ser cierta... marque TODAS las que considere válidas) Seleccione una o más de una: a. El algoritmo Heapsort se basa en encontrar sucesivamente el menor (o el mayor) de entre los elementos que quedan, para llevar ese valor a su casillero final, pero de forma que la búsqueda del menor (o el mayor) en cada vuelta se haga en forma muy veloz. b. El algoritmo Heapsort utiliza una cantidad de memoria adicional igual al tamaño del arreglo, para armar el heap o grupo de ordenamiento con el que se ordena el vector. c. El algoritmo Heapsort es muy eficiente en tiempo de ejecución, tanto para el caso promedio como para el peor caso. d. El algoritmo Heapsort arma el heap o grupo de ordenamiento con el que se ordena el vector, pero lo hace en el mismo vector, sin usar memoria extra. ◄ Materiales Adicionales para la Ficha 22 Ir a... Guía de Ejercicios Prácticos 22 ► Página Principal / Mis cursos / AED (2023) / Ficha 27 / Cuestionario 27 [Temas: hasta Ficha 27] Comenzado el lunes, 16 de octubre de 2023, 20:35 Estado Finalizado Finalizado en lunes, 16 de octubre de 2023, 20:58 Tiempo empleado 22 minutos 47 segundos Puntos 20/20 Calificación 10 de 10 (100%) Pregunta 1 Correcta Se puntúa 1 sobre 1 Para cada uno de los algoritmos o procesos listados en la columna de la izquierda, seleccione la expresión de orden que mejor describe su tiempo de ejecución en el peor caso. Dado un arreglo v con n componentes, acceder y cambiar el valor del casillero v[k] (con 0 O(1)