2_algoritmos avidos

Upload: ricardo-quinones

Post on 14-Jan-2016

8 views

Category:

Documents


0 download

DESCRIPTION

Algoritmos avidos, 2_Algoritmos de empate de cadenas, 2_AlgoritmosProbabilistas, 2_Divide y venceras, 2_Programación dinámica, AlgoritmosProgramaciónDinámica, Huffman voraz, Práctica6, Practica7, Practica8

TRANSCRIPT

  • ANLISIS DE

    ALGORITMOS Escuela Superior de Cmputo

  • Contenido

    Introduccin

    Algoritmos vidos

    Forma general de un algoritmo vido

    Planteamiento de un algoritmo vido

    Ejemplo

    Mnimo nmero de monedas

    Ejercicios: Ejercicios sobre Dijkstra, Prim

    y Kruskal

    Tarea: Implementacin de 2 algoritmos

    vidos

  • Introduccin Los algoritmos vidos o voraces (Greedy

    Algorithms) son algoritmos que toman

    decisiones de corto alcance, basadas en

    informacin inmediatamente disponible, sin

    importar consecuencias futuras.

    Suelen ser bastante simples y se emplean sobre

    todo para resolver problemas de optimizacin,

    como por ejemplo, encontrar la secuencia

    ptima para procesar un conjunto de tareas por

    un computador, hallar el camino mnimo de un

    grafo, etc.

  • Los algoritmos voraces tambin se caracterizan

    por la rapidez en que encuentran una solucin

    (cuando la encuentran), la cual casi siempre no

    es la mejor.

    Normalmente son utilizados para resolver

    problemas en los que la velocidad de respuesta

    debe ser muy alta o en la que el rbol de

    decisiones de bsqueda es muy grande, no

    siendo posible analizar la totalidad de

    posibilidades.

  • La estrategia general de este tipo de algoritmos se basa en la

    construccin de una solucin, la cual comienza sin elementos

    y cada vez que debe tomar algn tipo de decisin, lo hace

    con la informacin que tiene a primera mano, la cual de

    alguna manera le permita adicionar elementos y as avanzar

    hacia la solucin total.

    Cada elemento o paso de la solucin se adiciona al conjunto

    solucin y as hasta llegar a la solucin final o a un punto en

    el cual no puede seguir avanzando, lo cual indica que no

    encontr una solucin al problema.

  • Habitualmente, los elementos que intervienen

    son:

    Un conjunto o lista de candidatos (tareas a

    procesar, vrtices del grafo, etc.)

    Un conjunto de decisiones ya tomadas

    (candidatos ya escogidos).

    Una funcin que determina si un conjunto de

    candidatos es una solucin al problema (aunque

    no tiene por qu ser la ptima).

    Para resolver el problema de optimizacin hay

    que encontrar un conjunto de candidatos que

    optimiza la funcin objetivo. Los algoritmos

    voraces proceden por pasos.

  • Algoritmos vidos Un algoritmo voraz (tambin conocido como vido, devorador o goloso) es aquel que, para resolver un determinado problema, sigue una heurstica consistente en elegir la opcin ptima en cada paso local con la esperanza de llegar a una solucin general ptima. Este esquema algortmico es el que menos dificultades plantea a la hora de disear y comprobar su funcionamiento. Normalmente se aplica a los problemas de optimizacin.

  • Dado un conjunto finito de entradas C, un algoritmo voraz devuelve un conjunto S (seleccionados) tal que S C y que adems cumple con las restricciones del problema inicial.

    Cada conjunto que satisfaga las restricciones se le suele denominar prometedor, y si este adems logra

    que la funcin objetivo se minimice o maximice

    (segn corresponda) diremos que es una solucin ptima.

  • Elementos de los que consta la tcnica El conjunto de candidatos, entradas del problema.

    Funcin solucin, esta comprueba, en cada paso, si el

    subconjunto actual de candidatos elegidos forma una

    solucin (no importa si es ptima o no lo es).

    Funcin de seleccin, informa de cul es el elemento

    ms prometedor para completar la solucin. ste no

    puede haber sido escogido con anterioridad. Cada

    elemento es considerado una sola vez. Luego, puede ser

    rechazado o aceptado y pertenecer a \ .

    Funcin de factibilidad, informa si a partir de un

    conjunto se puede llegar a una solucin. Lo aplicaremos

    al conjunto de seleccionados unido con el elemento ms

    prometedor.

    Funcin objetivo, es aquella que queremos maximizar o

    minimizar, el ncleo del problema.

  • Forma general de un algoritmo vido

    Funcin vido(C:conjunto):conjunto //C conjunto de candidatos

    S

  • Forma general de un algoritmo vido Para identificar si un problema es susceptible de

    ser resuelto por un algoritmo vido se definen

    una serie de elementos que han de estar

    presentes en el problema:

    Un conjunto de candidatos, que corresponden a las n

    entradas del problema.

    Una funcin de seleccin que en cada momento

    determine el candidato idneo para formar la solucin

    de entre los que an no han sido seleccionados ni

    rechazados.

  • Una funcin que compruebe si un cierto subconjunto

    de candidatos es prometedor. Entendemos por

    prometedor que sea posible seguir aadiendo

    candidatos y encontrar una solucin.

    Una funcin objetivo que determine el valor de la

    solucin hallada. Es la funcin que queremos

    maximizar o minimizar.

    Una funcin que compruebe si un subconjunto de

    estas entradas es solucin al problema, sea ptima o

    no.

  • Planteamiento de un algoritmo vido Para resolver el problema, un algoritmo vido tratar

    de encontrar un subconjunto de candidatos tales que,

    cumpliendo las restricciones del problema, constituya

    la solucin ptima.

    Para ello trabajar por etapas, tomando en cada una

    de ellas la decisin que le parece la mejor, sin

    considerar las consecuencias futuras, y por tanto

    escoger de entre todos los candidatos el que produce

    un ptimo local para esa etapa, suponiendo que ser a

    su vez ptimo global para el problema.

  • Planteamiento de un algoritmo vido Antes de aadir un candidato a la solucin que est

    construyendo comprobar si es prometedora al

    aadirlo. En caso afirmativo lo incluir en ella y en

    caso contrario descartar este candidato para siempre

    y no volver a considerarlo.

    Cada vez que se incluye un candidato comprobar si el

    conjunto obtenido es solucin.

  • Ejemplo: Mnimo nmero de monedas Se pide crear un algoritmo que permita a una mquina

    expendedora devolver el cambio mediante el menor

    nmero de monedas posible.

    1. Considerando que el nmero de monedas es

    ilimitado.

    2. Considerando que el nmero de monedas es

    limitado, es decir, se tiene un nmero concreto de

    monedas de cada tipo.

  • Candidato: conjunto finito de monedas de, por

    ejemplo, 1, 5, 10 y 25 unidades, con un nmero de

    monedas ilimitado o limitado.

    Solucin: conjunto de monedas cuya suma es la

    cantidad a pagar.

    Prometedor: la suma de las monedas escogidas en un

    momento dado no supera la cantidad a pagar.

    Funcin de seleccin: la moneda de mayor valor en el

    conjunto de candidatos an no considerados.

    Funcin objetivo: nmero de monedas utilizadas en la

    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.

    Si hay que devolver la cantidad 110, 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, terminando as el

    problema de forma correcta.

    Solucin: Devolver dos monedas de 50 y dos de 5.

    Denominacin de

    Monedas 50 25 5 1

  • Algoritmo vido: Monedas ilimitadas

    fun cambio (monedas_valor[1..n] de nat, importe: nat) dev

    cambio[1..n] de nat

    m := 1;

    mientras (importe > 0) and (m

  • Si consideramos adems un numero de monedas de

    cada denominacin no ilimitado deberemos ahora de

    considerar que sea posible tomar monedas de cada

    denominacin para formar la solucin

    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.

    Solucin: Devolver dos monedas de 50, una de 5 y cinco de 1.

    Denominacin de

    Monedas 50 25 5 1

    Monedas disponibles 3 4 1 6

  • Algoritmo vido: Monedas limitadas

    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

  • Ejemplo: Algoritmos Greedy sobre grafos rboles generadores minimales

    Problema

    Dado un grafo conexo G = (V, A) no dirigido y ponderado con pesos

    positivos, calcular un subgrafo conexo T G que conecte todos los vrtices del grafo G y que la suma de los pesos de las aristas

    seleccionadas sea mnima.

    Solucin

    Este subgrafo es necesariamente un rbol: rbol generador minimal o

    rbol de recubrimiento mnimo (minimum spanning tree [MST]).

  • Aplicaciones Diseo de redes: redes telefnicas, elctricas,

    hidrulicas, de computadoras, de carreteras

    Construccin de redes de mnimo costo.

    Refuerzo de lneas crticas.

    Identificacin de cuellos de botella.

    Enrutamiento (evitar ciclos).

    Soluciones aproximadas para problemas NP.

    Algoritmos de agrupamiento (anlisis de clster).

  • Algoritmos Greedy para resolver el

    problema

    Algoritmo de Kruskal: Comenzando con T=, considerar las aristas en orden creciente de

    costo y aadir las aristas a T salvo que hacerlo suponga la creacin de

    un ciclo.

    Algoritmo de Prim:

    Comenzando con un nodo raz arbitrario s, hacer crecer el rbol T

    desde s hacia afuera. En cada paso, se aade al rbol T el nodo que

    tenga una arista de menor costo que lo conecte a otros nodos de T.

    Algoritmo de borrado inverso:

    Comenzando con T=A, considerar las aristas en orden decreciente de

    costo eliminar las aristas de T salvo que eso desconectase T.

  • Ejemplo: Caminos mnimos Caminos mnimos

    Problema

    Dado un grafo G ponderado con pesos positivos, calcular el camino de

    menor peso existente entre un vrtice s y otro vrtice t.

  • Algoritmo de Dijkstra (1959)

    El algoritmo de Djikstra es un algoritmo muy

    nico. Inicialmente, se utiliza un enfoque voraz para

    conseguir distancias iniciales a los nodos vecinos.

    Luego, en el siguiente paso, se comprueba si el valor

    calculado es el ptimo global a ese nodo o no. Si no,

    se comprueban todos los otros caminos y calcula la

    distancia ptima a ese nodo.

    Luego, basndose en los valores ya calculados de los

    nodos anteriores, se calcula el camino ms corto para

    el nodo final. Por lo tanto, esto es una especie de un

    enfoque de programacin dinmica.

  • Algoritmo de Dijkstra (1959)

    As, Djikstra utiliza ambos enfoques y, por tanto, no

    puede ser completamente clasificada como "Greedy" o

    "DP". Es una mezcla de ambos y por lo tanto, es

    nico. Siempre ha sido un tema debatido. Tal es la

    belleza del algoritmo.

    Dado un grafo G=(V,A) y un vrtice s, encontrar el

    camino de costo mnimo para llegar desde s al resto de

    los vrtices en el grafo.

    IDEA: Mantener el conjunto de nodos ya explorados

    para los cuales ya hemos determinado el camino

    ms corto desde s

  • Ejercicios: Ejercicios sobre Dijkstra, Prim y Kruskal

    Para los siguientes 5 grafos detallar la solucin de la

    ruta ms corta del nodo (1) a todos los nodos (Dijkstra) y

    el rbol recubridor mnimo mediante Prim y Kruskal.

    Describir de manera detallada los algoritmos y sus pasos.

    Ejercicio 01

  • Ejercicio 02

    Ejercicio 03

  • Ejercicio 04

    Ejercicio 05