Análisis y Diseño de Algoritmos

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Listen to an AI-generated conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

¿Cuál es el propósito principal del análisis de algoritmos?

  • Evaluar la eficiencia de un algoritmo en términos de tiempo y recursos (correct)
  • Simplificar el código fuente del algoritmo
  • Optimizar el uso de la memoria RAM
  • Asegurar la compatibilidad del algoritmo con diferentes sistemas operativos

La notación Big O se utiliza para medir el tiempo exacto de ejecución de un algoritmo en segundos.

False (B)

¿Cuál es la principal diferencia entre la medición empírica y el análisis teórico del rendimiento de un algoritmo?

La medición empírica se basa en la ejecución del algoritmo, mientras que el análisis teórico se basa en el conteo de operaciones.

Un algoritmo es considerado eficiente si resuelve un problema en el menor tiempo posible y con el menor uso de recursos ____________.

<p>computacionales</p>
Signup and view all the answers

Relacione las siguientes notaciones Big O con su descripción de crecimiento:

<p>O(1) = Tiempo constante O(n) = Tiempo lineal O(log n) = Tiempo logarítmico O(n^2) = Tiempo cuadrático</p>
Signup and view all the answers

¿Qué característica NO es esencial para que un conjunto de instrucciones sea considerado un algoritmo?

<p>Ser ambiguo (B)</p>
Signup and view all the answers

La eficiencia espacial de un algoritmo se refiere únicamente a la cantidad de memoria RAM que utiliza durante su ejecución.

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

En términos de la eficiencia de un algoritmo, ¿qué representa la notación O(n log n)?

<p>Complejidad cuasilineal.</p>
Signup and view all the answers

Un algoritmo de búsqueda __________ es eficiente para listas ordenadas porque divide repetidamente la lista a la mitad.

<p>binaria</p>
Signup and view all the answers

Relacione los siguientes algoritmos de ordenación con su complejidad temporal en el peor caso:

<p>Bubble Sort = O(n^2) Merge Sort = O(n log n) Quick Sort = O(n^2) Insertion Sort = O(n^2)</p>
Signup and view all the answers

¿Por qué es importante considerar la escalabilidad al analizar el rendimiento de un algoritmo?

<p>Para garantizar que el algoritmo pueda manejar grandes volúmenes de datos sin volverse inusable. (B)</p>
Signup and view all the answers

En el análisis de algoritmos, siempre es preferible un algoritmo con menor complejidad temporal, independientemente de su eficiencia espacial.

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

¿Qué representan los términos 'n' en la notación Big O cuando se analiza un algoritmo?

<p>Tamaño de la entrada</p>
Signup and view all the answers

Un algoritmo con una complejidad de O(1) se dice que tiene un tiempo de ejecución __________, independientemente del tamaño de la entrada.

<p>constante</p>
Signup and view all the answers

Relacione los siguientes ejemplos con la notación Big O más apropiada:

<p>Acceder a un elemento en un array = O(1) Búsqueda binaria en un array ordenado = O(log n) Recorrer todos los elementos de un array = O(n) Bubble Sort = O(n^2)</p>
Signup and view all the answers

¿Cuál es el principal beneficio de utilizar la notación Big O en el análisis de algoritmos?

<p>Permite comparar la eficiencia de los algoritmos independientemente del hardware (C)</p>
Signup and view all the answers

La medición empírica del rendimiento de un algoritmo es siempre más precisa que el análisis teórico.

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

¿Cómo afecta el uso de la recursividad a la eficiencia espacial de un algoritmo?

<p>Aumenta el consumo de memoria debido a la pila de llamadas.</p>
Signup and view all the answers

Un algoritmo es considerado __________ si proporciona el mismo resultado para la misma entrada cada vez que se ejecuta.

<p>determinista</p>
Signup and view all the answers

Relacione los siguientes conceptos con su descripción:

<p>Eficiencia temporal = Tiempo de ejecución del algoritmo Eficiencia espacial = Cantidad de memoria utilizada por el algoritmo Escalabilidad = Capacidad de manejar grandes volúmenes de datos Notación Big O = Medida del crecimiento del tiempo de ejecución</p>
Signup and view all the answers

