algoritmo grafos

Upload: salvador-armando

Post on 20-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Algoritmo Grafos

    1/10

    Pgina 1de 10

    Universidad Don BoscoFacultad de Ingeniera

    Escuela de Ingeniera en Computacin

    Ciclo 022015 / Grupo: 03T

    Asignatura: Programacin IV

    ALGORITMOS PARA GRAFOS

    Objetivos

    Al final de la clase los estudiantes sern capaces de:

    Conocer y aplicar diferentes algoritmos para el manejo de grafos.

    Calcular el camino mnimo desde un vrtice al resto de los vrtices.

    Determinar si hay camino entre cualquier par de vrtices de un grafo.

    Realizar en C# la implementacin de los algoritmos estudiados.

    Introduccin

    Existen numerosos problemas que se pueden formular en trminos de grafos. Ejemplo de ello es la

    planificacin de las tareas que completan un proyecto, encontrar las rutas de menor longitud entre

    puntos geogrficos, calcular el camino ms rpido en un transporte, determinar el flujo mximo que

    puede llegar desde una fuente a, por ejemplo, una urbanizacin, entre otros.

    La resolucin de estos problemas requiere examinar todos los nodos o todas las aristas del grafo

    que representa al problema, sin embargo, existen ocasiones en que la estructura del problema es tal

    que solo se necesitan visitar algunos nodos o bien algunas aristas.

    Los algoritmos imponen implcitamente un orden en estos recorridos: visitar el nodo ms prximo

    o las aristas ms cortas, y as sucesivamente, otros algoritmos no requieren ningn orden

    concreto en el recorrido.

    Camino ms Corto

    Cuando se trabaja con grafos dirigidos, etiquetados o ponderados con factores de peso no

    negativos, es frecuente buscar el camino ms corto entre dos vrtices dados; es decir, el camino que

    nos permite llegar desde un vrtice origen a un vrtice destino recorriendo la menor distancia o con

    el menor costo.

  • 7/24/2019 Algoritmo Grafos

    2/10

    Pgina 2de 10

    Los algoritmos ms usados para este fin son: Dijkstra, Floyd y Warshall.

    Los tres algoritmos utilizan una matriz de adyacencia ponderada o etiquetada: que es la misma

    matriz de adyacencia utilizada para representar grafos, pero con la diferencia que en lugar de

    colocar un nmero 1 cuando dos vrtices son adyacentes, se coloca el peso o ponderacin

    asignado a la arista que los une.

    Con frecuencia en la matriz de adyacencia etiquetada suele utilizarse la siguiente notacin:

    Suponiendo que M [i, j] representa la matriz de adyacencia, tenemos:

    M [i, j] = 0 ; si i = j

    M [i, j] = 1000 si no existe un camino de i a j; donde j j.

    M [i, i] = costo de ir del vrtice i al vrtice j

    Otro nombre con el cual suele llamarse a una matriz de adyacencia etiquetada es: matriz dedistancia o matriz de costos.

    El problema de buscar un camino ms corto entre dos nodos dados se puede resolver mediante un

    algoritmo voraz conocido como Algoritmo de Dijkstra.

    Qu es un Algoritmo Voraz?

    Un algoritmo voraz 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.

    Algoritmo del camino ms corto o Ruta ms corta (Algoritmo Dijkstra)

    El algoritmo Dijkstra es un algoritmo eficiente (de complejidad O(n2), donde n es el nmero de

    vrtices) que sirve para encontrar el camino de coste mnimo desde un nodo origen a todos los

    dems nodos del grafo. Fue diseado por el holands Edsger Wybe Dijkstra, en 1959.

    Este algoritmo es un tpico ejemplo de algoritmo vido, que resuelven los problemas en sucesivos

    pasos, seleccionando en cada paso la solucin ms ptima con el objeto de resolver el problema.

    El fundamento sobre el que se basa este algoritmo es el principio de optimizar: si el camino ms

    corto entre los vrtices u y v pasa por el vrtice w, entonces la parte del camino que va de w a

    v debe ser el camino ms corto entre todos los caminos que van de w a v. De esta manera, se

    van construyendo sucesivamente los caminos de coste mnimo desde un vrtice inicial hasta cada

    uno de los vrtices del grafo, y se utilizan los caminos conseguidos como parte de os nuevos

    caminos.

  • 7/24/2019 Algoritmo Grafos

    3/10

    Pgina 3de 10

    Dicho en otras palabras:

    Dado un grafo a cuyos arcos se ha asociado una serie de pesos, se define el camino de coste

    mnimo de un vrtice u a otro v, como el camino donde la suma de los pesos de los arcos que lo

    forman es la ms baja entre todos los caminos posibles de u a v .

    El algoritmo de Dijkstra en cada paso selecciona un vrtice v cuya distancia es desconocida, entre

    los que tienen la distancia ms corta al vrtice origen s, entonces el camino ms corto de s a v

    ya es conocido y marca el vrtice v como ya conocido. As sucesivamente se van marcando

    nuevos vrtices hasta que estn todos marcados; en ese momento es conocida la distancia mnima

    del origen s al resto de los vrtices.

    Entre las condiciones ms importantes que deben considerarse para aplicar el algoritmo estn:

    Las aristas deben tener un peso no negativo.

    El grafo debe ser dirigido y por supuesto ponderado.

    Una posible aplicacin de este algoritmo se presenta cuando se desea encontrar la ruta ms corta

    entre dos ciudades; cada vrtice representa una ciudad y las aristas representan la duracin de os

    vuelos.

    A continuacin, se presenta el algoritmo:

    La implementacin de los algoritmos (codificacin o pseudocdigo) puede variar de acuerdo a lalgica de cada programador. Por lo tanto, se presentar inicialmente una explicacin muy general

    sobre la lgica del algoritmo y su secuencia de ejecucin, posteriormente se presentar la

    explicacin del pseudocdigo para implementar el algoritmo.

    Para la explicacin general, se tomar como referencia los siguientes pasos:

    Seleccionar vrtice de partida, es decir, un origen.

    Marcar el punto de partida como el punto de inicio.

    Determinar los caminos especiales desde el nodo de partida, es decir, el de inicio.

    o

    Camino especial: es aquel que solo puede trazarse a travs de los nodos o

    vrtices ya marcados.

    Para cada nodo marcado, se debe determinar si es mejor usar el camino especial antes

    calculado o si es mejor usar el nuevo camino que resulte al marcar este nuevo nodo.

    Para seleccionar un nuevo nodo no marcado como referencia, deber tomarse aquel cuyo

    camino especial para llegar a l es el mnimo, por ejemplo si anteriormente marqu el vrtice

    2, el cual tiene dos nodos adyacentes 3 y 4 cuyo peso en la arista corresponde a 10 y 5

  • 7/24/2019 Algoritmo Grafos

    4/10

    Pgina 4de 10

    respectivamente, se tomar como nodo de partida el 4, ya que el peso del camino a arista

    es menor.

    Cada camino mnimo corresponde a la suma de los pesos de las aristas que forman el

    camino para ir del nodo principal al resto de nodos, pasando nicamente por caminos

    especiales, es decir, nodos marcados.

    Consideraciones iniciales para la explicacin del algoritmo Dijkstra

    Utilizaremos un arreglo D, para almacenar las distancias, las cuales representarn en todo

    momento la distancia mnima de ir de un nodo de partida al resto de nodos, es importante

    aclarar que en cada nuevo camino que se descubra muy probablemente se encuentre un

    camino que sea ms eficiente que otro ya encontrado para ir del vrtice v al w, por lo

    tanto los valores de D podran cambiar en la medida que se encuentren nuevos caminos

    mnimos.

    Para el vector D se utilizarn sub ndices del 0 al n-1 y cada uno corresponder a un

    vrtice del grafo que se tomar como ejemplo (ver figura 1), as el grafo tiene 7 vrtices en

    donde cada vrtice tendr una posicin dentro del vector, as el vrtice 1 corresponder a la

    posicin 0, el vrtice 2 a la posicin 1, el vrtice 3 a la posicin 2, y as sucesivamente.

    Se marcar con un sombreado cada nuevo nodo de partida.

    Se utilizarn dos grficos, uno del grafo para el cual estamos aplicando el algoritmo Dijkstra

    y otro que nos servir para trazar los caminos mnimos (especiales).

  • 7/24/2019 Algoritmo Grafos

    5/10

    Pgina 5de 10

    Funcionamiento y lgica de Dijkstra

    Considere el grafo de la figura 1, y suponga que quiere determinar el costo del camino mnimo que

    lleva del vrtice 1 a cada uno de los dems vrtices del grafo:

    Pasos:

    1. Se marca el vrtice origen y calcular el costo de todos los caminos especiales, esto es

    marcamos con un sombreado el vrtice 1 (ver figura 2) y a partir de l vemos que tenemos

    dos caminos especiales: el que va del vrtice 1 al 2 y el que va del 1 al 3, tomamos el peso

    de la arista de ambos caminos y lo ingresamos a nuestro vector D y el resto de posiciones

    de D quedan vacas o colocamos 0 para indicar que no hay caminos especiales desde el 1

    al resto de los vrtices.

    Observe a figura 3 (representacin de los caminos especiales) como se marcan los primeros

    caminos y que corresponden a los caminos mnimos inicialmente encontrados desde el

    vrtice 1 al vrtice 2 y desde el vrtice 1 al vrtice 3, cuyos pesos son 10 y 18

    respectivamente.Como nuestro nodo inicial es 1 y en el vector de distancias corresponde a la posicin 0

    entonces siempre esta posicin que corresponde al nodo de partida se coloca 0 y sta

    nunca cambia (ver figura 4):

    1

    6

    2

    5

    4

    7

    3

    1018

    20

    5

    10

    2

    33

    2

    8

    6

    Figura 1 - Grafo Dirigido

  • 7/24/2019 Algoritmo Grafos

    6/10

    Pgina 6de 10

    2. Ahora seleccionamos el vrtice no marcado (es decir no sombreado) con costo de camino

    especial mnimo, para el caso corresponde al vrtice 2, el cual es el vrtice cuyo camino

    para llegar hacia l es menor, si recuerda anteriormente calculamos dos caminos especiales

    del vrtice 12 que tena un peso de 10 y el del vrtice 1-3 que tena un peso de 18, como

    el menor de estos pesos corresponde al camino especial que va del vrtice 1-2 se toma,

    entonces se toma el vrtice 2 para tomarlo como punto de partida y calcular los siguientes

    caminos especiales de peso mnimo.

    As sombreamos el vrtice 2 (ver figura 5) y vemos que este vrtice tiene dos caminos

    especiales: el que va del vrtice 2 3 con un peso de 6 y el que va del vrtice 2 -5 con un

    peso de 3, ahora bien aqu sucede algo especial y es en donde comienza a distinguirse con

    mayor exactitud la accin de Dijkstra, anteriormente encontramos que el camino del vrtice 1

    3 era por la arista que tiene un peso 18, pero esta vez encontramos que es ms eficiente ir

    desde el vrtice 1 3 por el camino que va del vrtice 1 2 3 en donde el peso de dichocamino es igual a sumar 10 (del camino del vrtice 1 - 2) + 6 (del camino del vrtice 2 - 3),

    esta suma es igual a 16 por lo tanto 16 es menor que 18, lo que hacemos es descartar del

    vector D en la posicin 2 el valor de 18 (que anteriormente se tena) y se coloca el nuevo

    valor 16 (ver figura 7) y se agrega a la posicin 4 el peso de 13 que corresponde al otro

    camino especial calculado desde el vrtice 1 5 el cual sigue el recorrido: 12 - 5. Y desde

    luego que nuestro grfico de caminos especiales cambia (ver figura 6).

    Es importante hasta este punto aclarar que no es importante para Dijkstra el nmero de

    aristas por las cuales debe pasar para encontrar un camino mnimo, a Dijkstra solo le

    interesa el peso de la arista no as el nmero de aristas.

  • 7/24/2019 Algoritmo Grafos

    7/10

    Pgina 7de 10

    3. El proceso de seleccionar vrtices no marcados para encontrar sus caminos mnimos se

    repite siguiendo la misma lgica, para el caso corresponde seleccionar el vrtice 5, el cual

    corresponde al camino especial que se calcul anteriormente (ver figura 6) el cual tiene un

    peso de 3 menor que el otro camino calculado desde el vrtice 23, por lo tanto marcamos

    a 5 como nuevo vrtice de partida (ver figura 8) y calculamos sus caminos especiales, para

    el caso tenemos dos caminos especiales el que va del vrtice 5 4 y el que va del vrtice 5

    7

    (ver figura 9).

    Para el caso de nuestro vector, observe que siempre la posicin 0 es 0 (ver figura 10), la posicin 1

    es 10 porque hasta el momento no hemos encontrado un camino ms pequeo que nos lleve del

    vrtice 1 - 2 por lo tanto dicho valor se mantiene (ver figura 10), en el caso de la posicin 2 igual se

    mantiene porque hasta el momento no hemos encontrado otro camino ms pequeo que nos lleve

    del vrtice 1 3 (ver figura 10), pero para el caso de la posicin 3 ya tenemos un camino que nos

    lleve del vrtice 14, el cual hasta el momento es el mnimo (ver figura 10) y note que correspondea la suma de los pesos de todas las aristas que deben recorrerse, para el caso el recorrido de este

    camino es 1- 254 que corresponde a la suma de los pesos 10+3+8 = 21 (ver figura 9).

    La posicin 4 del vector de distancias se mantiene igual (ver figura 10) y la posicin 6 tiene un valor

    de 23 porque es el camino mnimo encontrado hasta el momento para ir del vrtice 1 7 el cual

  • 7/24/2019 Algoritmo Grafos

    8/10

    Pgina 8de 10

    sigue la secuencia de caminos 1 2 5 7 (ver figura 9) y cuya suma de pesos corresponde a

    10+3+10 = 23.

    Es importante que note que hasta el momento todos los caminos que hemos calculado y hemos

    tomado en cuenta para calcular los distintos caminos mnimos, son caminos que pasan nica y

    exclusivamente por los vrtices ya marcados, ningn camino en Dijkstra puede pasar por un vrticeno marcado o visitado, as observe que cuando marcamos el vrtice 5 (ver figura 8) decimos que

    podemos llegar del vrtice 1 al 7 a travs del camino que sigue la secuencia de 1 2 5 cosa que

    es posible porque tanto el vrtice 1, 2 y 5 estn marcados.

    4. Bien el proceso es el mismo y se contina mientras haya vrtices no marcados. Ahora

    corresponde marcar el vrtice 3, el cual a comparacin de los caminos especiales que llevan

    a vrtices no marcados an de los vrtices 5 y 2 (ver figura 8) es el menor, por lo tanto semarca y se toma l. A partir de este punto solo se mostrarn las figuras con los cambios que

    son necesarios hacer al aplicar nuevamente el proceso, intente usted mismo reflexionar

    porque los cambios se dan de esa manera y trate de documentar cada una de las

    secuencias siguientes:

  • 7/24/2019 Algoritmo Grafos

    9/10

    Pgina 9de 10

    Bien finalmente al examinar el resultado de la grfica de los caminos especiales, vemos que

    exactamente corresponde a un subgrafo, en el cual nicamente se tienen los caminos mnimos que

    nos llevan del vrtice 1 al resto de vrtices:

    As:

    El camino inicial es 0 que corresponde al vrtice 1.

    El camino del vrtice 12 = 10 y pasa por los vrtices 1 y 2.

    El camino del vrtice 13 = 16 y pasa por los vrtices 123.

    El camino del vrtice 14 = 19 y pasa por los vrtices 1234.

    El camino del vrtice 15 = 13 y pasa por los vrtices 125.

    1

    6

    2

    5

    4

    7

    3

    10

    5

    2

    33

    6

  • 7/24/2019 Algoritmo Grafos

    10/10

    Pgina 10de 10

    El camino del vrtice 16 = 26 y pasa por los vrtices 1- 23476.

    El camino del vrtice 17 = 21 y pasa por los vrtices 12347.

    Si recuerda a medida que aplicaba el proceso hubo caminos que tuvo que descartar porque ya no

    representaban el camino ms corto, por lo tanto estos caminos se descartan tanto del vector D

    como del grfico de caminos especiales.