Algoritmos y Eficiencia de Funcion f
48 Questions
1 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

¿Por qué la expresión $n - i + 1$ no puede ser siempre considerada una cota válida?

  • Porque j siempre decrece en cada iteración.
  • Porque siempre se mantiene positiva durante el bucle.
  • Porque depende de los valores del vector v. (correct)
  • Porque j debe ser igual a n para ser válida.

¿Qué condición debe cumplir una función de cota válida?

  • Decrecer en cada iteración. (correct)
  • Aumentar en cada iteración.
  • Ser mayor que n.
  • Ser siempre positiva.

¿Cuál de las siguientes afirmaciones es incorrecta sobre la llamada $f([1, 2, 3, 4, 5], 1, 3)$?

  • No tiene valores posibles para a y b que cumplan las condiciones. (correct)
  • Devuelve el resultado correcto según las condiciones.
  • Cumple las precondiciones.
  • Es válida porque k y n son mayores que 0.

¿Cuál es la correcta llamada a la función f que satisface la especificación dada?

<p>f([1, 1, 9, 0, 3, 4, 4], 2, 5) con resultado 4. (A)</p> Signup and view all the answers

¿Qué indica la expresión $b - a + 1 = k$ en el contexto de la función f?

<p>Define la longitud del intervalo considerado. (A)</p> Signup and view all the answers

¿Por qué la llamada a la función f(en un vector, con k < 0) fallaría?

<p>Porque k no puede ser negativo. (C)</p> Signup and view all the answers

Si $n ≤ 4$, ¿cuál es la posible consecuencia de la expresión inicial de la variable i?

<p>Puede resultar en valores negativos. (C)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones describe incorrectamente el intervalo [a, b]?

<p>El intervalo debe incluir el índice n. (C)</p> Signup and view all the answers

¿Cuál es la respuesta para $T(n)$ cuando $n \leq 1$?

<p>$T(n) = c$ (C)</p> Signup and view all the answers

¿Qué se puede deducir sobre $T(n)$ cuando $n > 1$?

<p>$T(n)$ sigue una relación recursiva. (D)</p> Signup and view all the answers

La generalización se utiliza para:

<p>Obtener funciones más generales que las deseadas. (A)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones sobre la mejora de eficiencia de algoritmos recursivos es correcta?

<p>Añadir parámetros puede mejorar la eficiencia. (B)</p> Signup and view all the answers

¿Qué implica la definición recursiva en algoritmos como quicksort y mergesort?

<p>Requieren parámetros adicionales para su correcta ejecución. (B)</p> Signup and view all the answers

¿Cómo se describe el proceso para obtener versiones recursivas finales a partir de versiones no finales?

<p>Se necesita añadir un parámetro acumulador. (B)</p> Signup and view all the answers

La relación $T(n) = 2T(n/2) + c'n$ es un ejemplo de cuál concepto?

<p>Recursión binaria. (D)</p> Signup and view all the answers

En el contexto de algoritmos recursivos, ¿cuál es el efecto de no definir adecuadamente el caso base?

<p>Podría ocasionar un bucle infinito. (D)</p> Signup and view all the answers

¿Qué relación establece la ecuación $T(n) = T(n-1) + T(n-2) + c_1$?

<p>Es una relación recursiva de Fibonacci. (B)</p> Signup and view all the answers

¿Cuál es la notación que representa el crecimiento de $T(n)$ según el contenido?

<p>$T(n) ext{ pertenece a } O(2^n)$ (B)</p> Signup and view all the answers

¿Bajo qué condición termina el algoritmo de búsqueda binaria descrito?

<p>Si $c$ es mayor que $f$. (C)</p> Signup and view all the answers

¿Qué sucede si la precondición inicial $c ightarrow f$ se mantiene?

<p>Podría causar un bucle infinito. (B)</p> Signup and view all the answers

¿Qué conclusión se puede obtener acerca de la función $f(int v[], int x, int c, int f)$?

<p>El algoritmo requiere un arreglo ordenado. (B)</p> Signup and view all the answers