¿Cuál de las siguientes es una desventaja del análisis teórico de algoritmos?

<p>No siempre refleja con precisión el tiempo de ejecución real. (C)</p>
Signup and view all the answers

Un algoritmo con una complejidad de O(n!) es generalmente más eficiente que uno con complejidad de O(2^n) para grandes valores de 'n'.

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

¿Por qué es importante la optimización de hardware en el contexto del análisis de rendimiento de algoritmos?

<p>Algoritmos eficientes reducen los costos y el consumo energético.</p>
Signup and view all the answers

La __________ es esencial para asegurar que un algoritmo funcione bien con pocos datos, pero que no se vuelva inutilizable a medida que crecen los volúmenes de datos.

<p>escalabilidad</p>
Signup and view all the answers

Relacione las siguientes operaciones con su respectiva complejidad en notación Big O:

<p>Acceder al primer elemento de una LinkedList = O(n) Acceder al primer elemento de un ArrayList = O(1) Buscar un elemento en un HashMap = O(1) Buscar un elemento en una lista no ordenada = O(n)</p>
Signup and view all the answers

¿Qué factor NO afecta directamente la eficiencia del tiempo de ejecución de un algoritmo?

<p>El lenguaje de programación utilizado (C)</p>
Signup and view all the answers

Un algoritmo de búsqueda lineal siempre es más eficiente que un algoritmo de búsqueda binaria.

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

¿Qué significa que la complejidad de un algoritmo sea O(log n)?

<p>Tiempo logarítmico</p>
Signup and view all the answers

La __________ se usa para clasificar algoritmos según su crecimiento en función del tamaño de la entrada.

<p>notación Big O</p>
Signup and view all the answers

Relacione cada tipo de algoritmo con su complejidad temporal:

<p>Búsqueda binaria = O(log n) Ordenamiento de burbuja = O(n^2) Búsqueda lineal = O(n) Acceso a un elemento de un array por índice = O(1)</p>
Signup and view all the answers

¿Cuál es la principal razón para elegir un algoritmo de menor complejidad temporal sobre uno de mayor complejidad temporal?

<p>Para reducir el tiempo de ejecución, especialmente con grandes conjuntos de datos (C)</p>
Signup and view all the answers

La notación O(n log n) es considerada una complejidad lineal.

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

¿Qué estrategia se utiliza para dividir las entradas de datos en subproblemas más pequeños en el método de 'divide y vencerás'?

<p>Recursividad</p>
Signup and view all the answers

El tiempo de ejecución de un algoritmo con complejidad __________ no se ve afectado por el tamaño de entrada.

<p>constante</p>
Signup and view all the answers

Empareja los factores que impactan en la eficiencia de un algoritmo con los factores clave.

<p>Tiempo de ejecución = Cuánto tarda Uso de memoria = Cuánta memoria se utiliza Escalabilidad = Qué tan bien escala con el tamaño de la entrada</p>
Signup and view all the answers

¿Cuál de las siguientes descripciones representa mejor un algoritmo?

<p>Un conjunto finito de pasos bien definidos y lógicos para resolver un problema. (D)</p>
Signup and view all the answers

Si un algoritmo es eficiente en tiempo de ejecución, automáticamente será eficiente en el uso de la memoria.

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

¿Qué se requiere para que un algoritmo se considere determinista?

<p>Los mismos resultados para la misma entrada</p>
Signup and view all the answers

Un beneficio importante de un algoritmo eficiente es que puede reducir el __________ y el consumo energético.

<p>costo</p>
Signup and view all the answers

Relacione los siguientes algoritmos fundamentales con sus complexidades temporales en el peor caso:

<p>Algoritmo de búsqueda lineal = O(n) Algoritmo de ordenamiento de mezcla (Merge sort) = O(n log n) Algoritmo de búsqueda binaria = O(log n) Algoritmo de inserción en una tabla hash = O(1) promedio, O(n) en el peor caso</p>
Signup and view all the answers

Flashcards

¿Qué es un algoritmo?

Un conjunto finito de pasos lógicos para resolver un problema.

Definición de un algoritmo

Claridad en cada paso, sin ambigüedades.

Precisión de un algoritmo

