Unidad IIIa

Embed Size (px)

DESCRIPTION

unt - tcp

Citation preview

  • Paradigmas computacionalesDividir para conquistarAlgoritmos greedy3. Programacin dinmica

  • 2. Paradigma greedy

  • Este mtodo generalmente da origen a algoritmos ms simples y ms rpidos, pero no es tan poderoso o muy aplicable para la solucin de problemas, como lo es la Programacin Dinmica (PD).

    A pesar de que los algoritmos greedy no producen soluciones ptimas, ellos proporcionan heursticas rpidas (soluciones estratgicas no optimas) y son usados para hallar buenas aproximaciones.

    Este tipo de algoritmos empieza con la solucin de un subproblema pequeo, luego construye la solucin de todo el problema

  • Una aproximacin voraz consiste en que cada elemento a considerar se evala una nica vez, siendo descartado o seleccionado, de tal forma que si es seleccionado forma parte de la solucin, y si es descartado, no forma parte de la solucin ni volver a ser considerado para la misma. Una forma de ver los algoritmos voraces es considerar la estrategia de Vuelta atrs, en la cual se vuelve recursivamente a decisiones anteriormente tomadas para variar la eleccin entonces tomada, pero eliminando esa recursin y eligiendo la mejor opcin.

    El trmino voraz se deriva de la forma en que los datos de entrada se van tratando, realizando la eleccin de desechar o seleccionar un determinado elemento una sola vez.

  • Al contrario que con otros mtodos algortmicos, no siempre es posible dar una solucin a un problema empleando un algoritmo voraz. No todos los problemas son resolubles con algoritmos voraces.

    Los algoritmos voraces tienden a ser bastante eficientes y pueden implementarse de forma relativamente sencilla. Su eficiencia se deriva de la forma en que trata los datos, llegando a alcanzar muchas veces una complejidad de orden lineal. Sin embargo, la mayora de los intentos de crear un algoritmo voraz correcto fallan a menos que exista previamente una prueba precisa que demuestre la correctitud del algoritmo. Cuando una estrategia voraz falla al producir resultados ptimos en todas las entradas, en lugar de algoritmo suele denominarse heurstica. Las heursticas resultan tiles cuando la velocidad es ms importante que los resultados exactos (por ejemplo, cuando resultados "bastante buenos" son suficientes).

  • Ventaja:Cuando este tipo de algoritmos trabajan, lo hacen bien rpido.Desventaja:No siempre trabajan.Estudiaremos:

    1 Problema del cambio de moneda

    2 Problema de la Mochila

    3 Problema de hallar el rbol Expandido Mnimo

    4 Problema de la ruta corta.

  • Funcin Voraz (esquema):

    funcin Voraz (C:conjunto): conjuntoS := conjunto vaco; {la solucin se construye en S}mientras C conjunto vaco y no solucin(S) hacerx := seleccionar(C);C := C - {x};si factible (SU{x}) entonces S := SU{x}finmientrassi solucin (S) entonces devolver Ssino devolver "no hay solucionesfinsifin funcin

  • Problema del cambio de moneda

  • EL PROBLEMA DEL CAMBIO DE MONEDAS

    Dado un conjunto C de N tipos de monedas con un nmero inagotable de ejemplares de cada tipo, hay que conseguir, si se puede, formar la cantidad M empleando el MNIMO nmero de ellas.

  • Sistema monetario M: monedas de valor 1, 2, 5, 10, 20, 50, 100, 200Problema: pagar exactamente n unidades de valor con un mnimo de monedas.

    funcin Devolver cambio (n) : conjunto de monedas const M = {1, 2, 5, 10, 20, 50, 100, 200}; {denominaciones de las monedas} S := conjunto vaco; {la solucin se construye en S} ss := 0; {suma de las monedas de S} mientras ss < n hacer x := seleccionar mayor elemento factible de M Si ss + x

  • TAMBIEN :

  • Por qu funciona?M adecuado y nmero suficiente de monedas.No funciona con cualquier M:Ejemplo: M={1, 4, 6}, n=8, S={6, 1, 1} en vez de {4, 4} (ptimo)Este problema se resolver con Programacin DinmicaLa funcin Devolver cambio es voraz (algoritmos vidos, greedy)Por qu voraz? Selecciona el mejor candidato que puede en cada iteracin, sin valorar consecuencias. Una vez seleccionado un candidato, decide definitivamente:- aceptarlo, o- rechazarlosin evaluacin en profundidad de alternativas, sin retroceso...Algoritmos sencillos: tanto en diseo como en implementacin.Cuando la tcnica funciona, se obtienen algoritmos eficientes.

  • Resuelven problemas de optimizacin:En cada fase, toman una decisin (seleccin), satisfaciendo un ptimo local segn la informacin disponible, esperando as, en conjunto, satisfacer un ptimo global.

    Manejan un conjunto de candidatos C:En cada fase, retiran el candidato seleccionado de C,y si es aceptado se incluye en S:Conjunto donde se construye la solucin candidatos aceptados.

    Utilizan 4 funciones (explcitamente o no):1. S es Solucin?2. S es Factible? Puede completarse para obtener una solucin?3. Seleccin: determina el mejor candidato4. Objetivo: valora S (relacionada con Seleccin)

    Encontrar S: Solucin y optimiza Objetivo (max/min)

  • 2) Problema del cambio de monedas

    Enunciado: "Se pide crear un algoritmo que permita a una mquina expendedora devolver el cambio mediante el menor nmero de monedas posible, considerando que el nmero de monedas es limitado, es decir, se tiene un nmero concreto de monedas de cada tipo".

  • Solucin: La estrategia a seguir consiste en escoger sucesivamente las monedas de valor mayor que no superen la cantidad de cambio a devolver. El buen funcionamiento del algoritmo depende de los tipos de monedas presentes en la entrada. As, por ejemplo, si no hay monedas de valor menor que diez, no se podr devolver un cambio menor que diez. Adems, la limitacin del nmero de monedas tambin influye en la optimalidad del algoritmo, el cual devuelve buenas soluciones bajo determinados conjuntos de datos, pero no siempre.

  • Considrense los siguientes ejemplos como demostracin de lo dicho:

    a)Monedas 50 25 5 1Cantidad 3 4 1 6

    Si hay que devolver la cantidad 110 siguiendo el mtodo del algoritmo voraz, se tomara primero una moneda de 50, quedando una cantidad restante de 60. Como 50 es an menor que 60, se tomara otra moneda de 50. Ahora la cantidad restante es 10, por tanto ya tenemos que devolver una moneda de 5, ya que 50 y 25 son mayores que 10, y por tanto se desechan. La cantidad a devolver ahora es 5. Se tomara otra moneda de 5, pero puesto que ya no nos queda ninguna, debern devolverse 5 de valor 1, terminando as el problema de forma correcta.

  • b)Monedas 6 4 1Cantidad 3 4 1

    Si queremos devolver la cantidad 8, siguiendo el procedimiento anterior, el algoritmo tomara primero una moneda de 6, quedando un resto de 2. Tomara 2 monedas de valor 1, Pero slo habiendo una moneda de 1 sol, no se puede hallar solucin. Cuando es fcil ver que con 2 monedas de valor 4 se obtiene el resultado pedido.

  • Algoritmo:

    fun cambio (monedas_valor[1..n] de nat, monedas[1..n] de nat, importe: nat) dev cambio[1..n] de nat m := 1; mientras (importe > 0) and (m 0 entonces devolver Error; fsi ffun

  • Problema de la mochila

  • rbol Expandido Mnimo

  • rbol de recubrimiento mnimo

    rbol: grafo sin ciclos y conexo

    rbol de recubrimiento mnimo (minimum spanning tree, MST)

    rbol que interconecta todos losnodos el grafo de forma que la suma de lospesos de las aristas que loforman sea lo menor posible

  • Hallar el rbol expandido mnimo

  • Resultado: el rbol expandido mnimo

  • Algoritmo voraz:

    Funcin a minimizar: longitud del rbol de recubrimiento Candidatos: las aristas del grafo Funcin solucin: rbol de recubrimiento de longitud mnima Funcin factible: el conjunto de aristas no contiene ciclos

    Funcin de seleccin:

    - Seleccionar la arista de menor peso que an no ha sidoseleccionada y que no forme un ciclo (Algoritmo Kruskal)

    - Seleccionar la arista de menor peso que an no ha sidoseleccionada y que forme un rbol junto con el resto dearistas seleccionadas (Algoritmo Prim)

  • Algoritmo de Kruskal

    Seleccionar la arista de menor pesoque: an no haya sido seleccionada y que no conecte dos nodos de la misma componente conexa- es decir, que no forme un ciclo

  • Algoritmo de Prim

    Comenzando por un nodo cualquiera, seleccionar la arista de menor peso que:

    an no haya sido seleccionada y que forme un rbol junto con el resto de aristas seleccionadas

  • COMPLEMENTOS:Observacin: No se producen rechazos.Teorema: Prim calcula el rbol expandido mnimo.Demostracin por induccin sobre |T| y utilizando el lema anterior.

  • Observaciones:

    Existen algoritmos ms eficientes, ms sofisticados, ms recientes (Kruskal es de 1956, Prim de 1957 [1930]).

    - Son ejemplos importantes de aplicacin de la tcnica voraz.Contrastar con la funcin voraz (ejercicio).

  • Problema de la ruta corta

    TRABAJO DE EXPOSICION