¿Qué componente asegura que el algoritmo termina en caso de que $c$ y $f$ sean iguales?

<p>Se retorna el valor de $c$. (A)</p> Signup and view all the answers

¿Por qué es incorrecto afirmar que $T(n) otin O(n ext{ log } n)$?

<p>Porque $T(n)$ crece más rápido que $n ext{ log } n$. (C)</p> Signup and view all the answers

¿Qué condición inicial es necesaria para aplicar el algoritmo de búsqueda binaria eficientemente?

<p>$c ext{ debe ser menor que } f$. (D)</p> Signup and view all the answers

¿Cuál es la ventaja de añadir parámetros adicionales a los algoritmos recursivos?

<p>Mejorar la eficiencia de los algoritmos recursivos. (C)</p> Signup and view all the answers

¿Qué caracteriza a un algoritmo recursivo cuando se reduce el tamaño del problema por sustracción?

<p>Es exponencial si a &gt; 1. (B)</p> Signup and view all the answers

¿Cuál es el coste para $a = 1$ en un algoritmo recursivo según la fórmula mencionada?

<p>Es polinómico. (B)</p> Signup and view all the answers

¿Cuál de las siguientes afirmaciones sobre los parámetros adicionales en algoritmos de ordenación es correcta?

<p>Ayudan a ordenar segmentos específicos de un vector. (D)</p> Signup and view all the answers

¿Qué sucede si se añade un parámetro acumulador al transformar un algoritmo recursivo no final en uno final?

<p>Se optimiza el rendimiento del algoritmo. (B)</p> Signup and view all the answers

En un algoritmo recursivo, ¿qué implica que el coste sea exponental cuando 'a > 1'?

<p>El tiempo de ejecución crecerá rápidamente al aumentar el tamaño del problema. (A)</p> Signup and view all the answers

¿Cuál es el principal propósito de utilizar métodos de ordenación como quicksort y mergesort?

<p>Ordenar eficientemente segmentos de datos. (C)</p> Signup and view all the answers

¿Qué se puede definir como la característica clave en la transformación de un algoritmo recursivo no final a uno final?

<p>El uso de un parámetro acumulador. (C)</p> Signup and view all the answers

Cuántos intervalos [a, b] se encuentran en el vector [1, 1, 9, 0, 3, 4, 4] tal que cumplen con la longitud k = 2 y n = 5?

<p>4 (C)</p> Signup and view all the answers

Cuál de las siguientes afirmaciones sobre límites es cierta?

<p>𝛩(n^2) = 𝛩(2 * n^2) (C)</p> Signup and view all the answers

Qué condición deben cumplir los valores k y n para ser válidos en la función mencionada?

<p>k y n deben ser mayores o iguales que 0 (A)</p> Signup and view all the answers

Cuál de las siguientes afirmaciones es incorrecta?

<p>𝑂(n) ⊆ 𝜔(log n) (C)</p> Signup and view all the answers

Qué resultado se obtiene al aplicar el teorema del límite a lim (log n) / n cuando n tiende a infinito?

<p>0 (D)</p> Signup and view all the answers

Cuál es la relación válida entre las notaciones de complejidad 𝛩(n^2) y 𝛩(2 * n^2)?

<p>Son equivalentes (B)</p> Signup and view all the answers

Cuál de las siguientes condiciones es parte de la postcondición de los intervalos?

<p>Los valores del vector deben ser crecientes (A)</p> Signup and view all the answers

Cuál de las siguientes combinaciones es incompatible con las condiciones de k y n?

<p>k = -1, n = 5 (C)</p> Signup and view all the answers

Bajo qué condición el algoritmo de búsqueda binaria nunca termina?

<p>Cuando c es menor o igual a f (C)</p> Signup and view all the answers

¿Qué afirmación es cierta respecto al punto medio en el algoritmo de búsqueda binaria?

<p>El punto medio se calcula como m = (c + f) / 2. (B), El punto medio siempre satisface c ≤ m ≤ f. (D)</p> Signup and view all the answers