Sin confusiones al ejecutar los pasos.

Finitud de un algoritmo

Debe terminar en algún momento.

Signup and view all the flashcards

Orden al programar

Las instrucciones deben seguir una secuencia lógica.

Signup and view all the flashcards

Determinismo en algoritmos

Misma entrada resulta en la misma salida.

Signup and view all the flashcards

Eficiencia de un algoritmo

Usar la mínima cantidad de recursos posible.

Signup and view all the flashcards

Generalidad de un algoritmo

Aplicable a distintos conjuntos de datos.

Signup and view all the flashcards

¿Qué mide la complejidad algorítmica?

Qué tan rápido y qué tantos recursos usa.

Signup and view all the flashcards

¿Qué es un algoritmo eficiente?

Resuelve en el menor tiempo y con menos recursos.

Signup and view all the flashcards

Tiempo de ejecución

Cuánto tarda en ejecutarse el algoritmo.

Signup and view all the flashcards

Uso de memoria

Cuántos recursos de almacenamiento necesita.

Signup and view all the flashcards

¿Qué afecta la escalabilidad?

Problemas con grandes datos.

Signup and view all the flashcards

¿Qué optimiza un buen algoritmo?

Menos CPU y memoria.

Signup and view all the flashcards

¿Qué mejora la experiencia del usuario?

Velocidad de respuesta.

Signup and view all the flashcards

Tiempo de ejecución

Cuánto tarda el algoritmo en ejecutarse.

Signup and view all the flashcards

¿Qué hace la notación Big-O?

Clasifica algoritmos según su crecimiento.

Signup and view all the flashcards

Algoritmo de tiempo constante

Acceder a un elemento en un array.

Signup and view all the flashcards

Ejemplo de algoritmo logarítmico

Búsqueda binaria.

Signup and view all the flashcards

Algoritmo lineal

Recorrer un array.

Signup and view all the flashcards

Algoritmos cuasilineales

Quick Sort, Merge Sort (promedio).

Signup and view all the flashcards

Algoritmos cuadráticos

Burbuja y Selección

Signup and view all the flashcards

Uso de memoria

Mide memoria extra usada por el algoritmo.

Signup and view all the flashcards

Recursión ineficiente

Cuando Fibonacci tiene múltiples llamadas.

Signup and view all the flashcards

Medición empírica

Ejecutar el algoritmo y medir el tiempo.

Signup and view all the flashcards

Análisis teórico

Contar operaciones y su complejidad.

Signup and view all the flashcards

Tiempo de ejecución

Tiempo que tarda en ejecutarse.

Signup and view all the flashcards

Conteo de operaciones

Cantidad de pasos o comparaciones.

Signup and view all the flashcards

Eficiencia Temporal

Se refiere al tiempo de ejecución del algoritmo

Signup and view all the flashcards

Eficiencia Espacial

Se refiere a la cantidad de memoria que usa el algoritmo

Signup and view all the flashcards

Notación Big O

Describe cómo crece el tiempo de ejecución de un algoritmo a medida que aumenta el tamaño de la entrada (n).

Signup and view all the flashcards

Study Notes

Análisis y Diseño de Algoritmos

  • El contenido cubre el análisis y diseño de algoritmos.
  • Se revisan algoritmos y métodos de ordenación.

Sílabo del Curso

  • El nombre del curso es Análisis y Diseño de Algoritmos (100000S135).
  • Esto corresponde al ciclo 1 de marzo de 2025.
  • El curso forma parte de las carreras de Ingeniería de Sistemas e Informática e Ingeniería de Software.
  • El curso otorga 3 créditos académicos.
  • La enseñanza es presencial con 4 horas semanales.
  • El curso proporciona las habilidades para desarrollar e implementar algoritmos complejos en programación orientada a objetos, para soluciones de software complejas.
  • La sumilla indica que el curso es práctico y trata temas como ordenación, búsqueda, división, recursividad y grafos para plantear soluciones algorítmicas eficientes.
  • Al finalizar, el alumno aplicará técnicas algorítmicas mediante el paradigma orientado a objetos.

