0% encontró este documento útil (0 votos)
42 vistas9 páginas

Tarea de Programcion

Este documento explora diversas técnicas de diseño de algoritmos como dividir y vencerás, algoritmos voraces, algoritmos paralelos, algoritmos determinísticos, metaheurísticas, ramificación y acotación y programación dinámica. Cada técnica se describe brevemente con un ejemplo.

Cargado por

jesus.solanoc
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
42 vistas9 páginas

Tarea de Programcion

Este documento explora diversas técnicas de diseño de algoritmos como dividir y vencerás, algoritmos voraces, algoritmos paralelos, algoritmos determinísticos, metaheurísticas, ramificación y acotación y programación dinámica. Cada técnica se describe brevemente con un ejemplo.

Cargado por

jesus.solanoc
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

técnicas de diseño de algoritmos

Jesús Daniel Solano Castañeda


José Ángel Bravo Borjas
José German Barreto Mendoza

Corporación Universitaria del Caribe – CECAR


facultad de ciencias básicas, ingenierías y arquitectura
Ingeniería de sistemas
Sincelejo – Sucre
07/08/2023
En esta tarea, exploraremos diversas técnicas de diseño de algoritmos que son
ampliamente utilizadas para resolver problemas computacionales
1. Divide y vencerás
2. Voraces (Algoritmos ávidos)
3. Paralelos
4. Determinísticos
5. Metaheurísticas
6. Ramificación y acotación
7. Programación Dinámica
8. Vuelta atras (Backtracking)
1.Dividi y venceras:
La estrategia "Divide y Vencerás" es un enfoque de resolución de problemas en tres pasos
Dividir: Se descompone el problema en subproblemas similares y más manejables.
Vencer: Los subproblemas se resuelven de forma rápida, aprovechando su menor
complejidad.
Combinar: Se combinan las soluciones de los subproblemas para obtener la solución del
problema original.

Este enfoque permite resolver problemas complejos al abordar partes más simples y luego
unir las soluciones para resolver el problema general.

Ejemplo de divide y vencerás:


Queremos dividir una imagen para formar un puzle. Sin embargo, este puzle no será uno
cualquiera. Vamos a hacer que cada uno sea único, de forma que las piezas sean totalmente
diferentes.
La imagen es cuadrada y sus dimensiones son múltiplos de 4. Lo que queremos es dividirla
en piezas con forma de L. Estas L tienen un tamaño de 2×2, dejando, obviamente, un área
de 1×1 sin cubrir. Para hacer estos puzles únicos, lo que vamos a hacer es insertar una pieza
de 1×1 en una posición cualquiera de la matriz, y calcular la disposición de nuestras L a
partir de ella.

Ventajas:
simple, robusto y elegante
buena legibilidad
fácil depuración y mantenimiento del código
Desventajas:
mayor coste espacial por el uso intensivo de la pila del sistema
en ocasiones no se reduce, sino que incluso aumenta la complejidad temporal con respecto
a soluciones iterativas
2.Algoritmos voraces:
los algoritmos voraces los utilizamos para resolver problemas de optimización sean
máximos o mínimos, toman toda la información que esté disponible en el momento ya
cuando tomen la decisión no siempre se va a garantizar que alcancen una solución óptima.
Ejemplos de algoritmos voraces:
Algoritmo de Kruskal
Algoritmo de Prim
Algoritmo de Dijkstra
Algoritmo de triangulación voraz
Algoritmo para la ubicación óptima
Ventajas:
ventaja de los algoritmos voraces es que resuelven los problemas de optimización de forma
rápida y sencilla
Desventajas:
la desventaja podría ser que ya una vez tomada la decisión y resuelto el problema ya no
vuelve a replantearse en el futuro
3.Paralelos:
los paralelos son utilizados para acelerar de problemas de alto coste de la computación,
principalmente consiste en reducir el tiempo de ejecución, ya que depende del tamaño de la
entrada, de la máquina del programador.

Ejemplos de técnicas paralelas:


Cada procesador tiene dos valores, a y b
En cada Pi
, i = 0, 1, . . . , n/2 − 1
desplazamiento = 1
activo = true
para k = 1, 2, . . . , log n − 1
si activo
a=a+b
desplazamiento = desplazamiento ∗ 2
si i mod desplazamiento 6= 0
activo = false
enviar a a i − desplazamiento/2
en otro caso
recibir en b de i + desplazamiento/2
finsi
finsi
finpara
si i = 0
a=a+b
finsi
Ventajas:
las ventajas de la programación paralela, cabe resaltar que, al hacer uso de múltiples
procesadores, es capaz de resolver inconvenientes que no podrían ser manejados por una
sola CPU.
Desventajas:
a pesar de los beneficios de la aplicación de esta metodología, su uso también puede llegar
a implicar algunas desventajas, como, por ejemplo, que para aprovechar sus funciones se
necesita una amplia cantidad de ciclos de procesamiento, así como el acceso a numerosos
datos
4.Algoritmo determinísticos:
un algoritmo determinístico siempre produce el mismo resultado cuando se le da un
conjunto específico de datos de entrada. Esto asegura que otros investigadores puedan
reproducir y verificar los resultados de manera consistente.
ejemplo de algoritmo determinísticos:
Un ejemplo de algoritmo determinístico es el algoritmo de ordenamiento "Bubble Sort".
Este algoritmo se utiliza para ordenar una lista de elementos en orden ascendente o
descendente.
Este algoritmo siempre producirá el mismo resultado para una lista de elementos dada, ya
que sigue un procedimiento determinístico. Esto significa que, si ejecutas el algoritmo
varias veces con la misma lista de elementos, siempre obtendrás la misma lista ordenada
como resultado.
Ventajas de los algoritmos determinísticos:
- Reproducibilidad
- Facilidad de análisis
- Eficiencia en recursos
- Mayor control
Desventajas de los algoritmos determinísticos:
- Limitaciones en problemas no determinísticos
- Vulnerabilidad a los datos de entrada
- Falta de exploración de soluciones subóptimas
- Complejidad en problemas NP-completos
5. algoritmo metaheuristicos
Un algoritmo metaheurístico es una técnica de optimización que se utiliza para resolver
problemas complejos en los que no se dispone de una solución óptima conocida. Estos
algoritmos se basan en principios heurísticos y buscan encontrar soluciones aproximadas
que se acerquen lo más posible a la solución óptima.
ejemplo de algoritmo metaheurístico:
es el algoritmo de colonia de hormigas, inspirado en el comportamiento de las hormigas
reales. Este algoritmo se utiliza para resolver problemas de optimización combinatoria,
como el problema del viajante de comercio.
En el algoritmo de colonia de hormigas, las hormigas se mueven por un grafo
representando las ciudades a visitar. Cada hormiga elige su siguiente ciudad
Como menciona Dorigo (1992), el algoritmo de colonia de hormigas ha sido ampliamente
utilizado en la resolución de problemas de optimización combinatoria, demostrando su
eficacia y versatilidad en diferentes aplicaciones.
Las ventajas clave de los algoritmos metaheurísticos incluyen:
1. Flexibilidad: Los algoritmos metaheurísticos pueden adaptarse fácilmente a diferentes
problemas y restricciones, lo que los hace ampliamente aplicables en diversos dominios.
2. Eficiencia: Estos algoritmos suelen ser eficientes en términos de tiempo computacional,
especialmente cuando se trata de problemas complejos donde los enfoques determinísticos
son ineficientes o impracticables.
3. Exploración global: Los algoritmos metaheurísticos están diseñados para explorar
ampliamente el espacio de soluciones, lo que aumenta las posibilidades de encontrar
soluciones óptimas o casi óptimas.
Desventajas de los algoritmos metaheurísticos:
Es importante también considerar las desventajas inherentes a los algoritmos
metaheurísticos:
1. Falta de garantía de optimalidad: A diferencia de los algoritmos determinísticos, los
metaheurísticos no pueden garantizar la obtención de la solución óptima global en todos los
casos. En cambio, se enfocan en encontrar soluciones cercanas al óptimo global.
2. Configuración de parámetros: Los algoritmos metaheurísticos a menudo requieren
ajustes de parámetros, y encontrar la configuración óptima puede ser un desafío en sí
mismo. El rendimiento puede variar según los valores elegidos, lo que implica la necesidad
de experimentación y ajuste fino.
3. Sensibilidad al problema: Algunos algoritmos metaheurísticos pueden funcionar mejor
en ciertos tipos de problemas y no tan bien en otros. La elección de la técnica adecuada
para un problema específico puede requerir conocimiento y experiencia.
6. La ramificación y acotación
es un concepto utilizado en diversas disciplinas, como la biología, la matemática y la
programación, entre otras. En términos generales, se refiere a la división o bifurcación de
un proceso o conjunto de datos en diferentes caminos o posibilidades. Esta técnica permite
explorar diferentes escenarios o soluciones, lo que resulta especialmente útil cuando se
enfrentan problemas complejos o se requiere tomar decisiones basadas en múltiples
variables.
ejemplo de ramificación y acotación:
se encuentra en la resolución de problemas de optimización. Supongamos que se desea
encontrar la ruta más corta para llegar de un punto A a un punto B en un mapa con
múltiples caminos posibles. Mediante la técnica de ramificación y acotación, se pueden
explorar diferentes rutas de manera simultánea, dividiendo el problema en subproblemas
más pequeños y descartando aquellos caminos que se alejen de la solución óptima. De esta
manera, se reduce la complejidad del problema y se encuentra la ruta más eficiente.
En palabras de Thomas H. Cormen, autor del libro "Introduction to Algorithms": "La
ramificación y acotación es una técnica algorítmica que permite resolver problemas de
manera eficiente, explorando diferentes caminos y descartando aquellos que no conducen a
la solución óptima. Esta técnica es especialmente útil en problemas de optimización, donde
se busca encontrar la mejor solución entre múltiples posibilidades"
7. Programación Dinámica
La programación dinámica surge como respuesta para evitar la duplicidad de cálculos
operaciones Cuando se resuelve un problema a través de subproblemas, es probable que
dichos subproblemas tengan operaciones comunes entre sí (no son independientes) La
programación dinámica consiste en identificar y guardar los resultados de los cálculos
comunes para su uso posterior
Ejemplo de programación dinámica:
Pasos mínimos para llegar a 1
Para cualquier número entero positivo “e” se puede realizar cualquiera de los tres pasos
siguientes.
– Restar 1 del número. (e=e-1).
– Si es divisible por 2, se divide entre 2 (si e%2==0, entonces e= e/2).
– Si es divisible por 3, se divide entre 3 (si e%3==0, entonces e= e/3).
Basado en los pasos anteriores, se debe encontrar la cantidad mínima de estos pasos para
llevar e a 1. Por ejemplo:
– Si e= 1, resultado: 0.
– Si e= 4, resultado: 2 (4/2= 2/2= 1).
– Cuando e= 7, resultado: 3 (7-1= 6/3= 2/2= 1).