¿Cuándo termina el algoritmo de búsqueda binaria según la implementación dada?

<p>Solo termina si c es mayor que f (D)</p> Signup and view all the answers

¿Cuál es un error común en la interpretación de la terminación del algoritmo de búsqueda binaria?

<p>Creer que el algoritmo solo puede terminar si hay un valor encontrado. (A), Asumir que c y f deben ser iguales para que termine. (B)</p> Signup and view all the answers

¿Cuál es un caso base en el algoritmo que podría conducir a una recursión infinita?

<p>Cuando c = f (B)</p> Signup and view all the answers

¿Qué ocurre en la llamada recursiva si v[m] es mayor que x?

<p>Se invoca esta lógica nuevamente con f ajustado. (C)</p> Signup and view all the answers

¿Por qué es importante la condición 0 ≤ c ≤ f + 1 ≤ longitud(v)?

<p>Para garantizar que el algoritmo tenga índices válidos. (B)</p> Signup and view all the answers

¿Qué se puede concluir sobre la técnica de búsqueda binaria en comparación con la búsqueda lineal?

<p>Requiere que el array esté ordenado. (D)</p> Signup and view all the answers

Flashcards

La expresión 𝑛 − 𝑖 + 1 como cota válida

La expresión 𝑛 − 𝑖 + 1 representa una cota válida para un bucle que itera hasta 𝑛, donde 𝑖 incrementa en cada iteración. Esta cota indica cuántas iteraciones quedan por realizar.

La variable 𝑗 en el bucle

La variable 𝑗 no necesariamente decrece en todas las iteraciones dentro del bucle, dependiendo de los valores del vector 𝑣. Para que la expresión 𝑛 − 𝑖 + 1 sea una cota válida, debe decrecer en cada iteración, pero eso puede no estar garantizado.

La expresión 𝑛 − 𝑖 + 1 cuando 𝑛 ≤ 4

Si 𝑛 ≤ 4, el valor inicial de 𝑖 es 0, y la expresión 𝑛 − 𝑖 + 1 se vuelve negativa. Esto indica que no es una cota válida, ya que una cota debe ser siempre no negativa.

Función 𝑓(𝑣, 𝑘, 𝑛)

La función 𝑓 analiza un vector 𝑣 y busca subsecuencias ordenadas de tamaño 𝑘 dentro de un rango definido por 𝑛.

Signup and view all the flashcards

Llamada 𝑓( [3, 3, 4, 5], 3, 4 )

La función 𝑓( [3, 3, 4, 5], 3, 4) no cumple la precondición porque 𝑛 (4) no es menor que v.size() (4), lo que implica que el rango de búsqueda excede el tamaño del vector.

Signup and view all the flashcards

Llamada 𝑓( [1, 2, 3, 4, 5], 1, 3 )

La función 𝑓( [1, 2, 3, 4, 5], 1, 3) no cumple la postcondición porque para 𝑘 = 1 (longitud de la subsecuencia), no se encuentran subsecuencias ordenadas de tamaño 1 que se encuentren dentro del rango definido por 𝑛 = 3.

Signup and view all the flashcards

Llamada 𝑓( [1, 1, 9, 0, 3, 4, 4], 2, 5 )

La función 𝑓([1, 1, 9, 0, 3, 4, 4], 2, 5) busca subsecuencias ordenadas de tamaño 2 (𝑘) dentro del vector 𝑣, y encuentra 4 subsecuencias que cumplen con la condición en el rango definido por 𝑛.

Signup and view all the flashcards

Llamadas a 𝑓 correctas

Ninguna de las llamadas a 𝑓 proporcionadas en las opciones cumple correctamente tanto la precondición como la postcondición especifica.

Signup and view all the flashcards

Ω(g(n))

La notación asintótica Ω se utiliza para definir el límite inferior de una función. Si f(n) ∈ Ω(g(n)), significa que f(n) crece al menos tan rápido como g(n) para n suficientemente grande.

Signup and view all the flashcards

Teorema del límite