Unidades y Logros Específicos de Aprendizaje

  • La unidad 1 se centra en análisis de algoritmos y métodos de ordenación.
  • Al finalizar la unidad, se espera que el estudiante aplique los fundamentos del análisis de algoritmos y métodos de ordenación para la resolución de problemas.
  • La semana 1 a la 5 está dedicada a la Unidad de Aprendizaje 1.

Temario de la Unidad 1

  • Complejidad algorítmica, eficiencia de un algoritmo, análisis de rendimiento, eficiencia y complejidad y notación Big O.
  • Algoritmos de ordenación interna: intercambio, selección e inserción (codificación y complejidad).
  • Algoritmos de ordenación externa y métodos de ordenación de archivos (mezcla directa, fusión natural, mezcla equilibrada múltiple, método polifásico).
  • Resolución de problemas.

Unidad de Aprendizaje 2

  • Se centra en métodos de búsqueda del curso.
  • Al finalizar la unidad, se busca que el estudiante aplique los métodos algorítmicos para la resolución de problemas.
  • Los temas cubiertos incluyen Algoritmos de Búsqueda Interna (TABLAS HASH: Tablas de Dispersión, Funciones de dispersión. Colisiones y resolución de colisiones. Exploración de direcciones).
  • También, Algoritmos de Búsqueda Interna (TABLAS HASH: Realización de una tabla dispersa. Direccionamiento enlazado).
  • Se ven Algoritmos de Búsqueda Externa (Algoritmos de Búsqueda en Archivos: Búsqueda secuencial mediante bloques. Búsqueda secuencial con índices. Búsqueda por transformación de claves. Listas Invertidas. Multilistas).
  • Resolución de problemas asociados a estos temas.
  • Las semanas 6 a la 10 están dedicadas a la Unidad de Aprendizaje 2.

Unidad de Aprendizaje 3

  • Abarca la técnica de divide y vencerás.
  • Al finalizar la unidad, se espera que el estudiante aplique métodos de "divide y vencerás" para ordenación y búsqueda.
  • Se revisan temas como:
  • Conceptos sobre la técnica divide y vencerás. Ordenación Shell y Rápida (Quick sort): Codificación y análisis del algoritmo.
  • Búsqueda binaria (codificación y análisis), comparación con búsqueda lineal.
  • Conceptos de recursividad, métodos recursivos, pila de llamadas, recursividad indirecta y comparación con iteración.
  • Backtracking, algoritmos de vuelta atrás y selección óptima.
  • Resolución de problemas.
  • Las semanas 11 a la 15 están dedicadas a la Unidad de Aprendizaje 3.

Unidad de Aprendizaje 4

  • Cubre la exploración de Grafos y Algoritmos Voraces.
  • Al finalizar la unidad, el estudiante debe aplicar métodos de grafos dirigidos y no dirigidos para la solución de problemas.
  • Se analizan grafos dirigidos, algoritmos fundamentales, representación de grafos, recorrido en anchura y profundidad.
  • Se revisan la matriz de caminos, el algoritmo de Warshall y el algoritmo de Dijkstra para caminos más cortos con un solo origen.
  • Para grafos no dirigidos, se ven algoritmos fundamentales y el árbol de expansión de corte mínimo (algoritmos de Prim y Kruskal).
  • Las semanas 16 a la 18 están dedicadas a la Unidad de Aprendizaje 4.

Metodología de Enseñanza

  • Se expone la construcción del conocimiento a través de ejemplos y casos prácticos.
  • Se promueve la participación activa de los estudiantes mediante ejercicios, lecturas y preguntas.
  • Se fomenta el aprendizaje individual y colaborativo para un trabajo metacognitivo.
  • Se requiere la asistencia a clases tras leer los temas correspondientes a cada sesión.
  • Se utilizan recursos como pizarra, multimedia, videos y comunicaciones electrónicas.

Sistema de Evaluación

  • El cálculo del promedio final se basa en prácticas calificadas (PC), participación en clase (PA) y examen final (EXFN).
  • La ponderación es: (20%)PC1 + (20%)PC2 + (20%)PC3 + (10%)PA + (30%)EXFN.
  • La nota mínima aprobatoria final es 12.

