Algoritmos y Complejidad Computacional
42 Questions
0 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

¿Cuál es la capacidad de cálculo de una consola o GPU actual en teraFLOPS?

  • 10 teraFLOPS (correct)
  • 1 teraFLOPS
  • 1 exaFLOPS
  • 100 teraFLOPS
  • Para medir el coste de un algoritmo, una de las aproximaciones es contar las instrucciones y multiplicar por su coste. ¿Cuál de las siguientes opciones NO se utiliza como tiempo por instrucción?

  • Tiempo de una asignación
  • Tiempo de una comparación
  • Tiempo de un acceso a memoria (correct)
  • Tiempo de un incremento/decremento
  • En el ejemplo de la función de búsqueda, ¿qué afirmación es correcta si el valor x aparece en la última posición del vector?

  • El tiempo consumido será mínimo.
  • El tiempo consumido será máximo. (correct)
  • El tiempo consumido será constante.
  • El tiempo consumido será cero.
  • ¿Cuál es un enfoque menos práctico para medir la eficiencia de un algoritmo?

    <p>Multiplicar el número de instrucciones por su coste. (B)</p> Signup and view all the answers

    ¿Qué velocidad de cálculo corresponde a 1 exaFLOPS?

    <p>10^18 operaciones por segundo (D)</p> Signup and view all the answers

    ¿Qué representa la cota inferior Ω(f(n))?

    <p>El conjunto de funciones donde f(n) es una cota inferior no estricta para valores grandes de n. (A)</p> Signup and view all the answers

    ¿Cuál es la relación correcta que define el orden exacto de dos funciones f(n) y g(n)?

    <p>f(n) ∈ O(g(n)) y f(n) ∈ Ω(g(n)) (D)</p> Signup and view all the answers

    ¿Cuál de las siguientes afirmaciones sobre las cotas es incorrecta?

    <p>Θ(f(n)) indica que se puede expresar f(n) solo en términos de su cota superior. (B)</p> Signup and view all the answers

    La regla de la suma para las funciones complejidad establece que O(f + g) es igual a:

    <p>O(máx(f, g)) (A)</p> Signup and view all the answers

    Si una función f ∈ O(g) y g ∈ O(h), ¿qué implicación se puede derivar?

    <p>f ∈ O(h) (C)</p> Signup and view all the answers

    ¿Cuál es el menor número natural k tal que la función f(n) = 2n³ + n² log n esté en O(nk)?

    <p>3 (A)</p> Signup and view all the answers

    ¿Qué orden asintótico tiene el algoritmo potencia1 en el peor caso?

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

    Si f(n) = (n² + 17n + 3)², ¿cuál es el orden de f(n) en términos de n?

    <p>O(n⁴) (C)</p> Signup and view all the answers

    ¿Cómo se compara la función n² log n con la función n³?

    <p>n² log n es menor que n³ (A)</p> Signup and view all the answers

    ¿Cuál es el orden asintótico de la función f(n) = (2n + n²)(n³ + 3n)?

    <p>O(n⁵) (D)</p> Signup and view all the answers

    En relación a O y ⌦, ¿cómo se comportan las funciones n³ y n² + 5n?

    <p>n² + 5n es O de n³ (C), n³ es ⌦ de n² + 5n (D)</p> Signup and view all the answers

    En el algoritmo potencia2, ¿cuántas multiplicaciones realiza en el peor caso?

    <p>O(log y) (C)</p> Signup and view all the answers

    ¿Cuál es el menor orden g(n) tal que f(n) = n² + n³ esté en O(g(n))?

    <p>g(n) = n³ (B)</p> Signup and view all the answers

    ¿Qué función de complejidad permite solucionar problemas 100 veces más grandes al aumentar la velocidad del computador?

    <p>O(log n) (D)</p> Signup and view all the answers

    Si un algoritmo tiene coste O(n^3) y se duplica la velocidad del computador, ¿cuánto más grande puede ser el problema que se resuelve?

    <p>El tamaño del problema se multiplica por 4. (A)</p> Signup and view all the answers

    En la jerarquía de órdenes de complejidad, ¿cuál de los siguientes algoritmos se considera tratable?

    <p>Ambos B y C (A)</p> Signup and view all the answers

    ¿Cuál de las siguientes afirmaciones sobre los costos de complejidad es incorrecta?

    <p>O(n log n) es menos eficiente que O(n^2). (C)</p> Signup and view all the answers

    Al duplicar el tiempo durante el cual un algoritmo puede ejecutarse, ¿qué impacto tiene en un algoritmo O(n)?

    <p>Duplica el tamaño del problema que se resuelve. (A)</p> Signup and view all the answers

    ¿Qué característica distingue a los algoritmos de complejidad polinómica?

    <p>Son capaces de resolver problemas grandes en un tiempo razonable. (A)</p> Signup and view all the answers

    Si un algoritmo O(n^2) toma 1 hora para un problema de tamaño n=100, ¿cuánto tiempo tomaría para n=141?

    <p>2 horas. (D)</p> Signup and view all the answers

    ¿Qué función de complejidad tiene un crecimiento tan rápido que apenas significa un aumento en el tamaño del problema cuando se duplica el tiempo o la velocidad?

    <p>O(2^n) (B)</p> Signup and view all the answers

    ¿Qué valor devuelve la función si la lista está llena?

    <p>Devuelve false. (A)</p> Signup and view all the answers

    ¿Cuál es el propósito de la variable 'pos' en la función insertar?

    <p>Indicar la posición donde se debe insertar el nuevo elemento. (A)</p> Signup and view all the answers

    En la función 'ordenar', ¿qué indica 'nuevo'?

    <p>Es un valor temporal que guarda el elemento que se está insertando. (A)</p> Signup and view all the answers

    ¿Cuál es el tiempo medio de ejecución en el caso peor del algoritmo de ordenación por inserción?

    <p>O(n^2) (D)</p> Signup and view all the answers

    En la función de inserción, ¿qué sucede si el elemento que se va a insertar ya está en la lista?

    <p>No se realiza ninguna acción y se devuelve false. (D)</p> Signup and view all the answers

    ¿Qué operación se realiza después de encontrar la posición adecuada para insertar en la función insertar?

    <p>Se mueven los elementos a partir de esa posición hacia la derecha. (A)</p> Signup and view all the answers

    ¿Cuál es la complejidad temporal del algoritmo si 'buscar' es una búsqueda binaria?

    <p>O(n log n) (B)</p> Signup and view all the answers

    ¿Qué hace el bucle for en la función 'ordenar' después de identificar 'pos'?

    <p>Desplaza los elementos hacia la derecha para hacer espacio para 'nuevo'. (B)</p> Signup and view all the answers

    ¿Qué establece la regla del producto en relación con funciones de complejidad?

    <p>Si g1 está en O(f1) y g2 está en O(f2), entonces g1 · g2 está en O(f1 · f2). (D)</p> Signup and view all the answers

    Según el teorema del límite, bajo qué condiciones se cumple que f es O(g) y g es O(f)?

    <p>Cuando el límite de f(n) dividido por g(n) tiende a 1. (D)</p> Signup and view all the answers

    ¿Qué implica que f(n) está en O(g(n)) y el límite de f(n)/g(n) tiende a 0?

    <p>f(n) es de orden más bajo que g(n). (B)</p> Signup and view all the answers

    ¿Qué se puede concluir sobre dos funciones f y g cuando el límite de f(n)/g(n) tiende a +1?

    <p>g pertenece a O(f) y f a O(g). (B)</p> Signup and view all the answers

    ¿Qué significa la relación f(n) = Θ(g(n))?

    <p>f(n) está en O(g(n)) y g(n) también está en O(f(n)). (A)</p> Signup and view all the answers

    ¿Qué condición debe cumplirse para que se pueda afirmar que una función polinómica de grado m está en O(n^m)?

    <p>El coeficiente del término de mayor grado debe ser positivo. (B)</p> Signup and view all the answers

    El principio de dualidad se aplica cuando se establece que g(n) es O(f(n)). ¿Qué implica eso sobre f(n)?

    <p>f(n) también debe estar en Ω(g(n)). (A)</p> Signup and view all the answers

    ¿Qué sucede si tenemos que el límite de f(n) * g(n) tiende a +1?

    <p>f(n) y g(n) tienen el mismo orden de crecimiento. (A)</p> Signup and view all the answers

    Flashcards

    Eficiencia de un algoritmo

    La eficiencia de un algoritmo se refiere a la cantidad de recursos (tiempo, memoria, etc.) que consume para resolver un problema. Medir la eficiencia nos permite comparar algoritmos que resuelven un mismo problema.

    Cálculo de la eficiencia

    Una forma poco práctica de calcular la eficiencia de un algoritmo es contar las instrucciones y multiplicarlas por su costo. Cada instrucción tiene un tiempo asociado, como asignación, comparación, incremento/decremento o acceso a memoria.

    Tiempo de ejecución variable

    El tiempo de ejecución de un algoritmo puede variar dependiendo de la entrada. Por ejemplo, si buscamos un valor en un vector, la eficiencia dependerá de la posición del valor dentro del vector.

    Tiempo de crecimiento

    Los algoritmos suelen ser evaluados en términos de su tiempo de crecimiento, que es una manera de describir cómo aumenta el tiempo de ejecución a medida que aumenta el tamaño de la entrada.

    Signup and view all the flashcards

    Operaciones de un algoritmo

    Las operaciones de un algoritmo son las instrucciones que se ejecutan para resolver un problema. Cada instrucción tiene un costo asociado.

    Signup and view all the flashcards

    Cota inferior Ω(f(n))

    Es un conjunto de funciones donde f(n) es una cota inferior para valores suficientemente grandes de n. Es decir, la función g(n) siempre será mayor o igual a cf(n) (c es una constante positiva) a partir de un cierto valor de n (n0).

    Signup and view all the flashcards

    Cota superior O(f(n))

    Es el conjunto de funciones donde f(n) es una cota superior para valores suficientemente grandes de n. Es decir, la función g(n) siempre será menor o igual a cf(n) (c es una constante positiva) a partir de un cierto valor de n (n0).

    Signup and view all the flashcards

    Orden exacto Θ(g(n))

    Una función f(n) pertenece al orden exacto de g(n) si f(n) es tanto una cota superior como una cota inferior de g(n). Esto significa que ambas funciones crecen a la misma velocidad.

    Signup and view all the flashcards

    Orden de complejidad

    Es la clasificación de funciones en grupos de acuerdo a su velocidad de crecimiento. Cada grupo representa un orden de complejidad.

    Signup and view all the flashcards

    O grande (O(f(n)))

    La notación O grande (O(f(n))) representa un conjunto de funciones que están acotadas superiormente por una función f(n) multiplicada por una constante positiva y aplicada a un valor suficientemente grande de n.

    Signup and view all the flashcards

    Omega (⌦(f(n)))

    La notación Omega (⌦(f(n))) representa un conjunto de funciones que están acotadas inferiormente por una función f(n) multiplicada por una constante positiva y aplicada a un valor suficientemente grande de n.

    Signup and view all the flashcards

    Theta (⇥(f(n)))

    La notación Theta (⇥(f(n))) representa un conjunto de funciones que crecen a la misma velocidad que f(n) multiplicada por una constante positiva a medida que n tiende al infinito.

    Signup and view all the flashcards

    Principio de dualidad

    Si g(n) 2 O(f(n)), entonces f(n) 2 ⌦(g(n)).

    Signup and view all the flashcards

    Teorema del límite para O

    Si el límite de f(n)/g(n) es una constante positiva a medida que n tiende al infinito, entonces O(f(n)) = O(g(n)).

    Signup and view all the flashcards

    Teorema del límite para O

    Si el límite de f(n)/g(n) es 0 a medida que n tiende al infinito, entonces O(f(n)) ⇢ O(g(n)).

    Signup and view all the flashcards

    Teorema del límite para O

    Si el límite de f(n)/g(n) es infinito a medida que n tiende al infinito, entonces O(f(n)) O(g(n)).

    Signup and view all the flashcards

    Regla de la suma

    Si una función h(n) está acotada superiormente por una constante multiplicada por la suma de dos funciones f(n) y g(n) para un valor suficientemente grande de n, entonces h(n) está en O(f(n) + g(n)).

    Signup and view all the flashcards

    Orden asintótico

    El orden asintótico de un algoritmo describe cómo el tiempo de ejecución o el uso de memoria aumenta a medida que aumenta el tamaño de la entrada. Básicamente, te dice qué tan rápido crece la función que describe el tiempo o el espacio.

    Signup and view all the flashcards

    Complejidad O(n)

    Un algoritmo es de complejidad O(n) si su tiempo de ejecución crece linealmente con el tamaño de la entrada (n). Por ejemplo, si un bucle recorre todos los elementos de un array, el tiempo de ejecución será proporcional a la cantidad de elementos en el array.

    Signup and view all the flashcards

    Complejidad O(n²)

    Un algoritmo es de complejidad O(n²) si su tiempo de ejecución crece cuadráticamente con el tamaño de la entrada (n). Por ejemplo, si un algoritmo compara cada elemento con todos los demás elementos de un array, el tiempo de ejecución será proporcional al cuadrado de la cantidad de elementos en el array.

    Signup and view all the flashcards

    Complejidad O(log n)

    Un algoritmo es de complejidad O(log n) si su tiempo de ejecución crece logarítmicamente con el tamaño de la entrada (n). Este tipo de algoritmos suelen dividir el problema en subproblemas más pequeños hasta que se resuelve el problema original. Por ejemplo, la búsqueda binaria tiene una complejidad logarítmica.

    Signup and view all the flashcards

    Complejidad O(1)

    Un algoritmo es de complejidad O(1) si su tiempo de ejecución es constante, independientemente del tamaño de la entrada.

    Signup and view all the flashcards

    Caso peor

    El caso peor de un algoritmo es el caso de la entrada más desafiante que puede recibir. Por ejemplo, en un algoritmo de búsqueda, el caso peor podría ser cuando el elemento que buscamos no está presente en el conjunto de datos.

    Signup and view all the flashcards

    Caso mejor

    El caso mejor de un algoritmo es el caso de la entrada más simple que puede recibir. Por ejemplo, en un algoritmo de búsqueda, el caso mejor podría ser cuando el elemento que buscamos está en el primer lugar del conjunto de datos.

    Signup and view all the flashcards

    Caso promedio

    El caso promedio de un algoritmo es el caso promedio de todas las entradas posibles. Es difícil de calcular exactamente, pero da una idea general de cómo funciona el algoritmo en una situación típica.

    Signup and view all the flashcards

    ¿Cuántos pasos se ejecutan en la mejor y peor situación para la función insertar?

    La función insertar inserta un elemento en una lista ordenada sin repeticiones. En el caso mejor, el nuevo elemento se inserta al final de la lista, por lo que solo se ejecuta la condición lista.cont == MAX y no se ejecuta el bucle. En el caso peor, el nuevo elemento se inserta al inicio de la lista, por lo que se ejecutan todas las instrucciones del bucle.

    Signup and view all the flashcards

    Comportamiento asintótico de la función insertar con búsqueda lineal

    La función insertar utilizando búsqueda lineal recorre toda la lista buscando la posición donde se inserta el nuevo elemento. En el caso mejor, el elemento se encuentra en el último lugar de la lista, por lo que se ejecutan todas las instrucciones del bucle. En el caso peor, el elemento se encuentra en el primer lugar de la lista, por lo que se ejecutan todas las instrucciones del bucle.

    Signup and view all the flashcards

    Comportamiento asintótico de la función insertar con búsqueda binaria

    La función insertar utilizando búsqueda binaria divide el espacio de búsqueda a la mitad en cada iteración. En el caso mejor, el elemento se encuentra en la mitad de la lista, por lo que se ejecutan solo las instrucciones del bucle para dividir la lista. En el caso peor, el elemento se encuentra en el último lugar de la lista, por lo que se ejecutan todas las instrucciones del bucle.

    Signup and view all the flashcards

    ¿Cuántos pasos se ejecutan en la mejor y peor situación para la función ordenar?

    La función ordenar utiliza el algoritmo de inserción directa para ordenar una lista de enteros. En el caso mejor, la lista ya está ordenada, por lo que se ejecuta solo la condición del bucle exterior del algoritmo. En el caso peor, la lista está ordenada de forma inversa, por lo que se ejecutan todas las instrucciones del algoritmo.

    Signup and view all the flashcards

    Comportamiento asintótico en la función ordenar con inserción directa

    La función ordenar utilizando el algoritmo de inserción directa recorre la lista elemento por elemento, comparando cada elemento con los elementos anteriores para ubicarlo en la posición correcta. En el caso mejor, la lista ya está ordenada, por lo que solo se ejecutarán las instrucciones del bucle exterior. En el caso peor, la lista está ordenada de forma inversa, por lo que se ejecutarán todas las instrucciones del algoritmo.

    Signup and view all the flashcards

    ¿Cuántos pasos se ejecutan en la mejor y peor situación para la función ordenar (burbuja)?

    La función ordenar utiliza el algoritmo de la burbuja para ordenar una lista de enteros. En el caso mejor, la lista ya está ordenada, por lo que se ejecuta solo la condición del bucle exterior del algoritmo. En el caso peor, la lista está ordenada de forma inversa, por lo que se ejecutan todas las instrucciones del algoritmo.

    Signup and view all the flashcards

    Comportamiento asintótico en la función ordenar con ordenación de la burbuja

    La función ordenar utilizando la ordenación por burbuja recorre la lista varias veces, comparando pares de elementos adyacentes e intercambiándolos si están fuera de orden. En el caso mejor, la lista ya está ordenada, por lo que se ejecuta solo la condición del bucle exterior del algoritmo. En el caso peor, la lista está ordenada de forma inversa, por lo que se ejecutarán todas las instrucciones del algoritmo.

    Signup and view all the flashcards

    Análisis de la función ordenar (burbuja): Iteraciones

    Cada iteración del bucle intercambia elementos adyacentes si están fuera de orden. En el caso mejor, solo se ejecuta una iteración del bucle exterior, ya que la lista está ordenada. En el caso peor, el número de iteraciones del bucle exterior será igual al número de elementos en la lista.

    Signup and view all the flashcards

    Complejidad logarítmica (O(log n))

    Una función que crece de manera logarítmica con respecto al tamaño de la entrada. Estas funciones se caracterizan por dividir el problema en partes mas pequeñas hasta resolverlo. Un ejemplo de una función logarítmica es "log10n".

    Signup and view all the flashcards

    Complejidad lineal (O(n))

    Una función que crece linealmente con respecto al tamaño de la entrada. Se ejecuta una cantidad fija de operaciones por cada elemento de entrada. Un ejemplo de una función lineal es "n".

    Signup and view all the flashcards

    Complejidad cuadrática (O(n²))

    Una función que crece de manera cuadrática con respecto al tamaño de la entrada. El tiempo de ejecución aumenta exponencialmente con el tamaño de la entrada. Un ejemplo de una función cuadrática es "n2".

    Signup and view all the flashcards

    Complejidad exponencial (O(2^n))

    Una función que crece exponencialmente. El tiempo de ejecución aumenta increíblemente rápido a medida que aumenta la entrada. Un ejemplo de una función exponencial es "2n".

    Signup and view all the flashcards

    Complejidad constante (O(1))

    Una función que representa un tiempo de ejecución constante, independientemente del tamaño de la entrada. Se ejecuta una cantidad fija de operaciones. Un ejemplo de una función constante es "1".

    Signup and view all the flashcards

    Cota inferior (Ω(f(n)))

    Conjunto de funciones que están acotadas inferiormente por una función f(n) multiplicada por una constante, para valores suficientemente grandes de n.

    Signup and view all the flashcards

    Study Notes

    Análisis de la eficiencia de los algoritmos

    • El análisis de la eficiencia de los algoritmos es fundamental en la programación para comparar algoritmos y seleccionar la mejor opción para resolver problemas.
    • La eficiencia se mide en términos de tiempo y espacio (memoria).
    • Un algoritmo eficiente consume los recursos (tiempo y memoria) de forma mínima.
    • Un algoritmo ineficiente puede consumir innecesariamente recursos.
    • El crecimiento exponencial de los problemas puede representar un desafío.

    ¿Qué es un número grande?

    • La pandemia de COVID-19 en 2020 mostró ejemplos de crecimiento exponencial en la propagación.
    • Un ejemplo es que un número de infectados se duplica cada tres días.
    • Un solo lirio de agua en un pantano puede cubrirlo en 30 días si su tamaño se duplica cada día.
    • Ejemplos como el arroz y ajedrez muestra la rápida exponencialidad en las cantidades.
    • Los problemas que crecen exponencialmente demuestran la importancia de los algoritmos eficientes.

    Eficiencia

    • La eficiencia de un programa se relaciona con los recursos que utiliza.
    • Los recursos comunes en programación son el tiempo y el espacio (memoria).
    • Un programa eficiente utiliza el mínimo tiempo y memoria posible.
    • Un programa ineficiente consume innecesariamente tiempo y/o memoria.
    • El análisis de costos de algoritmos es importante para la toma de decisiones en el desarrollo.

    Cálculo explícito y funciones de coste

    • Calcular el coste de un algoritmo de forma explícita implica contar las instrucciones que ejecuta.
    • Cada instrucción tiene un coste asociado (por ejemplo, asignación, suma, comparación).
    • Sumar esos costos da una estimación del tiempo de ejecución de cada algoritmo.
    • Un enfoque poco práctico es contar cada paso y aplicarle su respectivo tiempo.
    • La función de coste de un algoritmo se relaciona con su coste.

    Ejemplos de cálculo de eficiencia explícito

    • La eficiencia del programa puede variar dependiendo de la entrada.
    • El caso mejor es cuando el programa encuentra el dato buscado rápidamente.
    • El caso peor es cuando el programa debe buscar el dato buscado en toda la entrada.
    • Costos constantes, como la asignación de una variable, tienen un coste de O(1)
    • El caso más frecuente es lineal (proporcional al tamaño de las entradas) con coste de O(n)
    • El caso de búsqueda binaria es logarítmico, O((log n))

    Medidas asintóticas de eficiencia

    • Las medidas asintóticas son importantes ya que no dependen de la tecnología concreta.
    • Son necesarias para comparar algoritmos en términos de crecimiento del tiempo de ejecución.
    • Pueden ignorarse las constantes multiplicativas y aditivas, en las funciones de coste para la comparación.
    • El análisis se centra en valores de "n" (tamaño) suficientemente grandes.
    • Se define el orden de complejidad usando notación O,Ω,Θ.

    Análisis de eficiencia en algoritmos iterativos

    • El cálculo del coste de los algoritmos iterativos se simplifica al considerar sólo el orden de magnitud.
    • Se determina el orden de complejidad de un algoritmo en base al número de iteraciones y el coste de cada paso.
    • Las reglas para el cálculo de la eficiencia (condición, bucles, llamadas a funciones etc.) ayudan a determinar la eficiencia en función del tamaño de entrada.
    • En la práctica de desarrollo no se realiza un calculo exacto del tiempo de cada paso o instrucción, se busca simplificar.

    Órdenes de complejidad

    • Los órdenes de complejidad indican el crecimiento del tiempo de ejecución en función del tamaño de la entrada.
    • Existen diferentes órdenes de complejidad con comportamientos distintos en el tiempo de ejecución; ejemplos incluyen: 0(1), 0(log n), 0(n), etc.
    • La jerarquía de órdenes indica el crecimiento relativo de las funciones de coste.
    • (0(1)) algoritmo constante, (0(log n)) algoritmo logarítmico, etc.
    • Algunos ejemplos de algoritmos iterativos incluyen seleccion, producto de matrices donde el coste computacional se analiza por la instrucción crítica (la que tiene la frecuencia de ejecución más alta) y es calculado usando sumatorios.

    Resumen del tema

    • Distinguir entre el orden de complejidad en el caso mejor, peor, o promedio.
    • Saber comparar las dos medidas de coste.
    • Entender que el coste asintótico es sobre valores muy grandes.
    • Saber calcular los costes exactos de programas iterativos.

    Studying That Suits You

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

    Quiz Team

    Related Documents

    Description

    Pon a prueba tus conocimientos sobre algoritmos y su complejidad. Este cuestionario abarca desde conceptos de cálculo en teraFLOPS hasta cotas y orden asintótico. Responde preguntas clave para entender mejor la eficiencia de los algoritmos.

    More Like This

    Use Quizgecko on...
    Browser
    Browser