El teorema del límite establece que si el límite de la razón entre dos funciones tiende a un valor constante, entonces las dos funciones tienen el mismo orden asintótico.

Signup and view all the flashcards

O(g(n))

La notación asintótica O se utiliza para definir el límite superior de una función. Si f(n) ∈ O(g(n)), significa que f(n) crece como máximo tan rápido como g(n) para n suficientemente grande.

Signup and view all the flashcards

Θ(g(n))

La notación asintótica Θ se utiliza para definir un límite superior e inferior de una función. Si f(n) ∈ Θ(g(n)), significa que f(n) crece a la misma velocidad que g(n) para n suficientemente grande.

Signup and view all the flashcards

lim f(n)/g(n) = 0

Si el límite de la razón entre dos funciones tiende a 0, entonces la primera función crece más lentamente que la segunda función. En este caso, la primera función es un subconjunto de la segunda función.

Signup and view all the flashcards

lim f(n)/g(n) = c ≠ 0

Si el límite de la razón entre dos funciones tiende a un valor constante diferente de 0, entonces las dos funciones tienen el mismo orden asintótico. En este caso, las dos funciones pertenecen al mismo conjunto.

Signup and view all the flashcards

lim f(n)/g(n) = ∞

Si el límite de la razón entre dos funciones tiende a infinito, entonces la primera función crece más rápido que la segunda función. En este caso, la primera función no es un subconjunto de la segunda función.

Signup and view all the flashcards

Complejidad temporal

La complejidad temporal de un algoritmo mide el tiempo que tarda en ejecutarse en función del tamaño de la entrada. Las notaciones asintóticas se utilizan para describir el comportamiento de la complejidad temporal para entradas grandes.

Signup and view all the flashcards

Generalización en programación

La generalización es una técnica que consiste en añadir parámetros o resultados adicionales a una función. Esto puede resultar en funciones más versátiles, facilitar el diseño de algoritmos recursivos, mejorar la eficiencia de los algoritmos recursivos e incluso obtener versiones recursivas finales de funciones recursivas lineales no finales.

Signup and view all the flashcards

Generalización y recursión

La generalización de funciones permite crear algoritmos recursivos ya que se pueden definir recursivamente algunos algoritmos añadiendo parámetros adicionales. Un ejemplo de esto es la búsqueda binaria.

Signup and view all the flashcards

Generalización y eficiencia

Las técnicas de generalización pueden mejorar la eficiencia de los algoritmos recursivos mediante la adición de parámetros o resultados adicionales. Esto permite optimizar el proceso recursivo.

Signup and view all the flashcards

Generalización y recursión final

Modificar funciones recursivas lineales (que no terminan) para que sean recursivas finales requiere la adición de un parámetro acumulador. Este parámetro se usa para rastrear el progreso del algoritmo.

Signup and view all the flashcards

Recursión infinita

La recursión infinita ocurre cuando una función se llama a sí misma continuamente sin alcanzar un caso base. En este caso, el algoritmo se ejecuta indefinidamente sin producir un resultado.

Signup and view all the flashcards

Caso base

Para garantizar que un algoritmo recursivo termine, necesita una condición de parada o caso base que evite la recursión infinita.

Signup and view all the flashcards

Búsqueda binaria

El algoritmo de búsqueda binaria divide repetidamente el espacio de búsqueda a la mitad en cada paso, buscando el elemento deseado dentro de la mitad adecuada.

Signup and view all the flashcards

Condición de terminación (Búsqueda binaria)

Para garantizar la terminación del algoritmo de búsqueda binaria, la condición 𝑐 > 𝑓 debe cumplirse. De lo contrario, la recursión se produce indefinidamente.

Signup and view all the flashcards

Notación Big-O

La notación Big-O define una cota superior asintótica de un algoritmo. Indica el comportamiento del tiempo de ejecución del algoritmo a medida que el tamaño de la entrada se vuelve muy grande.

Signup and view all the flashcards

Notación Ω

La notación Ω define una cota inferior asintótica de un algoritmo. Indica el comportamiento mínimo del tiempo de ejecución del algoritmo a medida que el tamaño de la entrada se vuelve muy grande.