Prácticas Calificadas

  • La práctica calificada 1 (PC1) se realiza en la semana 5 y es individual.
  • PC2 se realiza en la semana 10 (individual).
  • PC3 se realiza en la semana 15 (individual).
  • La participación en clase (PA) se evalúa en la semana 17, promediando las participaciones individuales.
  • El examen final (EXFN) es individual y se realiza en la semana 18.

Indicaciones Adicionales sobre la Evaluación

  • Si no se rinde el examen final, se puede rendir un examen de rezagado.
  • La nota obtenida en el examen de rezagado reemplaza al examen final no rendido.
  • Se debe rendir el examen de rezagado presentando una solicitud y pagando los derechos correspondientes según el tarifario de la Universidad.
  • Los exámenes de rezagados se aplican al final del período lectivo y abarcan todos los temas vistos.
  • Si no se rinde una práctica calificada (PC), se reemplaza por la nota del examen final.
  • Si tampoco se rinde el examen final, se reemplaza por el examen rezagado automáticamente.
  • Si hay más de una práctica calificada no rendida, solo se reemplaza la de mayor peso.

Preguntas de Prueba de Entrada

  • ¿Cuál es la diferencia entre eficiencia y complejidad de un algoritmo, y por qué es importante la notación Big O?
  • ¿Cómo funciona el algoritmo de ordenación por intercambio (Bubble Sort), y cuál es su complejidad?
  • ¿Cómo funciona el algoritmo de mezcla directa en la ordenación externa, y en qué situaciones se utiliza?
  • ¿Qué es el método polifásico de ordenación externa y en qué se diferencia de la mezcla equilibrada múltiple?
  • Para una empresa de comercio electrónico, ¿qué algoritmo recomendarías para optimizar la búsqueda de productos, considerando que actualmente usan una búsqueda lineal lenta?
  • ¿Qué algoritmo de ordenación recomendarías a una startup de análisis financiero que inicialmente implementó Bubble Sort, pero que no escala bien con grandes volúmenes de datos?
  • ¿Cómo aplicarías el algoritmo de Dijkstra para implementar un sistema de navegación en tiempo real para el transporte público, considerando el tráfico en constante cambio?

Introducción a la Complejidad Algorítmica

  • La eficiencia de los algoritmos es clave en el desarrollo de software debido al crecimiento exponencial de los datos.
  • Las aplicaciones de inteligencia artificial y procesamiento de bases de datos dependen de algoritmos optimizados.
  • La complejidad algorítmica permite analizar y comparar el rendimiento de diferentes soluciones.
  • La notación Big O permite predecir el comportamiento de un algoritmo a medida que aumentan los datos.
  • Se explorarán los conceptos de eficiencia algorítmica, cómo medir el rendimiento de los algoritmos y cómo elegir la mejor solución según la complejidad computacional.
  • Al finalizar la sesión, se espera que el estudiante conozca la complejidad de los algoritmos, diferenciando su complejidad temporal y espacial aplicable en proyectos con Java.
  • Es importante analizar la eficiencia de un algoritmo.

Algoritmos

  • Un algoritmo es un conjunto finito de pasos definidos y organizados lógicamente para resolver un problema o tarea.
  • Los algoritmos pueden expresarse en lenguaje natural, diagramas de flujo, pseudocódigo o lenguajes de programación.
  • Un ejemplo de algoritmo es el proceso para preparar café, que incluye calentar agua, añadir café, revolver y servir.

Características de los Algoritmos

  • Los algoritmos deben cumplir con las siguientes características:
  • Definido: Cada paso debe estar claramente especificado, sin ambigüedades.
  • Preciso: No debe haber confusión en la ejecución de los pasos.
  • Finito: Debe terminar en algún momento; no puede ejecutarse indefinidamente.
  • Ordenado: Las instrucciones deben seguir una secuencia lógica.
  • Determinista: Para la misma entrada, siempre debe dar el mismo resultado.
  • Eficiente: Debe usar la menor cantidad de recursos posible (tiempo y memoria).
  • General: Puede aplicarse a distintos conjuntos de datos de entrada.

