Sesión 04 - Algoritmos Voraces

download Sesión 04 - Algoritmos Voraces

of 24

Transcript of Sesión 04 - Algoritmos Voraces

  • Algoritmos voraces

    Robert Espinoza Domnguez

  • Es un mtodo que puede ser aplicado a numerosos

    problemas, especialmente los de optimizacin.

    Suelen ser los ms sencillos y fciles de implementar.

    Cuando funcionan, son eficientes.

    Estas tcnicas estn diseadas para aplicarse en

    fases, donde se toma una decisin basndose en la

    informacin que tiene disponible.

    Para ello se considera la alternativa ms prometedora (el valor ms pequeo el valor ms grande) en un determinado instante.

    Su enfoque es miope porque no se tiene en cuenta los efectos que estas decisiones puedan producir en el futuro.

    Nunca se reconsidera la decisin tomada, ni se retrocede por ninguna circunstancia.

    Algoritmos voraces

  • Uno de sus principales inconvenientes es que en

    algunos casos no encuentre ninguna solucin an

    cuando sta exista.

    El nombre de voraces o vidos (del ingls greedy) se

    debe a su comportamiento: en cada etapa toman lo que pueden sin analizar la consecuencias, es decir son glotones por naturaleza.

    Algoritmos voraces

  • Problema del cambio. Pagar una cierta cantidad a un

    cliente utilizando el menor nmero de monedas

    posible.

    Se tienen las monedas de 5, 2, 1, 0.50, 0.20, 0.10,

    0.05 y 0.01 cntimos.

    Algoritmos voraces - Ejemplos

    El monto que debe de pagar es de 1.11 soles

    Se paga con una moneda de 5 soles

  • El vuelto que se debe dar es de 3.89 soles.

    1 moneda de 2

    1 moneda de 1

    1 moneda de 50 cntimos

    1 moneda de 20 cntimos

    1 moneda de 10 cntimos

    1 moneda de 5 cntimos

    4 monedas de 1 cntimo.

    Total: 10 monedas.

    Algoritmos voraces - Ejemplos

  • Para solucionar algn problema de forma ptima,

    disponemos de un conjunto de candidatos.

    Las monedas disponibles.

    Las aristas de un grafo que se pueden usar para construir

    un grafo.

    El conjunto de tareas que hay que planificar.

    Una funcin objetivo que determine el valor de la

    solucin hallada. Es la funcin que queremos maximizar

    o minimizar y no aparece explcitamente en el algoritmo.

    El nmero de monedas utilizadas para dar el cambio.

    La longitud de ruta que hemos construido.

    El tiempo necesario para procesar todas las tareas de la

    planificacin.

    Caractersticas Generales

  • Una funcin de seleccin que indica en cualquier

    momento el candidato idneo para formar la solucin

    entre los que an no han sido seleccionados o

    rechazados.

    Pueden existir varias funciones de seleccin, que estn

    relacionadas con la funcin objetivo.

    Una funcin que compruebe si un cierto subconjunto de

    candidatos constituye una solucin de nuestro

    problema, ignorando si es o no ptima por el momento.

    Suman las monedas seleccionadas la cantidad a pagar?

    Las aristas seleccionadas forman una ruta hasta el nodo

    que deseamos alcanzar?

    Estn planificadas todas las tareas?

    Caractersticas Generales

  • Una funcin que compruebe si un cierto subconjunto de

    candidatos es factible, es decir que sea posible seguir

    aadiendo candidatos y encontrar una solucin.

    A medida que avanza el algoritmo se forman dos

    conjuntos

    Uno contiene candidatos que ya han sido considerados y

    seleccionados (solucin).

    El otro contiene candidatos que ya han sido considerados

    y rechazados.

    Caractersticas Generales

  • 2 Kg.

    Comprar papas en el mercado. Seleccionar las

    mejores papas.

    S o no?

    Algoritmos voraces - Ejemplo

  • 10

    Inicialmente empezamos con una solucin vaca, sin papas.

    Seleccionamos la mejor papa del montn o la que parezca que es la mejor (Funcin de seleccin). Examinamos la papa detenidamente y decidimos si se

    coge o no (considerarlo). Si no se coge, se aparta del montn (rechazo).

    Si se coge, se mete a la bolsa y ya no se saca (seleccionado).

    Una vez que tenemos 2 kilos paramos.

    Algoritmos voraces - Ejemplos

  • Buscamos un subconjunto de candidatos que

    constituya la solucin ptima, es decir, maximice o

    minimice la funcin objetivo.

    El problema se interpreta como: tomar algunos elementos de entre un conjunto de candidatos.

    El orden el que se cogen puede ser importante o no.

    Los algoritmos trabajarn por etapas, tomando en

    cada un de ellas la decisin que le parece mejor, sin

    considerar las consecuencias futuras.

    Inicialmente el conjunto de elementos seleccionados

    estar vaco.

    En cada paso se considera aadir a ste conjunto el

    mejor candidato sin considerar los restantes, guindonos

    por la funcin de seleccin.

    Mtodo General

  • Antes de aadir un candidato a la solucin que estamos

    construyendo, se evaluar si sta es factible.

    Si el conjunto ampliado sigue siendo factible entonces

    aadimos el candidato actual al conjunto de candidatos

    seleccionados.

    En caso contrario, se rechaza el candidato.

    Cada vez que se incluye un candidato al conjunto de

    candidatos seleccionados se comprobar si el conjunto

    obtenido es la solucin.

    Mtodo General

  • Se puede generalizar el proceso intuitivo a un esquema algortmico general.

    El esquema trabaja con los siguientes conjuntos de

    elementos: C: Conjunto de elementos candidatos, pendientes de

    seleccionar (inicialmente todos).

    S: Candidatos considerados y seleccionados para la solucin.

    R: Candidatos considerados pero rechazados.

    Qu o cules son los candidatos? Depende de cada problema.

    Mtodo General

  • Mtodo General

    Mtodo CClase.Voraz (C: Candidatos, S: Solucin, R: Rechazados )

    Mientras ((No Solucin(S)) y (C vaco)) hacer

    x Seleccionar( C )

    C C - {x}

    Si (Factible(S, {x})) entonces

    Insertar(S,{x})

    Sino

    R R U {x}

    fSi

    fMientras

    Si (Solucin(S)) entonces

    Retornar S

    Sino

    Retornar No hay solucin

    fSi

    fMtodo

  • Funciones Genricas

    Solucin (S). Comprueba si un conjunto de candidatos es una solucin (independientemente de que sea ptima o no).

    Seleccionar (C). Devuelve el elemento ms prometedor del conjunto de candidatos pendientes (no seleccionados ni rechazados).

    Factible (S, x). Indica si a partir del conjunto S y aadiendo x, es posible construir una solucin (posiblemente aadiendo otros elementos).

    Insertar (S, x). Aade el elemento x al conjunto solucin. Adems, puede ser necesario hacer otras cosas.

    Objetivo (S). Dada una solucin devuelve el coste asociado a la misma (resultado del problema de optimizacin).

  • Anlisis de tiempos de ejecucin

    La complejidad depende del nmero de candidatos, de las

    funciones bsicas a utilizar, del nmero de elementos de la

    solucin.

    n: nmero de elementos de Candidatos. m: nmero de

    elementos de una solucin.

    Repetir, como mximo n veces y como mnimo m:

    Seleccin de un elemento entre los candidatos: f( n ).

    Entre O(1) y O( n ).

    Comprobar si el valor actual es solucin: h( m ).

    Normalmente O( m ).

    La funcin factible es parecida a solucin, pero con una

    solucin parcial g( m ).

    La unin de un nuevo elemento a la solucin puede

    requerir otras operaciones de clculo, k( n, m ).

  • Cambio de monedas

    Construir un algoritmo que dada una cantidad P

    devuelva esa cantidad usando el menor nmero

    posible de monedas.

    Disponemos de monedas con valores de 5, 2, 1, 0.50,

    0.20, 0.10, 0.05 y 0.01 cntimos de soles.

    El monto que debe de pagar es de 1.11 soles.

    Se paga con una moneda de 5 soles.

    El vuelto es de 3.89 soles.

  • Cambio de monedas

    Devolver 3,89 Soles.

    1 moneda de 2

    1 moneda de 1

    1 moneda de 50 cntimos

    1 moneda de 20 cntimos

    1 moneda de 10 cntimos

    1 moneda de 5 cntimos

    4 monedas de 1 cntimo.

    Total: 10 monedas.

    El mtodo intuitivo se puede entender como un

    algoritmo voraz: en cada paso aadir una moneda

    nueva a la solucin actual, hasta llegar a P.

  • Cambio de monedas

    Conjunto de candidatos: todos los tipos de monedas disponibles. Suponemos una cantidad ilimitada de cada tipo.

    Solucin: conjunto de monedas que sumen P.

    Funcin objetivo: minimizar el nmero de monedas.

    Representacin de la solucin:

    El conjunto S est constituido (s1, s2, s3, s4, s5, s6, s7, s8), donde si es el nmero de monedas usadas de tipo i.

    Suponemos que la moneda i vale vi.

    Formulacin: Minimizar si, sujeto a sivi = P, si0 i=1..8 i=1..8

  • Cambio de monedas

    Funciones del esquema:

    inicializacin. Inicialmente si= 0, para todo i= 1..8

    solucin. El valor actual es solucin si sivi = P

    seleccionar. Qu moneda se elige en cada paso de entre los

    candidatos?

    Respuesta: Elegir en cada paso la moneda de valor ms alto

    posible, pero sin sobrepasar la cantidad que queda por devolver.

    factible. Valdr siempre verdad.

    En lugar de seleccionar monedas de una en una, usamos la

    divisin entera y cogemos todas las monedas posibles de mayor

    valor.

  • Cambio de monedas

    Garantiza siempre la solucin ptima? Para este

    sistema monetario s. Pero no siempre...

    Supongamos que tenemos monedas de 100, 90 y 1.

    Queremos devolver 180.

    Algoritmo voraz. 1 moneda de 100 y 80 monedas de 1,

    en total 81 monedas.

    Solucin ptima. 2 monedas de 90, en total 2

    monedas.

  • Cambio de monedas

    Anlisis de tiempos de ejecucin

    El orden de complejidad depende de: El nmero de candidatos existentes.

    Los tiempos de las funciones bsicas utilizadas.

    El nmero de elementos de la solucin.

    Ejemplo. n: nmero de elementos de C. m: nmero de elementos de una solucin.

    Repetir, como mximo n veces y como mnimo m:

    Funcin de seleccin: f(n). Entre O(1) y O(n). Funcin solucin: g(m). Normalmente O(1) O(m). Funcin factible (parecida a solucin, pero con una solucin

    parcial): h(m). Insercin de un elemento: k(n, m).

  • Cambio de monedas

    Anlisis de tiempos de ejecucin Tiempo de ejecucin genrico:

    t(n,m) O(n*(f(m)+g(n)+h(m)) + m*k(n, m))

    Ejemplos: Algoritmos de Prim y Dijkstra: n candidatos, la funcin de seleccin

    e insercin son O(n): O(n2).

    Devolucin de monedas: podemos encontrar el siguiente elemento en un tiempo constante (ordenando las monedas): O(n).

    El anlisis depende de cada algoritmo concreto.

    En la prctica los algoritmos voraces suelen ser bastante rpidos,

    encontrndose dentro de rdenes de complejidad polinomiales.

  • Importancia de Algoritmos Voraces

    No hay necesidad de evaluar alternativas, ni emplear sofisticados procedimientos de decisiones.

    Es una familia de algoritmos que se utiliza para resolver problemas de optimizacin.

    Son fciles de inventar, implementar y son eficientes en cierta medida.

    No todos los problemas se pueden resolver con este enfoque.