Signup and view all the flashcards

Notación Θ

La notación Θ define una cota asintótica ajustada de un algoritmo. Indica el comportamiento exacto del tiempo de ejecución del algoritmo a medida que el tamaño de la entrada se vuelve muy grande.

Signup and view all the flashcards

Pre-condición

La pre-condición de un algoritmo especifica las condiciones que deben cumplirse antes de que el algoritmo sea llamado. Estas condiciones garantizan que el algoritmo se comporte como se espera.

Signup and view all the flashcards

Ventajas de añadir parámetros adicionales

Añadir parámetros adicionales a un algoritmo recursivo puede aumentar su eficiencia y generalidad.

Signup and view all the flashcards

Complejidad temporal: reducción por sustracción

Los algoritmos recursivos con un tamaño de problema que se reduce por sustracción tienen la forma: T(n) = c0 si 0 ≤ n ≤ n0, T(n) = aT(n - b) + cnk si n > n0. La complejidad temporal depende del valor de 'a'.

Signup and view all the flashcards

a > 1: Complejidad exponencial

Si 'a' es mayor que 1, la complejidad temporal del algoritmo es exponencial independientemente del valor de 'b'.

Signup and view all the flashcards

a = 1: Complejidad polinomial

Si 'a' es igual a 1, la complejidad temporal del algoritmo es polinomial en función de 'n' y 'k'.

Signup and view all the flashcards

Versión recursiva final

Las versiones recursivas finales se obtienen de las versiones lineales no finales añadiendo un parámetro acumulador.

Signup and view all the flashcards

Definición de algoritmo recursivo

Los algoritmos recursivos pueden usarse para solucionar problemas dividiéndolos en subproblemas del mismo tipo.

Signup and view all the flashcards

Ejemplos de algoritmos recursivos

Ejemplos comunes: búsqueda binaria, ordenamiento quicksort, ordenamiento mergesort.

Signup and view all the flashcards

Resumen: Algoritmos recursivos

Algoritmos recursivos: añadir parámetros adicionales puede mejorar la eficiencia y generalidad, y facilitar el diseño.

Signup and view all the flashcards

Algoritmo recursivo de búsqueda binaria

Un algoritmo recursivo que implementa la búsqueda binaria, con la precondición: 0 ≤ c ≤ f + 1 ≤ longitud(v). Busca un valor x dentro de un vector v, utilizando la recursión para dividir el rango de búsqueda a la mitad en cada llamada.

Signup and view all the flashcards

Condición de terminación del algoritmo recursivo

C > f. Si la condición inicial es c > f, el caso base se alcanza directamente y el algoritmo termina.

Signup and view all the flashcards

Condición de ciclo infinito del algoritmo recursivo

c ≤ f. Si la condición inicial es c ≤ f, el algoritmo entra en un ciclo infinito porque cada llamada recursiva mantiene c ≤ f, asegurando que el caso base nunca se alcanse.

Signup and view all the flashcards

Función f(v, x, c, f)

La función f(v, x, c, f) determina la posición del elemento x en el arreglo v en un rango delimitado por c y f.

Signup and view all the flashcards

Rango en cada llamada recursiva

Un rango con c ≤ m ≤ f. En cada llamada recursiva se divide el rango en dos mitades (c, m) y (m, f), garantizando que ambos subrangos también cumplan la condición c ≤ m ≤ f.

Signup and view all the flashcards

Termina el algoritmo recursivo?

El algoritmo termina si la condición inicial es c > f, ya que el caso base se alcanza directamente. El algoritmo no termina si la condición inicial es c ≤ f.

Signup and view all the flashcards

Análisis del algoritmo recursivo de búsqueda binaria

El algoritmo de búsqueda binaria es eficiente y efectivo para buscar un elemento en un arreglo ordenado. Sin embargo, es crucial comprender que el algoritmo solo termina correctamente si la condición inicial cumple c > f. En caso de c ≤ f, se producirá una recursión infinita.

Signup and view all the flashcards

Study Notes