Complejidad Algorítmica

  • La eficiencia de un algoritmo es clave en el desarrollo de software.
  • La eficiencia determina qué tan rápido y qué tantos recursos consume una solución al procesar datos.
  • El análisis del rendimiento permite seleccionar la mejor alternativa para resolver problemas computacionales.
  • Un algoritmo eficiente resuelve un problema en el menor tiempo posible y con el menor uso de recursos computacionales.
  • La eficiencia se mide en términos de tiempo de ejecución y uso de memoria.
  • Ordenar una lista de 1,000,000 de números con un algoritmo lento como Burbuja (O(n²)) puede tardar minutos.
  • Usar Quicksort (O(n log n)) lo hace en segundos.

Importancia del Análisis de Rendimiento

  • El rendimiento de un algoritmo impacta la escalabilidad, la optimización de hardware y la experiencia del usuario.
  • Un algoritmo ineficiente puede funcionar bien con pocos datos, pero volverse inusable con grandes volúmenes.
  • Algoritmos eficientes requieren menos CPU y memoria.
  • La velocidad de respuesta es crucial para la satisfacción del usuario.
  • Un motor de búsqueda como Google no puede usar un algoritmo ineficiente para ordenar resultados porque millones de personas lo consultan simultáneamente.

Factores que Afectan la Eficiencia

  • El tiempo de ejecución mide cuánto tarda un algoritmo en ejecutarse según la cantidad de datos de entrada (n).
  • La notación Big-O (O) clasifica algoritmos según su crecimiento en función de n.
  • Algunos ejemplos son: Acceder a un elemento en un array (constante), búsqueda binaria (logarítmico), recorrer un array (lineal), merge sort (cuasilineal), burbuja-selección (cuadrático), recursión sin optimizar (exponencial).
  • Ejemplo: Buscar un número en una lista ordenada de 1 millón de elementos con búsqueda lineal recorre hasta 1 millón de pasos, mientras que la búsqueda binaria lo encuentra en aproximadamente 20 pasos.
  • El uso de memoria mide cuánta memoria extra usa un algoritmo al ejecutarse.
  • Depende de si el algoritmo modifica los datos originales, utiliza estructuras adicionales o usa recursión (que consume más memoria por el uso de la pila de llamadas).
  • Quicksort es más eficiente en memoria que Merge Sort porque evita crear estructuras auxiliares.
  • Fibonacci recursivo sin memorización usa mucha memoria por múltiples llamadas innecesarias.

Análisis de Rendimiento (Medición Empírica vs Teórica)

  • El rendimiento de un algoritmo determina qué tan eficiente es en términos de tiempo de ejecución y uso de recursos.
  • Existen dos enfoques principales para analizarlo:
    • Medición empírica: Ejecutar el algoritmo en una computadora y medir su tiempo de ejecución.
    • Se ve afectado por factores externos como el hardware y la optimización del compilador.
    • Se realiza mediante pruebas experimentales con diferentes volúmenes de datos.
    • Ventaja: El rendimiento real en una máquina específica.
    • Desventaja: no es generalizable, ya que depende del entorno de ejecución.
    • Análisis teórico: Evalúa la eficiencia del algoritmo considerando el conteo de operaciones y su complejidad asintótica.
    • Se representa con la notación Big O (O), que indica el crecimiento del tiempo de ejecución en función del tamaño de entrada (n).
    • Esto no depende del hardware ni del lenguaje de programación.
    • Ventaja: Esto permite comparar algoritmos independientemente del entorno de ejecución.
    • Desventaja: No siempre refleja con precisión el tiempo de ejecución real.
  • El tiempo de ejecución mide el tiempo real que tarda en ejecutarse un algoritmo.
  • El conteo de operaciones calcula la cantidad de pasos o comparaciones realizadas sin ejecutarlo.
  • Por ejemplo, una búsqueda lineal podría tardar 1 segundo en el peor caso, pero una búsqueda binaria haría la búsqueda en aproximadamente 20 pasos.

Eficiencia y Complejidad de Algoritmos

  • Eficiencia Temporal: El tiempo de ejecución del algoritmo.
  • Se mide en función del número de operaciones realizadas.
  • Se representa con la notación Big O (ej. O(n), O(n²), O(log n)).
  • Un algoritmo más rápido suele ser preferible, pero depende del contexto de uso.
  • Eficiencia Espacial: La cantidad de memoria que usa el algoritmo.
  • Considera el uso de variables, estructuras de datos y recursividad.
  • También se expresa en Big O (ej. O(1) → usa memoria constante, O(n) → usa memoria proporcional al tamaño de entrada).
  • A veces se sacrifica espacio por velocidad (ej. programación dinámica).

