Vous êtes sur la page 1sur 20

ESTRUCTURAS DE DATOS

y ALGORITMOS
Licenciatura en Ciencias de la Computacin

TCNICAS DE DISEO DE
ALGORITMOS
Estructuras de datos y
Algoritmos
Tcnicas de diseo de
algoritmos
Algoritmos vidos o Voraces-
Greedy
Programacin Dinmica
Vuelta Atrs - Backtracking
Ramificacin y Poda - Branch and
Bound
Estructuras de datos y
Algoritmos

Algoritmos vidos

Mtodo aplicado especialmente a


problemas de optimizacin.

Los algoritmos vidos construyen la


solucin a un problema, en etapas
sucesivas, tratando siempre de
tomar la decisin ptima para cada
etapa.
Estructuras de datos y
Algoritmos

Algoritmos vidos
Esquema General

AlgoritmoAvido(entrada:CONJUNTO):CONJUNTO

encontrada:=FALSE
crear(solucion)
Mientras NO EsVacio(entrada) y (NO encontrada) hacer
x:=SeleccionarCandidato(entrada);
Si EsPrometedor(x,solucion)
entonces
Incluir(x,solucion);
Si EsSolucion(solucion)
entonces
encontrada:=TRUE
Finsi
Finsi
Finmientras
Retornar solucion
Fin AlgoritmoAvido
Estructuras de datos y
Algoritmos

Algoritmos vidos
Aplicaciones

Algoritmos de Prim y de Kruskal:


Encuentran un rbol de expansin
o de recubrimiento mnimo en un
grafo ponderado (cableado de una
casa)
Algoritmo de Dijkstra: Encuentra el
camino mnimo entre pares de
nodos
Estructuras de datos y
Algoritmos

Algoritmos vidos
Algoritmo de Dijkstra

Dijkstra(T: Tabla);

Para i desde 1 hasta |V| hacer


v vertice con la distancia mas corta y desconocido
T[v].conocido True
Para cada w adyacente a v hacer
Si T[w].conocido = False
entonces
Si T[v].distancia + w(v,w) < T[w].distancia

entonces
Reducir ( T[w].distancia a T[v].distancia +
w(v,w))
T[w].camino v
FinSi
FinSi
FinPara
Estructuras de datos y
Algoritmos

Programacin Dinmica
Divide y Vencers: Resuelve problemas a
partir de su divisin en problemas
independientes, que se resuelven de
manera recursiva

La recursin es una alternativa poco eficiente si los


subproblemas no son independientes, pues se repite la
realizacin de clculos

Programacin Dinmica
Estructuras de datos y
Algoritmos

Programacin Dinmica

Resuelve subproblemas una sola vez,


guardando sus soluciones en una
tabla para su futura utilizacin.
Estructuras de datos y
Algoritmos

Programacin Dinmica
Aplicaciones

Algoritmo de Warshall: encuentra la


matriz de caminos de un grafo G, a
partir de su matriz de adyacencia
Algoritmo de Floyd: encuentra la
matriz de caminos mnimos de un
grafo G, a partir de su matriz de
peso
Estructuras de datos y
Algoritmos

Vuelta Atrs- Backtracking


En un mtodo de amplia difusin que se
aplica especialmente a problemas de
optimizacin.
Se asemeja a un recorrido en profundidad
dentro de un grafo dirigido
El objetivo, que consiste en encontrar
soluciones para algn problema, se
consigue construyendo soluciones
parciales.
Estructuras de datos y
Algoritmos

Vuelta Atrs- Backtracking


Las soluciones parciales limitan las
regiones en las cuales encontrar
una solucin completa.
El recorrido tiene xito si,
procediendo de esta forma, se
puede definir por completo una
solucin.
Estructuras de datos y
Algoritmos

Vuelta Atrs- Backtracking


El recorrido no tiene xito si alguna
etapa de la solucin parcial no se
puede completar.
En situacin de no xito, el recorrido
vuelve atrs. Si vuelve a un nodo
que tiene uno o mas vecinos sin
explorar, prosigue el recorrido de una
solucin.
Estructuras de datos y
Algoritmos

Vuelta Atrs- Backtracking


Aplicacin (1)

Coloreado de mapas:
Dado un mapa, pueden
colorearse sus regiones o pases de
forma tal que no haya regiones o
pases adyacentes de igual color?
Estructuras de datos y
Algoritmos

Vuelta Atrs- Backtracking


Aplicacin (2)

Reconocimiento de grafos:
Dadas dos matrices de adyacencia,
el problema consiste en
determinar si ambas representan
al mismo grafo, salvo nombres de
los vrtices.
Estructuras de datos y
Algoritmos
Ramificacin y Poda-
Branch and Bound

Es una variante del mtodo Vuelta


Atrs, y se aplica generalmente a
problemas de optimizacin.
Al igual que Vuelta Atrs, realiza
una enumeracin parcial del
espacio de soluciones basndose
en la generacin de un rbol de
expansin.
Estructuras de datos y
Algoritmos
Ramificacin y Poda-
Branch and Bound
En este caso, a diferencia con
Vuelta Atrs, la generacin de
nodos del rbol de expansin se
realiza segn distintas estrategias:
Recorrido en anchura: estrategia FIFO
Recorrido en profundidad: estrategia LIFO
Utilizar una funcin de coste para seleccionar
el nodo que en principio parece mas
prometedor: estrategia de Mnimo Coste
Estructuras de datos y
Algoritmos
Ramificacin y Poda-
Branch and Bound

Se realiza una estrategia de


Poda, en la que en cada nodo
se calcula una cota del posible
valor de aquellas soluciones
que pudiesen encontrarse mas
adelante en el rbol.
Estructuras de datos y
Algoritmos

Ramificacin y Poda-
Aplicacin (1)

El Viajante de Comercio:
A partir de conocer las distancias
entre cierto nmero de ciudades, un
viajante debe partir de una de ellas,
visitar cada ciudad exactamente
una vez, y regresar al punto de
partida, habiendo recorrido en total
la menor distancia posible.
Estructuras de datos y
Algoritmos

Ramificacin y Poda-
Aplicacin (2)

El Laberinto:
Dado un laberinto, representado
por medio de una matriz, el
problema consiste en disear un
algoritmo que encuentre un
camino, si existe, para ir de la
entrada a la salida.
Estructuras de datos y
Algoritmos

Ramificacin y Poda-
Aplicacin (3)

El fontanero (plomero) con penalizaciones:


A partir de N trabajos pendientes, cada
uno de ellos con una duracin (los das
que tarda en realizarse), un plazo lmite, y
una penalizacin en caso de que no se
ejecute dentro del plazo lmite establecido
para l. Se pide determinar la fecha de
comienzo de cada uno de los trabajos para
que la penalizacin total sea mnima.

Vous aimerez peut-être aussi