Ventajas:
Una de las principales ventajas de usar programación dinámica es que acelera el
procesamiento, ya que se usan referencias que fueron previamente calculadas. Como es una
técnica de programación recursiva, reduce las líneas de código del programa.
Desventajas:
Se necesita mucha memoria para almacenar el resultado calculado de cada subproblema,
sin poder garantizar que el valor almacenado se utilizará o no.
Muchas veces, el valor de salida se queda almacenado sin nunca ser utilizado en los
siguientes subproblemas durante la ejecución. Esto conlleva a una utilización innecesaria de
la memoria.
En la programación dinámica las funciones se llaman recursivamente. Esto hace que la
memoria de pila se mantenga en constante aumento.
8.Vuelta Atrás (Backtracking)
Backtracking es una técnica utilizada para resolver problemas mediante una búsqueda
exhaustiva. Proporciona un enfoque sistemático para generar todas las posibles soluciones.
Comienza con una solución parcial de tamaño "k" y genera una nueva solución de tamaño
"k+1" a través de una expansión. Si la nueva solución es válida, se continúa expandiendo.
Si no lo es, se abandona y se retrocede a la solución de tamaño "k" para buscar otras
opciones de expansión. En esencia, el backtracking explora todas las opciones posibles para
encontrar soluciones a problemas complejos.
Ejemplos de técnica backtracking:
El problema de las ocho reinas es un pasatiempo que consiste en poner ocho reinas en el
tablero de ajedrez sin que se amenacen. Fue propuesto por el ajedrecista “alemán Max
Bezzel” en 1848. En el juego del ajedrez la reina amenaza a aquellas piezas que se
encuentren en su misma fila, columna o diagonal
Ventajas:

1. Si existen una o las soluciones el backtracking las calcula.


2. Es relativamente sencillo de implementar en los problemas a resolver.
3. Se adapta a características en específico del problema

Desventajas:

1.Si la solución es infinita, y si esta existe, no se encontrará nunca.


2.Consume mucha memoria para tener que almacenar los ciclos de búsqueda.
3.Se necesita un hardware especial en robótica para almacenar la información de los
resultados del Backtracking.

Bibliografías

https://www.cs.buap.mx/~iolmos/ada/TecnicasDisenoAlgoritmos.pdf
http://dis.um.es/~domingo/apuntes/AlgProPar/1819/analisis.pdf
https://uerick.wordpress.com/
Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to
Algorithms. MIT Press.

También podría gustarte