Notación Big O

  • La Notación Big O describe cómo crece el tiempo de ejecución de un algoritmo a medida que aumenta el tamaño de la entrada (n).
  • Mide el peor caso de un algoritmo, es decir, el tiempo máximo que podría tomar en ejecutarse.
  • Ingora constantes y términos menores, centrándose solo en el comportamiento a gran escala.
  • Ayuda a comparar algoritmos sin necesidad de ejecutarlos.
  • Por ejemplo,
  • Si un algoritmo tiene O(n²), significa que su tiempo de ejecución crece cuadráticamente con respecto al tamaño de la entrada (n).
  • Si otro tiene O(log n), crecerá mucho más lentamente a medida que n aumente.

Ejemplos de Análisis de Complejidad

  • Bucle Simple
    • Recorre n veces
    • Complejidad: O(n)(lineal).
  • Bucle Anidado
    • Tiene dos bucles anidados
    • Cada uno recorriendo n veces.
    • Iteraciones totales: n * n = n².
    • Complejidad: O(n²)(cuadrática).

Actividad en Clase sobre Complejidad y Eficiencia

  • Evaluar la comprensión de la notación Big O y la eficiencia de algoritmos mediante un análisis breve y práctico.
  • Se presentan fragmentos de código en Java. Cada estudiante debe identificar su complejidad en notación Big O y justificar su respuesta.
  • Comparación de Algoritmos:
    • Si se cuenta con dos algoritmos que difieren en complejidad. Uno es con O(n²) y otro con O(n log n). ¿Cuál elegirías para procesar una lista de 1,000,000 elementos?
  • Desafío Final:
  • ¿Por qué crees que en la vida real no siempre se usan los algoritmos más eficientes? Menciona un ejemplo donde la eficiencia no sea la única prioridad.

Práctica en Java: Análisis de Dígitos y Números Primos

  • Desarrollar un programa en Java que cuente la cantidad de dígitos de un número entero positivo ingresado mediante dos métodos:
  • Un método iterativo que divida el número entre 10 sucesivamente hasta que se reduzca a 0.
  • Un método basado en logaritmos que determine la cantidad de dígitos usando Math.log10().
  • El programa debe medir el tiempo de ejecución de cada método utilizando System.nanoTime() y comparar los resultados.
  • Mostrar el número de dígitos y el tiempo tomado por cada método.
  • Desarrollar un programa que determine si un número es primo, implementando dos versiones del algoritmo:
  • Comprueba la divisibilidad del número desde 2 hasta N-1.
  • Comprueba la divisibilidad solo hasta la raíz cuadrada del número.
  • Medir y comparar el tiempo de ejecución de ambos métodos.
  • Actividad N° 01.

Actividad Adicional en Java: MCD y Recorrido de Matriz

  • Se debe implementar un programa en Java que calcule el Máximo Común Divisor (MCD) de dos números ingresados por el usuario utilizando dos enfoques distintos:
  • Método de restas sucesivas (algoritmo de Euclides básico).
  • Método de divisiones sucesivas (algoritmo de Euclides optimizado).
  • El programa debe medir el tiempo de ejecución de cada método, compararlos y explicar la complejidad en notación Big O.
  • Se debe Escribir un programa que crea y llena una matriz de 1000x1000 con números aleatorios.
  • Implementar dos métodos para recorrerla fila por fila y columna por columna.
  • Comparar los tiempos de ejecución y analizar cuál es más eficiente.

Studying That Suits You

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

Quiz Team

Related Documents

More Like This

Brute Force Algorithm Quiz
3 questions

Brute Force Algorithm Quiz

ProfoundMahoganyObsidian avatar
ProfoundMahoganyObsidian
Design and Analysis of Algorithms Quiz
5 questions
Algorithms and Sorting Techniques Quiz
6 questions
Algorithms and Algorithm Design
10 questions
Use Quizgecko on...
Browser
Browser