Fundamentos de Algoritmia - Examen de Enero

  • Observaciones:
    • En los exámenes, hay una única respuesta correcta por pregunta.
    • Cada respuesta correcta vale 0.1 puntos.
    • Cada respuesta incorrecta resta 0.033 puntos.

Pregunta 1

  • Especificación:
    • {v.size ≥ 0}
    • fun xxx(vector v) dev intr
    • {r = maxp, q : 0 ≤ p ≤ q ≤ v.size ∧ ∀i : p < i < q : v[i] = 0 : q - p}
  • Vector de entrada: v = [5, 4, 0, 4, 3, 0, 0, 0, 0, 5, 3, 0, 0, 5]
  • Pregunta: ¿Cuál es el valor de r según la especificación?
  • Respuesta: (a) r = 7.

Pregunta 2

  • Pregunta: ¿Cuál es la complejidad en el peor caso de un algoritmo óptimo que busca el máximo en un vector ordenado de n elementos?
  • Respuesta: (c) Θ(n).

Pregunta 3

  • Algoritmo:
    • int c = 0;
    • for (int i = 1; i < n; i *= 2)
    • for (int j = 0; j < m+2; ++j)
    • c += 4;
  • Pregunta: ¿Cuál es la complejidad del algoritmo?
  • Respuesta: (b) Θ(mlog n).

Pregunta 4

  • Predicado:
    • b = ∃w : 0 ≤ w < n : (∃k : 0 ≤ k : a[w] = 2 * k + 1)
  • Pregunta: ¿Qué significa el predicado para un vector a de n enteros con n ≥ 1 y una variable booleana b?
  • Respuesta: (a) Hay al menos una posición en el vector que contiene un número impar positivo.

Pregunta 5

  • Especificación:
    • {a.size ≥ 0}
    • fun contar Pares(vector a) dev int c
    • {c = #i : 0 < i < a.size : a[i] % 2 = 0}
  • Algoritmo:
    • int contarPares (vector const& a) {
    • int c=0; int k=-1;
    • while (k<a.size()-1)
    • { if (a[k+1] % 2 == 0) {c=c+1;} k=k+1; }
    • return c; }
  • Pregunta: Determina si el algoritmo anterior es correcto y, en su caso, cuál es el invariante.
  • Respuesta: (a) Es correcto con invariante {−1 ≤ k < a.size \ c = #i : 0 ≤ i ≤ k : a[i] % 2 = 0}.

Pregunta 6

  • Pregunta: Indica cuál de las siguientes afirmaciones sobre el algoritmo quicksort es falsa.
  • Respuesta: (a) Si los valores del vector están ordenados en orden creciente, tiene una complejidad cuadrática respecto al tamaño del vector.

Pregunta 7

  • Pregunta: ¿Qué dos algoritmos tienen el mismo orden de complejidad?
  • Respuesta: (a) se comportan de forma semejante para tamaños de entrada grandes.

Pregunta 8

  • Pregunta: ¿Cuál es el requisito imprescindible para utilizar el algoritmo de búsqueda binaria sobre un vector?
  • Respuesta: (c) Los valores del vector deben estar ordenados.

Pregunta 9

  • Algoritmo:
    • int k = 0; int N = 100;
    • for (int i = N-1; i > -N; --i) ++k;
  • Pregunta: Indica qué función de cota utilizarías para probar la terminación del bucle.
  • Respuesta: (d) f(i,N) = N-i

Pregunta 10

  • Recurrencia:
    • T(n) = (n-1) + n si n > 0
    • T(n) = 0 si n = 0
  • Pregunta: ¿Cuál es el coste del algoritmo con esa recurrencia?
  • Respuesta: O(n²).

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

Description

Este cuestionario explora conceptos clave en análisis de algoritmos, incluyendo condiciones para cotas válidas y especificaciones en funciones recursivas. También se examina la mejora de la eficiencia en algoritmos como quicksort y mergesort. Ideal para estudiantes de algoritmos avanzados.

More Like This

Use Quizgecko on...
Browser
Browser