0% encontró este documento útil (0 votos)
14 vistas8 páginas

Ejercicios de Programación Voraz

Este documento presenta 6 problemas de algoritmos resueltos con programación voraz. Cada problema incluye un enlace a la descripción en un juez en línea, una explicación de la solución mediante programación dinámica y un análisis de la complejidad algorítmica. El documento también incluye instrucciones para la presentación del reporte.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas8 páginas

Ejercicios de Programación Voraz

Este documento presenta 6 problemas de algoritmos resueltos con programación voraz. Cada problema incluye un enlace a la descripción en un juez en línea, una explicación de la solución mediante programación dinámica y un análisis de la complejidad algorítmica. El documento también incluye instrucciones para la presentación del reporte.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Análisis de algoritmos

Ejercicios: Diseño de soluciones con Programación


Voraz
M. en C. Edgardo Adrián Franco Martínez 1
[Link]
edfrancom@[Link]
@edfrancom edgardoadrianfrancom
Diseño de soluciones con Programación Voraz
1. 10020 - Minimal coverage

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Diseño de soluciones con Programación Voraz
[Link]
57&page=show_problem&problem=961

2
2. 10382 - Watering Grass
[Link]

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Diseño de soluciones con Programación Voraz
ory=657&page=show_problem&problem=1323

3
3. 12405 - Scarecrow
[Link]

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Diseño de soluciones con Programación Voraz
ry=657&page=show_problem&problem=3836

4
4. Bear and Row 01
[Link]

Análisis de algoritmos
5

Diseño de soluciones con Programación Voraz


Prof. Edgardo Adrián Franco Martínez
5. 11631 - Dark roads
[Link]

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Diseño de soluciones con Programación Voraz
y=673&page=show_problem&problem=2678

6
6. Bear and Clique Distances
[Link]

Análisis de algoritmos
7

Diseño de soluciones con Programación Voraz


Prof. Edgardo Adrián Franco Martínez
Observaciones
• Se deberá incluir la captura de pantalla del problema

Análisis de algoritmos

Prof. Edgardo Adrián Franco Martínez


Diseño de soluciones con Programación Voraz
aceptado en el juez online con fecha y hora.
• Incluir la redacción de cada ejercicio.
• Explicar cada solución de Programación Dinámica y su análisis
del orden de complejidad (Por inducción si el análisis no es posible de
realizar por medio del teorema maestro).
• Incluir el algoritmo y código de la solución.
• Para que los ejercicios cuenten al 100% deberán de
contestarse al menos 3 correctamente.
• Portada con fotografía y encabezados de pagina.

Common questions

Con tecnología de IA

La programación voraz es más adecuada para problemas como 'Minimal Coverage' y 'Dark roads', donde las decisiones locales óptimas llevan a la solución global óptima, resultando en algoritmos eficientes con complejidad reducida. En contraste, la programación dinámica es más aplicable a problemas donde una solución óptima depende de soluciones óptimas de subproblemas más pequeños, requiriendo almacenamiento de resultados intermedios, como en problemas de optimización más complejos. Mientras la programación voraz es generalmente más rápida, la dinámica ofrece flexibilidad y poder en problemas donde patrones repetitivos benefician del almacenamiento.

La complejidad temporal del algoritmo para 'Watering Grass' es O(n log n). Esto se debe a que el algoritmo utiliza un enfoque de programación voraz que requiere ordenar los aspersores por el punto en el que comienzan a cubrir el área, lo cual tiene una complejidad de O(n log n). Después, se itera linealmente sobre los aspersores para determinar cuál añadir a la solución, resultando en un tiempo lineal adicional.

En el problema 'Scarecrow', se utiliza una estrategia de programación voraz, donde se colocan espantapájaros de tal manera que cada uno cubre exactamente tres parcelas consecutivas en un campo. Este enfoque maximiza el número de parcelas cubiertas por cada espantapájaros, minimizando así el número total necesario. La eficiencia de la solución radica en su enfoque directo que minimiza iterativamente la longitud del campo no cubierto, permitiendo una implementación en tiempo lineal O(n)

La estrategia de programación voraz en 'Minimal Coverage' se aplica seleccionando iterativamente los segmentos que cubren la mayor parte del intervalo restante que aún no ha sido cubierto. El objetivo es minimizar el número de segmentos al elegir siempre el que proporciona la mayor cobertura adicional al intervalo. Esto se logra ordenando primero los segmentos por su inicio y luego seleccionando aquellos que comienzan antes del final del intervalo cubierto hasta que el intervalo completo esté cubierto.

En 'Bear and Row 01', el ordenamiento inicial es crucial para asegurar que la operación de eliminación de ceros se realiza lo más temprano posible y de manera eficiente. Al ordenar adecuadamente las filas en base a la cantidad de unos y ceros, se puede identificar rápidamente las filas que contribuyen menos a la deformación del objetivo final. Esto reduce la complejidad operativa al minimizar el número de cambios necesarios, conduciendo a una resolución eficiente en términos de tiempo computacional.

Los desafíos en la implementación de un algoritmo voraz para problemas de cobertura como 'Watering Grass' incluyen manejar adecuadamente la ordenación de los segmentos para optimizar la cobertura adicional y específicamente lidiar con casos límites donde los aspersores no cubren adecuadamente el área total. Es crucial diseñar un sistema eficiente de comparación y eliminación de opciones subóptimas mientras se recorre el conjunto de aspersores. Asegurar que se han considerado todas las posibles configuraciones óptimas sin exceso de computación requiere de análisis profundo y pruebas rigurosas.

En el problema 'Scarecrow', la solución voraz garantiza la optimalidad al colocar cada espantapájaros para cubrir exactamente tres parcelas consecutivas, de tal forma que cada movimiento reduce al máximo la cantidad de parcelas no protegidas restantes. Este enfoque asegura que ningún espantapájaros realice una cobertura redundante, minimizando así su número total. La minimalidad del resultado se verifica porque cualquier reducción adicional en espantapájaros resultaría en parcelas desprotegidas, lo que confirma que la solución es óptima.

El problema 'Dark roads' utiliza el algoritmo de Kruskal, un enfoque de programación voraz, para encontrar el árbol de expansión mínima (MST) y reducir los costos de mantenimiento de las carreteras. Al ordenar primero las aristas por peso y luego seleccionarlas en un orden ascendente, el algoritmo asegura que siempre se elige la opción más económica que no forma ciclos. De este modo, se minimizan los costos totales de conexión entre ciudades. Esto es eficiente, con una complejidad O(m log m), donde m es el número de aristas.

Incluir una demostración del orden de complejidad es fundamental para entender y validar la eficiencia de un algoritmo. En programación dinámica, esto implica utilizar técnicas como la recurrencia y, si es posible, el teorema maestro, o la inducción matemática para demostrar cómo el tiempo de ejecución del algoritmo crece con respecto a la entrada. Esto permite determinar el límite superior e inferior de la complejidad, conduciendo a optimizaciones potenciales. Tal análisis proporciona un entendimiento profundo de las posibilidades y limitaciones en la mejora del rendimiento del algoritmo.

La solución de 'Bear and Clique Distances' utiliza una combinación de programación voraz y técnicas algorítmicas de optimización como el uso eficiente de estructuras de datos para modelar el grafo, permitiendo calcular las distancias mínimas entre nodos de manera expedita. La introducción de cliques, o subgrupos de nodos completamente conectados, reduce la complejidad del problema a través de la reducción de caminos a considerar, optimizando así el cálculo en tiempo real de las distancias requeridas.

También podría gustarte