Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Materia:
Análisis y Diseño de Algoritmos Avanzado
Unidad U7:
Uso de la estrategia de árboles para la búsqueda
Participación en Foro.
Alumno:
Dirk Hans Krakaur Floranes
A0119461845
Facilitador:
Dr. Luciano Sustaita Roque.
23 de Febrero de 2021
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
Ramificación y poda, también conocido como BB, B&B o BnB, por sus siglas en ingles
(Branch and Bound) es un algoritmo diseñado para resolver problemas de optimización
discretos y combinatoriales, así como optimización matemática.
El algoritmo explora las ramas de este árbol, que representan subconjuntos del conjunto de
soluciones. Antes de enumerar las soluciones candidatas de una rama, la rama se
comprueba con límites estimados superiores e inferiores en la solución óptima y se descarta
si no puede producir una solución mejor que la mejor encontrada hasta ahora por el
algoritmo.
El algoritmo depende de una estimación eficiente de los límites mencionados en las ramas
del espacio de búsqueda. Si no hay límites disponibles, el algoritmo degenera en una
búsqueda exhaustiva.
El método fue propuesto por primera vez por Ailsa Land y Alison Doig mientras realizaban
investigaciones en la Escuela de Economía de Londres, patrocinadas por la British
Petroleum en 1960 para la programación discreta, y se ha convertido en la herramienta más
utilizada para resolver problemas de optimización np-complejos.
El nombre Ramificación y poda, surgió cuando se estaba aplicando por primera vez al
problema del agente viajero, mismo que se resolverá más adelante.
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
Se refiera a la asignación de trabajos en tal forma que se reducen al mínimo los costos de
asignación. Puede resolverse de manera eficiente aplicando la estrategia de ramificar y
podar. El problema se plantea de esta forma:
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
Así mismo, este problema se define gráficamente o en puntos planos, por lo que la
estrategia de ramificar y podar divide la solución en dos grupos: un grupo que incluye un arco
particular y otro grupo que excluye este arco.
Cada división incurre en una cota inferior y el árbol de búsqueda se atravesará con
dicha cota (Lee, Tseng, Chang, Tsai, 2014)
Considerar este problema fue muy útil, pues de acuerdo con la asignación, se tiene
que resolver a continuación
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
Código Fuente:
/*
* Este programa encuentra una ruta óptima para recorrer ciudades y volver a la inicial.
Por Hans Krakaur, para la clase de Análisis y diseño de algoritmos avanzado,
En la carrera de Ingeniería en Sistemas Computacionales de la Universidad Da Vinci
*/
package foro7algo;
import java.util.Scanner;
obtenerDatos(datos);
buscarRutaOptima(datos, ruta);
imprimirRutaOptima(ruta, datos.numCiudades);
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
r[0][0] = inicio;
inicio--;
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
guardarCiudad(r ,indice_del_menor);
guardarValor(r, menor);
return indice_del_menor;
}
i= 0;
numCiudades_visitadas = 0;
while(r[i][0] != 0)
{
i++;
numCiudades_visitadas++;
}
r[numCiudades_visitadas][0] = indice_del_menor + 1;
}
i=0;
numCiudades_visitadas = 0;
while(r[i][1] != 0)
{
i++;
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
numCiudades_visitadas ++;
}
r[numCiudades_visitadas][1] = menor;
}
i = 0;
numCiudades_visitadas = 0;
while(r[i][1] != 0)
{
i++;
numCiudades_visitadas++;
}
if (penultimo == true)
{
for (i = numCiudades_visitadas; i >= 1; i--)
{
aux = r[i][0];
aux = aux - 1;
datos.G[indice_del_menor][aux] = 0;
}
}
else
{
for (i = numCiudades_visitadas; i >= 0; i--)
{
aux = r[i][0];
aux = aux - 1;
datos.G[indice_del_menor][aux] = 0;
}
}
}
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
return total;
}
}
class Datos{
int[][] G= new int[15][15];
int numCiudades;
}
/*
Nota: En esta ocasión preferí poner el código fuente en texto, ya que facilita su ejecución en un
compilador si en algún momento fuera necesario.
*/
www.udavinci.edu.mx
Análisis y Diseño de Algoritmos Avanzado
Unidad VII: Uso de la estrategia de árboles para la búsqueda
Participación en Foro
Pantalla de salida:
Referencias:
Lee, R., Tseng, S., Chang, R., & Tsai, Y. (2014). Introducción al diseño y análisis de
algoritmos – Un enfoque estratégico. Ed. Madrid: McGraw-Hill Interamericana.
www.udavinci.edu.mx