SlideShare una empresa de Scribd logo
1 de 65
Grafos


Estructuras de Datos

         Vicente García Díaz – garciavicente@uniovi.es
                           Universidad de Oviedo, 2011
2


Tabla de contenidos

1. Algoritmos de búsqueda del camino mínimo
 1.   Algoritmo Breadth first search
 2.   Algoritmo de Dijkstra
 3.   Algoritmo de Bellman-Ford
 4.   Algoritmo de Floyd-Warshall
2. Algoritmos de búsqueda del árbol de
   recubrimiento mínimo
 1. Algoritmo de Prim
3. Trabajo en equipo
4. Bibliografía
3
4



Algoritmo Breadth-first search
• Objetivo:
  Encontrar el camino mínimo desde un nodo inicial a todos los demás
  nodos de un grafo sin tener en cuenta los pesos de los nodos

• Ejemplo de uso:
  Saber el número de escalas que hay
  que hacer desde un aeropuerto para
  llegar a otro
5

Algoritmo Breadth-first search



    Pseudocódigo
    método breadth_first_search(grafo, origen)
           inicializar
           crear cola Q
           agregar origen a cola Q
           mientras Q no esté vacia:
                     sacar elemento v de la cola Q
                     marcar como visitado v
                     para cada nodo adyacente w a v en el grafo:
                              si w no ha sido visitado y no está en la cola:
                                       actualizar el contador de w (ahora es v+1)
                                       actualizar el predecesor de w (ahora es v)
                                       insertar w dentro de la cola Q:
6

Algoritmo Breadth-first search



    Ejemplo
                        VO                 V1




         V2                      V3             V4




                        V5            V6
7

Algoritmo Breadth-first search

                                                Paso 1
    Proceso
                        VO                 V1

Nodo inicial

    0    V2                      V3               V4




                        V5            V6
                                                 COLA DE PROCESO

                                                           V2
8

Algoritmo Breadth-first search

                                                Paso 2
    Proceso
               V2,1     VO                 V1




    0    V2                      V3               V4




               V2,1     V5            V6
                                                 COLA DE PROCESO

                                                  V5   V0   V2
9

Algoritmo Breadth-first search

                                                          Paso 3
    Proceso
                                        V0,2
               V2,1     VO                          V1

                                 V0,2

    0    V2                       V3                            V4




               V2,1     V5                     V6
                                                               COLA DE PROCESO

                                                     V3   V1    V5   V0   V2
10

Algoritmo Breadth-first search

                                                          Paso 4
    Proceso
                                        V0,2
               V2,1     VO                          V1

                                 V0,2

    0    V2                       V3                            V4




               V2,1     V5                     V6
                                                               COLA DE PROCESO

                                                     V3   V1    V5   V0   V2
11

Algoritmo Breadth-first search

                                                          Paso 5
    Proceso
                                        V0,2
               V2,1     VO                          V1

                                 V0,2                            V1,3

    0    V2                       V3                            V4




               V2,1     V5                     V6
                                                               COLA DE PROCESO

                                               V4    V3   V1    V5   V0   V2
12

Algoritmo Breadth-first search

                                                           Paso 6
    Proceso
                                        V0,2
               V2,1     VO                          V1

                                 V0,2                             V1,3

    0    V2                       V3                             V4



                                               V3,3

               V2,1     V5                     V6
                                                                COLA DE PROCESO

                                        V6     V4     V3   V1    V5   V0   V2
13

Algoritmo Breadth-first search

                                                           Paso 7
    Proceso
                                        V0,2
               V2,1     VO                          V1

                                 V0,2                             V1,3

    0    V2                       V3                             V4



                                               V3,3

               V2,1     V5                     V6
                                                                COLA DE PROCESO

                                        V6     V4     V3   V1    V5   V0   V2
14

Algoritmo Breadth-first search

                                                           Paso 8
    Proceso
                                        V0,2
               V2,1     VO                          V1

                                 V0,2                             V1,3

    0    V2                       V3                             V4



                                               V3,3

               V2,1     V5                     V6
                                                                COLA DE PROCESO

                                        V6     V4     V3   V1    V5   V0   V2
15

Algoritmo Breadth-first search
                                                     A
    Ejercicio 1
                                         B
 • Dada la siguiente
   organización de
   objetos, especificar el                       D
                                     H                       C
   orden en el que se
   han recorrido los                         K
                                                                 E
   objetos antes de
                                 J                       F
   llegar a encontrar el
   objeto M desde A                          L
                                                         G
                                                                 M
                                                 I
16



Algoritmo de Dijkstra
• Objetivo:
  Encontrar el camino mínimo desde un nodo inicial a todos los demás
  nodos de un grafo con pesos positivos

• Ejemplo de uso:
  Averiguar la ruta más corta entre dos
  poblaciones a través de una red de
  carreteras
17

Algoritmo de Dijkstra

     Pseudocódigo
 método dijkstra(grafo, origen)
        inicializar
        crear cola de prioridades Q ordenada de menor a mayor peso
        agregar origen a cola Q
        mientras Q no esté vacia:
                  sacar elemento v de la cola Q
                  marcar como visitado v
                  para cada nodo adyacente w a v en el grafo:
                            si (peso de w) > (peso de v + peso entre v y w):
                                      actualizar el peso de w (disminuye)
                                      actualizar el predecesor de w (ahora es v)
                                      si w no ha sido visitado:
                                               si w está en la cola Q:
                                                         actualizar prioridad de w
                                               y si w no está en la cola:
                                                         insertar w dentro de la cola Q:
18

Algoritmo de Dijkstra

                                                                       Paso 1
    Proceso                  Nodo inicial
                    0                       2
                        VO                                    V1

                4                     1          3                     10

                             2                           2
         V2                                 V3                              V4

                    5                                4             6
                                  8


                                            1
                        V5                               V6
                                                                        COLA DE PROCESO

                                                                                 V0,0
19

Algoritmo de Dijkstra

                                                                      Paso 2
    Proceso
                                                                  V0,2
                    0                    2
                        VO                                   V1

                4                    1          3                     10
                                         V0,1
                             2                          2
         V2                              V3                                V4

                    5                               4             6
                                 8


                                         1
                        V5                              V6
                                                                         COLA DE PROCESO

                                                                  V3,1     V1,2   V0,0
20

Algoritmo de Dijkstra

                                                                                     Paso 3
    Proceso
                                                                                 V0,2
                      0                           2
                          VO                                              V1

                4                      1                     3                        10
   V3,3                                           V0,1
                               2                                     2                            V3,3
          V2                                      V3                                       V4

                      5                                          4               6
                                   8


                                                  1                            V3,5
               V3,9       V5                                         V6
                                                                                       COLA DE PROCESO

                                           V4,3       V6,5   V5,9    V2,3       V3,1       V1,2    V0,0
21

Algoritmo de Dijkstra

                                                                                     Paso 4
    Proceso
                                                                                 V0,2
                      0                           2
                          VO                                              V1

                4                      1                     3                        10
   V3,3                                           V0,1
                               2                                     2                            V3,3
          V2                                      V3                                       V4

                      5                                          4               6
                                   8


                                                  1                            V3,5
               V3,9       V5                                         V6
                                                                                       COLA DE PROCESO

                                           V4,3       V6,5   V5,9    V2,3       V3,1       V1,2    V0,0
22

Algoritmo de Dijkstra

                                                                                     Paso 5
    Proceso
                                                                                 V0,2
                      0                           2
                          VO                                              V1

                4                      1                     3                        10
   V3,3                                           V0,1
                               2                                     2                            V3,3
          V2                                      V3                                       V4

                      5                                          4               6
                                   8


                                                  1                            V3,5
               V3,9       V5                                         V6
                                                                                       COLA DE PROCESO

                                           V4,3       V6,5   V5,9    V2,3       V3,1       V1,2    V0,0
23

Algoritmo de Dijkstra

                                                                                     Paso 6
    Proceso
                                                                                 V0,2
                      0                           2
                          VO                                              V1

                4                      1                     3                        10
   V3,3                                           V0,1
                               2                                     2                            V3,3
          V2                                      V3                                       V4

                      5                                          4               6
                                   8


                                                  1                            V3,5
               V2,8
               V3,9       V5                                         V6
                                                                                       COLA DE PROCESO

                                           V4,3       V6,5   V5,8
                                                             V5,9    V2,3       V3,1       V1,2    V0,0
24

Algoritmo de Dijkstra

                                                                                     Paso 7
    Proceso
                                                                                 V0,2
                                                                                 2
                      0                           2
                          VO                                              V1

                4                      1                     3                        10
   V3,3                                           V0,1
                               2                                     2                            V3,3
          V2                                      V3                                       V4

                      5                                          4               6
                                   8


                                                  1                            V3,5
               V6,6
               V2,8       V5                                         V6
                                                                                       COLA DE PROCESO

                                           V4,3       V6,5   V5,6
                                                             V5,8    V2,3       V3,1       V1,2    V0,0
25

Algoritmo de Dijkstra

                                                                                   Paso 8
    Proceso
                                                                               V0,2
                    0                           2
                        VO                                              V1

                4                    1                     3                        10
   V3,3                                         V0,1
                             2                                     2                            V3,3
          V2                                    V3                                       V4

                    5                                          4               6
                                 8


                                                1                            V3,5
               V6,6 8   V5                                         V6
                                                                                     COLA DE PROCESO

                                         V4,3       V6,5   V5,6    V2,3       V3,1       V1,2    V0,0
26

Algoritmo de Dijkstra


    Ejercicio 1
 • Desde la población S hay 18 kilómetros a la población A y 15 Km a
   la población C
 • Desde la población A hay 9 Km a la población B y 6 Km a la
   población C
 • Desde la población C hay 7 Km a la población D
 • Desde la población B hay 28 Km a la población T y 10 Km a la
   población D
 • Desde la población D hay 36 Km la población T

 • Calcula las rutas mínimas desde la población S al resto de
   poblaciones teniendo en cuenta que todas las carreteras tienen
   sentido de ida y vuelta
27

Algoritmo de Dijkstra


    Ejercicio 2
 • Dado el siguiente sistema, encontrar el camino mínimo desde A a
   todos los demás nodos

                                                        6
                                        B                               G
                        2

                                            2       4                        3
         A
                            6                                       5
                                                1                                H
                                        C                   E

                   4                                2           1
                                    3                                       10


                                                    1
                                D                                   F
28



Algoritmo de Bellman-Ford
• Objetivo:
  Encontrar el camino mínimo desde un nodo inicial a todos los demás
  nodos de un grafo con pesos positivos y negativos

• Ejemplo de uso:
  Protocolos de encaminamiento de
  información
29

Algoritmo de Bellman-Ford



    Pseudocódigo
 método bellman_ford(grafo, origen)
        inicializar
        crear cola Q
        agregar origen a cola Q
        mientras Q no esté vacia:
                  sacar elemento v de la cola Q
                  si hay bucle negativo
                            “bucle negativo”
                  y si no, para cada nodo adyacente w a v en el grafo:
                            si (peso de w) > (peso de v + peso entre v y w):
                                      actualizar el peso de w (disminuye)
                                      actualizar el predecesor de w (ahora es v)
                                      si w no está en la cola:
                                               insertar w dentro de la cola Q:
30

Algoritmo de Bellman-Ford

                                                              Paso 1
    Proceso
                                           V1
                         -1
  Nodo inicial                                           2

                                   3
    0                                           2
          VO
                                                                V4
                     4
                                                         -3

                                       1
                              V2                    V3


                                                               COLA DE PROCESO

                                                                         V0
31

Algoritmo de Bellman-Ford

                                                                   Paso 2
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                2

                                    3
    0                                                2
          VO
                                                                     V4
                     4
                                                              -3

                                        1
                               V2                        V3
                   V0,4

                                                                    COLA DE PROCESO

                                                                     V2   V1   V0
32

Algoritmo de Bellman-Ford

                                                                              Paso 3
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                       2

                                    3                                                    V1,1
    0                                                2
          VO
                                                                                    V4
                     4
                                                                     -3

                                        1
                               V2                        V3
                   V1,2
                   V0,4
                                                              V1,1
                                                                                   COLA DE PROCESO

                                                                         V4   V3    V2   V1     V0
33

Algoritmo de Bellman-Ford

                                                                              Paso 4
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                       2

                                    3                                                    V1,1
    0                                                2
          VO
                                                                                    V4
                     4
                                                                     -3

                                        1
                               V2                        V3
                   V1,2
                                                              V1,1
                                                                                   COLA DE PROCESO

                                                                         V4   V3    V2   V1     V0
34

Algoritmo de Bellman-Ford

                                                                              Paso 5
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                       2

                                    3                                                    V1,1
    0                                                2
          VO
                                                                                    V4
                     4
                                                                     -3

                                        1
                               V2                        V3
                   V1,2
                                                              V1,1
                                                                                   COLA DE PROCESO

                                                                         V4   V3    V2   V1     V0
35

Algoritmo de Bellman-Ford

                                                                               Paso 6
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                        2

                                    3                                                     V1,1
    0                                                2
          VO
                                                                                     V4
                     4
                                                                      -3

                                        1
                               V2                        V3
                   V1,2
                                                              V4,-2
                                                              V1,1
                                                                                    COLA DE PROCESO

                                                                 V3       V4   V3    V2   V1     V0
36

Algoritmo de Bellman-Ford

                                                                                 Paso 7
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                          2

                                    3                                                       V1,1
    0                                                2
          VO
                                                                                       V4
                     4
                                                                        -3

                                        1
                               V2                        V3
                  V3,-1
                   V1,2
                                                               V4,-2
                                                               V1,1
                                                                                      COLA DE PROCESO

                                                              V2   V3       V4   V3    V2   V1     V0
37

Algoritmo de Bellman-Ford

                                                                                 Paso 8
    Proceso                                  V0,-1

                                            V1
                          -1
  Nodo inicial                                                          2

                                    3                                                       V1,1
    0                                                2
          VO
                                                                                       V4
                     4
                                                                        -3

                                        1
                               V2                        V3
                  V3,-1
                   V1,2
                                                               V4,-2
                                                               V1,1
                                                                                      COLA DE PROCESO

                                                              V2   V3       V4   V3    V2   V1     V0
38

Algoritmo de Bellman-Ford


    Ejercicio 1
 • Dado el siguiente sistema basado en las penalizaciones que tiene
   un jugador en función de las acciones que realiza en un
   videojuego, encontrar las secuencias de acciones cuya
   penalización sea mínima desde el inicio del juego (nodo A)
                                           5
                            6       B      -2         E
              A
                                                -3
                            2       8

                        7
                                                          7
                                                 -4




                                          9
                                C                     D
39

Algoritmo de Bellman-Ford


    Ejercicio 2
 • En base a la tabla, calcular el camino mínimo desde V2 al resto de
   nodos:
                             V0   V1    V2   V3   V4   V5   V6
                        V0   0    4          2
                        V1        0          2
                        V2   2          0              3
                        V3              6    0    6    5    8
                        V4        -10             0         6
                        V5                             0
                        V6                             1    0
40



Algoritmo de Floyd-Warshall
• Objetivo:
  Encontrar el camino mínimo entre todos los pares de nodos de un
  grafo

• Ejemplo de uso:
  Averiguar la ruta más corta entre
  TODAS las poblaciones a través de
  una red de carreteras
41

Algoritmo de Floyd-Warshall



    Pseudocódigo
       método floyd-warshall(grafo)
              M[i, j] := ∞ ∀i != j
              M[i, j] := p(i, j) ∀(i, j) ∈ en el grafo
              M[i, i] := 0 ∀i

                 for k := 1 to n do
                            for i := 1 to n do
                                       for j := 1 to n do
                                                  si M[i, j] > M[i, k] + M[k, j]
                                                             M[i, j] = M[i, k] + M[k, j]
                 for i := 1 to n do
                            si M[i, i] < 0
                                       “bucle negativo”
42

Algoritmo de Floyd-Warshall

                                                                                   Paso 1
    Proceso
                                                                   Matriz de adyacencia W
                                                                      V1     V2      V3      V4      V5
                            V2
                   3                 4                        V1      0      3       8       INF -4
                                                              V2      INF 0          INF 1           7
                            8
         V1                               V3                  V3      INF 4          0       INF INF
                        7        1
                                                              V4      2      INF -5          0       INF
              -4                     -5
                            2                                 V5      INF INF INF 6                  0

                            6
                   V5                V4
                                                        0 si i=j
                                               W ij =   ∞ si los vértices i,j no son adyacentes
                                                        El peso de la arista si los vértices i,j si son adyacentes
43

Algoritmo de Floyd-Warshall

      Proceso                                                                              Paso 2
K=0
      D(k)ij   Wij si k=0                                              NIL si i=j o si Dij = INF
                                                             Pij
               min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0              i el resto



           Matriz de adyacencia D(0)                         Matriz de predecesores P(0)
               V1      V2       V3      V4      V5                 V1        V2       V3      V4   V5
          V1   0       3        8       INF -4              V1     NIL 1              1       NIL 1
          V2   INF 0            INF 1           7           V2     NIL NIL NIL 2                   2
          V3   INF 4            0       INF INF             V3     NIL 3              NIL NIL NIL
          V4   2       INF -5           0       INF         V4     4         NIL 4            NIL NIL
          V5   INF INF INF 6                    0           V5     NIL NIL NIL 5                   NIL
44

Algoritmo de Floyd-Warshall

      Proceso                                                                              Paso 3
K=1
      D(k)ij       Wij si k=0
                   min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0




 Matriz de adyacencia D(0)                              Matriz de adyacencia D(1)
      V1       V2      V3      V4      V5                   V1    V2   V3   V4   V5
                                                                                       Matriz de predecesores P(1)
 V1   0        3       8       INF -4               V1      0     3    8    INF -4          V1    V2    V3    V4    V5
                                                                                      V1    NIL   1     1     NIL   1
 V2   INF 0            INF 1           7            V2      INF 0
                                                                                      V2    NIL   NIL
                                                                                      V3    NIL         NIL
 V3   INF 4            0       INF INF              V3      INF        0
                                                                                      V4    4                 NIL

 V4   2        INF -5          0       INF          V4      2               0         V5    NIL                     NIL



 V5   INF INF INF 6                    0            V5      INF                  0
45

Algoritmo de Floyd-Warshall

      Proceso                                                                                     Paso 4
K=1                                                                   Para i = 2, j = 3:
      D(k)ij       Wij si k=0
                   min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0         D(k)23 = min(D(k-1)23, D(k-1)21 + D(k-1)13) =>
                                                                      D(1)23 = min(D(0)23, D(0)21 + D(0)13) =>
 Estamos mirando si hay algún camino para
                                                                      D(1)23 = min(D(0)23, D(0)21 + D(0)13) =>
 llegar D23 que pase por D21 y por D13 y que
 haga más corto al camino actual
                                                                      D(1)23 = min(INF, INF + 8) = INF

 Matriz de adyacencia D(0)                              Matriz de adyacencia D(1)
      V1       V2      V3      V4      V5                   V1    V2      V3    V4     V5
                                                                                              Matriz de predecesores P(1)
 V1   0        3       8       INF -4               V1      0     3       8     INF -4             V1    V2    V3    V4    V5
                                                                                             V1    NIL   1     1     NIL   1
 V2   INF 0            INF 1           7            V2      INF 0         INF
                                                                                             V2    NIL   NIL   NIL
                                                                                             V3    NIL         NIL
 V3   INF 4            0       INF INF              V3      INF           0
                                                                                             V4    4                 NIL

 V4   2        INF -5          0       INF          V4      2                   0            V5    NIL                     NIL



 V5   INF INF INF 6                    0            V5      INF                        0
46

Algoritmo de Floyd-Warshall

      Proceso                                                                                     Paso 5
K=1                                                                   Para i = 4, j = 2:
      D(k)ij       Wij si k=0
                   min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0         D(k)42 = min(D(k-1)42, D(k-1)41 + D(k-1)12) =>
                                                                      D(1)42 = min(D(0)42, D(0)41 + D(0)12) =>
 Estamos mirando si hay algún camino para
                                                                      D(1)42 = min(D(0)42, D(0)41 + D(0)12) =>
 llegar D42 que pase por D41 y por D12 y que
 haga más corto al camino actual
                                                                      D(1)42 = min(INF, 2 + 3) = 5

 Matriz de adyacencia D(0)                              Matriz de adyacencia D(1)
      V1       V2      V3      V4      V5                   V1    V2      V3    V4     V5
                                                                                              Matriz de predecesores P(1)
 V1   0        3       8       INF -4               V1      0     3       8     INF -4             V1    V2    V3    V4    V5
                                                                                             V1    NIL   1     1     NIL   1
 V2   INF 0            INF 1           7            V2      INF 0         INF 1        7
                                                                                             V2    NIL   NIL   NIL   2     2
                                                                                             V3    NIL   3     NIL   NIL   NIL
 V3   INF 4            0       INF INF              V3      INF 4         0     INF INF
                                                                                             V4    4     1           NIL

 V4   2        INF -5          0       INF          V4      2     5             0            V5    NIL                     NIL



 V5   INF INF INF 6                    0            V5      INF                        0          Cambios
47

Algoritmo de Floyd-Warshall

      Proceso                                             Paso 6
K=1



         Matriz de adyacencia D(1)         Matriz de predecesores P(1)
              V1   V2    V3   V4     V5        V1   V2   V3   V4    V5
         V1   0    3     8    INF -4      V1   NIL 1     1    NIL 1
         V2   INF 0      INF 1       7    V2   NIL NIL NIL 2        2
         V3   INF 4      0    INF INF     V3   NIL 3     NIL NIL NIL
         V4   2    5     -5   0      -2   V4   4    1    4    NIL 1
         V5   INF INF INF 6          0    V5   NIL NIL NIL 5        NIL
48

Algoritmo de Floyd-Warshall

      Proceso                                             Paso 7
K=2



         Matriz de adyacencia D(2)         Matriz de predecesores P(2)
              V1   V2    V3   V4     V5        V1   V2   V3   V4    V5
         V1   0    3     8    4      -4   V1   NIL 1     1    2     1
         V2   INF 0      INF 1       7    V2   NIL NIL NIL 2        2
         V3   INF 4      0    5      11   V3   NIL 3     NIL 2      2
         V4   2    5     -5   0      -2   V4   4    1    4    NIL 1
         V5   INF INF INF 6          0    V5   NIL NIL NIL 5        NIL
49

Algoritmo de Floyd-Warshall

    Proceso                                                                           Paso 8
      Matriz de adyacencia D(5)

          V1     V2        V3        V4        V5
                                                                             V2
     V1   0      1         -3        2         -4                   3                 4
     V2   3      0         -4        1         -1
     V3   7      4         0         5         3
                                                                             8
     V4   2      -1        -5        0         -2         V1                               V3
                                                                         7        1
     V5   8      5         1         6         0

                                                               -4                     -5
      Matriz de predecesores P(5)                                            2
           V1        V2        V3         V4        V5
     V1    NIL       3         4          5         1
                                                                             6
                                                                    V5                V4
     V2    4         NIL       4          2         1
     V3    4         3         NIL        2         1
     V4    4         3         4          NIL       1
     V5    4         3         4          5         NIL
50

Algoritmo de Floyd-Warshall

    ¿Camino y coste desde V3 a V5?
      Matriz de adyacencia D(5)

          V1     V2        V3        V4        V5
     V1   0      1         -3        2         -4
     V2   3      0         -4        1         -1
     V3   7      4         0         5         3
                                                                             V2
     V4   2      -1        -5        0         -2
                                                                    3                 4
     V5   8      5         1         6         0


      Matriz de predecesores P(5)                                            8
                                                          V1                               V3
           V1        V2        V3         V4        V5                   7        1
     V1    NIL       3         4          5         1
                                                               -4                     -5
     V2    4         NIL       4          2         1                        2
     V3    4         3         NIL        2         1
     V4    4         3         4          NIL       1                        6
                                                                    V5                V4
     V5    4         3         4          5         NIL
51

Algoritmo de Floyd-Warshall


    Ejercicio 1
 • Calcular la distancia mínima entre todos
 los pares de nodos
                             3
                  V1                 V2
                                              4


              6                  3   1            V5

                                          2
                         1
              V3                     V4
                         2
52

Algoritmo de Floyd-Warshall


    Ejercicio 2
 • Busca un ejemplo en el que al aplicar Floyd-Warshall aparezca
   un bucle infinito y aplica el algoritmo para visualizar la matriz de
   adyacencia y la matriz de predecesores


                    1
         V1                   V2

                    -3
                                   1
        1

                   1
        V4                    V3
53
54



Algoritmo de Prim
• Objetivo:
  Encontrar el árbol de recubrimiento mínimo en un grafo conexo, no
  dirigido

• Ejemplo de uso:                          Un grafo es conexo si cada par de
                                           vértices está conectado por un camino
  Trazar la mínima cantidad de cable
  posible para cubrir las necesidades
  de una nueva urbanización
55

Algoritmo de Prim

    Pseudocódigo
    método prim(grafo, origen)
           1- marcar un nodo dentro del grafo, el cual será el nodo de partida

             2- seleccionar la arista de menor valor que salga del nodo marcado

             3- marcar el nodo al que llega la arista seleccionada en el paso
                     previo

             4- repetir los pasos 2 y 3 de tal modo que se vayan obteniendo
                      aristas entre nodos marcados y otros que no lo están

             5- el algoritmo termina cuando están todos los nodos marcados
56

Algoritmo de Prim

                                               Paso 1
    Proceso
                7
    VO                           8
                        V1             V2

                9                7
   5                                       5


                        15
       V3                             V4
                    6        8
 Nodo inicial                              9
                        V5
                                 11
                                      V6
57

Algoritmo de Prim

                                                           Paso 2
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol   Opciones        Grafo
   5                                       5
                                               {V3}    {V3, V0} = 5    {V0, V1, V2,
                                                       {V3, V1} = 9    V4, V5, V6}
                                                       {V3, V4} = 15
                        15                             {V3, V5} = 6
       V3                             V4
                    6        8

                        V5                 9
                                 11
                                      V6
58

Algoritmo de Prim

                                                              Paso 3
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol      Opciones        Grafo
   5                                       5
                                               {V0, V3}   {V3, V1} = 9    {V1, V2, V4,
                                                          {V3, V4} = 15   V5, V6}
                                                          {V3, V5} = 6
                        15                                {V0, V1} = 7
       V3                             V4
                    6        8

                        V5                 9
                                 11
                                      V6
59

Algoritmo de Prim

                                                                  Paso 4
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol          Opciones        Grafo
   5                                       5
                                               {V0, V3, V5}   {V3, V1} = 9    {V1, V2, V4,
                                                              {V3, V4} = 15   V6}
                                                              {V0, V1} = 7
                        15                                    {V5, V4} = 8
       V3                             V4                      {V5, V6} = 11

                    6        8

                        V5                 9
                                 11
                                      V6
60

Algoritmo de Prim

                                                                  Paso 5
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol          Opciones        Grafo
   5                                       5
                                               {V0, V1, V3,   {V3, V1} = C    {V2, V4, V6}
                                               V5}            {V3, V4} = 15
                                                              {V5, V4} = 8
                        15                                    {V5, V6} = 11
       V3                             V4                      {V1, V2} = 8
                                                              {V1, V4} = 7
                    6        8

                        V5                 9
                                 11
                                      V6
61

Algoritmo de Prim

                                                                  Paso 6
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol          Opciones        Grafo
   5                                       5
                                               {V0, V1, V3,   {V3, V1} = C    {V2, V6}
                                               V4, V5}        {V3, V4} = C
                                                              {V5, V4} = C
                        15                                    {V5, V6} = 11
       V3                             V4                      {V1, V2} = 8
                                                              {V4, V2} = 5
                    6        8                                {V4, V6} = 9

                        V5                 9
                                 11
                                      V6
62

Algoritmo de Prim

                                                                  Paso 7
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol          Opciones        Grafo
   5                                       5
                                               {V0, V1, V2,   {V3, V1} = C    {V6}
                                               V3, V4, V5}    {V3, V4} = C
                                                              {V5, V4} = C
                        15                                    {V5, V6} = 11
       V3                             V4                      {V1, V2} = C
                                                              {V4, V6} = 9
                    6        8

                        V5                 9
                                 11
                                      V6
63

Algoritmo de Prim

                                                                  Paso 8
    Proceso
               7
    VO                           8
                        V1             V2

               9                 7             Árbol          Opciones       Grafo
   5                                       5
                                               {V0, V1, V2,   {V3, V1} = C   {}
                                               V3, V4, V5,    {V3, V4} = C
                                               V6}            {V5, V4} = C
                        15                                    {V5, V6} = C
       V3                             V4                      {V1, V2} = C

                    6        8

                        V5                 9
                                 11
                                      V6
64


Trabajo en equipo


 • Realizar trabajos en grupo para presentarlos y
   defenderlos en clase
 • El trabajo de grafos puede consistir en:
   ▫ Escoger un algoritmo y aplicarlo en un caso real
   ▫ Comparar dos o más algoritmos
 • Se entregará en formato Power Point en el campus
   virtual
65


Bibliografía
 • WEISS, Mark Allen; (2000) Data Estructures & Problem Solving Using Java.
   Addison Wesley. ISBN 03-2154-140-5.

 • JAIME SISA, Alberto; (2002) Estructuras de Datos y Algoritmos con énfasis en
   programación orientada a objetos. Pearson Educación. ISBN 958-699-044-3.

 • JOYANES AGUILAR, LUIS (2007) Estructuras de Datos en Java. McGraw Hill. ISBN:
   9788448156312.

 • STANDISH, Thomas A (1998). Data structures in Java. Addison Wesley ISBN 0-201-
   30564-X.

 • WEISS, Mark Allen; (2000) Estructuras de Datos en Java. Addison Wesley. ISBN 84-
   7829-035-4.

 • WIRTH, Niklaus (1992). Algoritmos + Estructuras de Datos = Programas. Prentice-
   Hall. ISBN: 84-219-0172-9.

Más contenido relacionado

La actualidad más candente

Ordenamiento en C++
Ordenamiento en C++Ordenamiento en C++
Ordenamiento en C++compumet sac
 
Red Neuronal Difusa
Red Neuronal DifusaRed Neuronal Difusa
Red Neuronal DifusaESCOM
 
S1 Espacios Vectoriales y Transformaciones Lineales
S1 Espacios Vectoriales y Transformaciones LinealesS1 Espacios Vectoriales y Transformaciones Lineales
S1 Espacios Vectoriales y Transformaciones LinealesNeil Sulca Taipe
 
Espacio Columna, Espacio Renglón y Rango de una matriz
Espacio Columna, Espacio Renglón y Rango de una matrizEspacio Columna, Espacio Renglón y Rango de una matriz
Espacio Columna, Espacio Renglón y Rango de una matrizMagdalena González
 
Concurrencia interbloqueo e inanición
Concurrencia interbloqueo e inaniciónConcurrencia interbloqueo e inanición
Concurrencia interbloqueo e inaniciónjhonfgarcia
 
Busqueda secuencial
Busqueda secuencialBusqueda secuencial
Busqueda secuencialAngy Yanezz
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCristopher Morales Ruiz
 
Backtracking (Método de Vuelta Atrás)
Backtracking (Método de Vuelta Atrás)Backtracking (Método de Vuelta Atrás)
Backtracking (Método de Vuelta Atrás)jessenmanuel
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoJosé Antonio Sandoval Acosta
 
Estructura de Datos - Unidad III Estructuras Lineales
Estructura de Datos - Unidad III Estructuras LinealesEstructura de Datos - Unidad III Estructuras Lineales
Estructura de Datos - Unidad III Estructuras LinealesJosé Antonio Sandoval Acosta
 

La actualidad más candente (20)

Ordenamiento en C++
Ordenamiento en C++Ordenamiento en C++
Ordenamiento en C++
 
Recursividad
RecursividadRecursividad
Recursividad
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
Red Neuronal Difusa
Red Neuronal DifusaRed Neuronal Difusa
Red Neuronal Difusa
 
S1 Espacios Vectoriales y Transformaciones Lineales
S1 Espacios Vectoriales y Transformaciones LinealesS1 Espacios Vectoriales y Transformaciones Lineales
S1 Espacios Vectoriales y Transformaciones Lineales
 
Espacio Columna, Espacio Renglón y Rango de una matriz
Espacio Columna, Espacio Renglón y Rango de una matrizEspacio Columna, Espacio Renglón y Rango de una matriz
Espacio Columna, Espacio Renglón y Rango de una matriz
 
Concurrencia interbloqueo e inanición
Concurrencia interbloqueo e inaniciónConcurrencia interbloqueo e inanición
Concurrencia interbloqueo e inanición
 
Tipos de datos abstractos
Tipos de datos abstractosTipos de datos abstractos
Tipos de datos abstractos
 
Busqueda secuencial
Busqueda secuencialBusqueda secuencial
Busqueda secuencial
 
Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busqueda
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Grafos
GrafosGrafos
Grafos
 
Colas
ColasColas
Colas
 
Listas
ListasListas
Listas
 
Backtracking (Método de Vuelta Atrás)
Backtracking (Método de Vuelta Atrás)Backtracking (Método de Vuelta Atrás)
Backtracking (Método de Vuelta Atrás)
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Estructura de Datos - Unidad III Estructuras Lineales
Estructura de Datos - Unidad III Estructuras LinealesEstructura de Datos - Unidad III Estructuras Lineales
Estructura de Datos - Unidad III Estructuras Lineales
 
Ejemplos acid
Ejemplos acidEjemplos acid
Ejemplos acid
 

Destacado

Fundamentos de Corriente Alterna Monofásica
Fundamentos de Corriente Alterna MonofásicaFundamentos de Corriente Alterna Monofásica
Fundamentos de Corriente Alterna MonofásicaMario Fagúndez Silva
 
Conserving crop diversity forever
Conserving crop diversity foreverConserving crop diversity forever
Conserving crop diversity foreverCIAT
 
Sistemas monofasicos
Sistemas monofasicos Sistemas monofasicos
Sistemas monofasicos Omar Gabaldon
 
Elaboración de una tesis, las variables
Elaboración de una tesis, las variablesElaboración de una tesis, las variables
Elaboración de una tesis, las variablesjuanchojuancho
 
Smart Cities – how to master the world's biggest growth challenge
Smart Cities – how to master the world's biggest growth challengeSmart Cities – how to master the world's biggest growth challenge
Smart Cities – how to master the world's biggest growth challengeBoston Consulting Group
 
The Career Guide to Green Jobs
The Career Guide to Green JobsThe Career Guide to Green Jobs
The Career Guide to Green JobsKelly Services
 
Fundamentos de electricidad milton gussow (espanhol)
Fundamentos de electricidad   milton gussow (espanhol)Fundamentos de electricidad   milton gussow (espanhol)
Fundamentos de electricidad milton gussow (espanhol)David Morales
 
El espacio en arquitectura
El espacio en arquitecturaEl espacio en arquitectura
El espacio en arquitecturaCrisstian Cm
 
ESTUDIO DE IMPACTO AMBIENTAL
ESTUDIO DE IMPACTO AMBIENTALESTUDIO DE IMPACTO AMBIENTAL
ESTUDIO DE IMPACTO AMBIENTALguest9129bc
 
Las hipotesis y las variables
Las hipotesis y las variablesLas hipotesis y las variables
Las hipotesis y las variablesWerner Granados
 
Tipos de hipótesis,tipos de variables,marco de referencia
Tipos de hipótesis,tipos de variables,marco de referenciaTipos de hipótesis,tipos de variables,marco de referencia
Tipos de hipótesis,tipos de variables,marco de referenciagloria_garciae
 
Evaluacion de impacto ambiental
Evaluacion de impacto ambientalEvaluacion de impacto ambiental
Evaluacion de impacto ambientaljcarlitos1
 

Destacado (19)

Fundamentos de Corriente Alterna Monofásica
Fundamentos de Corriente Alterna MonofásicaFundamentos de Corriente Alterna Monofásica
Fundamentos de Corriente Alterna Monofásica
 
Programa 1er Encuentro de Diseño Urbano
Programa 1er Encuentro de Diseño UrbanoPrograma 1er Encuentro de Diseño Urbano
Programa 1er Encuentro de Diseño Urbano
 
Conserving crop diversity forever
Conserving crop diversity foreverConserving crop diversity forever
Conserving crop diversity forever
 
Sistemas monofasicos
Sistemas monofasicos Sistemas monofasicos
Sistemas monofasicos
 
Elaboración de una tesis, las variables
Elaboración de una tesis, las variablesElaboración de una tesis, las variables
Elaboración de una tesis, las variables
 
Smart Cities – how to master the world's biggest growth challenge
Smart Cities – how to master the world's biggest growth challengeSmart Cities – how to master the world's biggest growth challenge
Smart Cities – how to master the world's biggest growth challenge
 
The Career Guide to Green Jobs
The Career Guide to Green JobsThe Career Guide to Green Jobs
The Career Guide to Green Jobs
 
Fundamentos de electricidad milton gussow (espanhol)
Fundamentos de electricidad   milton gussow (espanhol)Fundamentos de electricidad   milton gussow (espanhol)
Fundamentos de electricidad milton gussow (espanhol)
 
El espacio en arquitectura
El espacio en arquitecturaEl espacio en arquitectura
El espacio en arquitectura
 
ESTUDIO DE IMPACTO AMBIENTAL
ESTUDIO DE IMPACTO AMBIENTALESTUDIO DE IMPACTO AMBIENTAL
ESTUDIO DE IMPACTO AMBIENTAL
 
Identificación de Variables - Tema 5
Identificación de Variables - Tema 5Identificación de Variables - Tema 5
Identificación de Variables - Tema 5
 
Las hipotesis y las variables
Las hipotesis y las variablesLas hipotesis y las variables
Las hipotesis y las variables
 
El poblamiento de América
El poblamiento de AméricaEl poblamiento de América
El poblamiento de América
 
FormulacióN De HipóTesis
FormulacióN De HipóTesisFormulacióN De HipóTesis
FormulacióN De HipóTesis
 
Tipos de hipótesis,tipos de variables,marco de referencia
Tipos de hipótesis,tipos de variables,marco de referenciaTipos de hipótesis,tipos de variables,marco de referencia
Tipos de hipótesis,tipos de variables,marco de referencia
 
Smart city
Smart citySmart city
Smart city
 
Sustainable transport - will it ever really count?
Sustainable transport - will it ever really count?Sustainable transport - will it ever really count?
Sustainable transport - will it ever really count?
 
Evaluacion de impacto ambiental
Evaluacion de impacto ambientalEvaluacion de impacto ambiental
Evaluacion de impacto ambiental
 
El Deconstructivismo en Arquitectura
El Deconstructivismo en ArquitecturaEl Deconstructivismo en Arquitectura
El Deconstructivismo en Arquitectura
 

Más de Vicente García Díaz (16)

Creating a textual domain specific language
Creating a textual domain specific languageCreating a textual domain specific language
Creating a textual domain specific language
 
Introduction to architectures based on models, models and metamodels. model d...
Introduction to architectures based on models, models and metamodels. model d...Introduction to architectures based on models, models and metamodels. model d...
Introduction to architectures based on models, models and metamodels. model d...
 
jBPM
jBPMjBPM
jBPM
 
Wikitude. KML y ARML
Wikitude. KML y ARMLWikitude. KML y ARML
Wikitude. KML y ARML
 
Wikitude. ARchiect
Wikitude. ARchiectWikitude. ARchiect
Wikitude. ARchiect
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Introducción a la ingeniería dirigida por modelos
Introducción a la ingeniería dirigida por modelosIntroducción a la ingeniería dirigida por modelos
Introducción a la ingeniería dirigida por modelos
 
Iniciación a OpenGL
Iniciación a OpenGLIniciación a OpenGL
Iniciación a OpenGL
 
Iniciación a la realidad aumentada
Iniciación a la realidad aumentadaIniciación a la realidad aumentada
Iniciación a la realidad aumentada
 
Iniciación a ARToolKit
Iniciación a ARToolKitIniciación a ARToolKit
Iniciación a ARToolKit
 
Desarrollo robótico - Robot Operating System (ROS)
Desarrollo robótico - Robot Operating System (ROS)Desarrollo robótico - Robot Operating System (ROS)
Desarrollo robótico - Robot Operating System (ROS)
 
Wikitude. Servicios Seb
Wikitude. Servicios SebWikitude. Servicios Seb
Wikitude. Servicios Seb
 
LaTeX
LaTeXLaTeX
LaTeX
 
Automatización y Microsoft Word
Automatización y Microsoft WordAutomatización y Microsoft Word
Automatización y Microsoft Word
 
Árboles
ÁrbolesÁrboles
Árboles
 
Dispersión y tablas hash
Dispersión y tablas hashDispersión y tablas hash
Dispersión y tablas hash
 

Grafos

  • 1. Grafos Estructuras de Datos Vicente García Díaz – garciavicente@uniovi.es Universidad de Oviedo, 2011
  • 2. 2 Tabla de contenidos 1. Algoritmos de búsqueda del camino mínimo 1. Algoritmo Breadth first search 2. Algoritmo de Dijkstra 3. Algoritmo de Bellman-Ford 4. Algoritmo de Floyd-Warshall 2. Algoritmos de búsqueda del árbol de recubrimiento mínimo 1. Algoritmo de Prim 3. Trabajo en equipo 4. Bibliografía
  • 3. 3
  • 4. 4 Algoritmo Breadth-first search • Objetivo: Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo sin tener en cuenta los pesos de los nodos • Ejemplo de uso: Saber el número de escalas que hay que hacer desde un aeropuerto para llegar a otro
  • 5. 5 Algoritmo Breadth-first search Pseudocódigo método breadth_first_search(grafo, origen) inicializar crear cola Q agregar origen a cola Q mientras Q no esté vacia: sacar elemento v de la cola Q marcar como visitado v para cada nodo adyacente w a v en el grafo: si w no ha sido visitado y no está en la cola: actualizar el contador de w (ahora es v+1) actualizar el predecesor de w (ahora es v) insertar w dentro de la cola Q:
  • 6. 6 Algoritmo Breadth-first search Ejemplo VO V1 V2 V3 V4 V5 V6
  • 7. 7 Algoritmo Breadth-first search Paso 1 Proceso VO V1 Nodo inicial 0 V2 V3 V4 V5 V6 COLA DE PROCESO V2
  • 8. 8 Algoritmo Breadth-first search Paso 2 Proceso V2,1 VO V1 0 V2 V3 V4 V2,1 V5 V6 COLA DE PROCESO V5 V0 V2
  • 9. 9 Algoritmo Breadth-first search Paso 3 Proceso V0,2 V2,1 VO V1 V0,2 0 V2 V3 V4 V2,1 V5 V6 COLA DE PROCESO V3 V1 V5 V0 V2
  • 10. 10 Algoritmo Breadth-first search Paso 4 Proceso V0,2 V2,1 VO V1 V0,2 0 V2 V3 V4 V2,1 V5 V6 COLA DE PROCESO V3 V1 V5 V0 V2
  • 11. 11 Algoritmo Breadth-first search Paso 5 Proceso V0,2 V2,1 VO V1 V0,2 V1,3 0 V2 V3 V4 V2,1 V5 V6 COLA DE PROCESO V4 V3 V1 V5 V0 V2
  • 12. 12 Algoritmo Breadth-first search Paso 6 Proceso V0,2 V2,1 VO V1 V0,2 V1,3 0 V2 V3 V4 V3,3 V2,1 V5 V6 COLA DE PROCESO V6 V4 V3 V1 V5 V0 V2
  • 13. 13 Algoritmo Breadth-first search Paso 7 Proceso V0,2 V2,1 VO V1 V0,2 V1,3 0 V2 V3 V4 V3,3 V2,1 V5 V6 COLA DE PROCESO V6 V4 V3 V1 V5 V0 V2
  • 14. 14 Algoritmo Breadth-first search Paso 8 Proceso V0,2 V2,1 VO V1 V0,2 V1,3 0 V2 V3 V4 V3,3 V2,1 V5 V6 COLA DE PROCESO V6 V4 V3 V1 V5 V0 V2
  • 15. 15 Algoritmo Breadth-first search A Ejercicio 1 B • Dada la siguiente organización de objetos, especificar el D H C orden en el que se han recorrido los K E objetos antes de J F llegar a encontrar el objeto M desde A L G M I
  • 16. 16 Algoritmo de Dijkstra • Objetivo: Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo con pesos positivos • Ejemplo de uso: Averiguar la ruta más corta entre dos poblaciones a través de una red de carreteras
  • 17. 17 Algoritmo de Dijkstra Pseudocódigo método dijkstra(grafo, origen) inicializar crear cola de prioridades Q ordenada de menor a mayor peso agregar origen a cola Q mientras Q no esté vacia: sacar elemento v de la cola Q marcar como visitado v para cada nodo adyacente w a v en el grafo: si (peso de w) > (peso de v + peso entre v y w): actualizar el peso de w (disminuye) actualizar el predecesor de w (ahora es v) si w no ha sido visitado: si w está en la cola Q: actualizar prioridad de w y si w no está en la cola: insertar w dentro de la cola Q:
  • 18. 18 Algoritmo de Dijkstra Paso 1 Proceso Nodo inicial 0 2 VO V1 4 1 3 10 2 2 V2 V3 V4 5 4 6 8 1 V5 V6 COLA DE PROCESO V0,0
  • 19. 19 Algoritmo de Dijkstra Paso 2 Proceso V0,2 0 2 VO V1 4 1 3 10 V0,1 2 2 V2 V3 V4 5 4 6 8 1 V5 V6 COLA DE PROCESO V3,1 V1,2 V0,0
  • 20. 20 Algoritmo de Dijkstra Paso 3 Proceso V0,2 0 2 VO V1 4 1 3 10 V3,3 V0,1 2 2 V3,3 V2 V3 V4 5 4 6 8 1 V3,5 V3,9 V5 V6 COLA DE PROCESO V4,3 V6,5 V5,9 V2,3 V3,1 V1,2 V0,0
  • 21. 21 Algoritmo de Dijkstra Paso 4 Proceso V0,2 0 2 VO V1 4 1 3 10 V3,3 V0,1 2 2 V3,3 V2 V3 V4 5 4 6 8 1 V3,5 V3,9 V5 V6 COLA DE PROCESO V4,3 V6,5 V5,9 V2,3 V3,1 V1,2 V0,0
  • 22. 22 Algoritmo de Dijkstra Paso 5 Proceso V0,2 0 2 VO V1 4 1 3 10 V3,3 V0,1 2 2 V3,3 V2 V3 V4 5 4 6 8 1 V3,5 V3,9 V5 V6 COLA DE PROCESO V4,3 V6,5 V5,9 V2,3 V3,1 V1,2 V0,0
  • 23. 23 Algoritmo de Dijkstra Paso 6 Proceso V0,2 0 2 VO V1 4 1 3 10 V3,3 V0,1 2 2 V3,3 V2 V3 V4 5 4 6 8 1 V3,5 V2,8 V3,9 V5 V6 COLA DE PROCESO V4,3 V6,5 V5,8 V5,9 V2,3 V3,1 V1,2 V0,0
  • 24. 24 Algoritmo de Dijkstra Paso 7 Proceso V0,2 2 0 2 VO V1 4 1 3 10 V3,3 V0,1 2 2 V3,3 V2 V3 V4 5 4 6 8 1 V3,5 V6,6 V2,8 V5 V6 COLA DE PROCESO V4,3 V6,5 V5,6 V5,8 V2,3 V3,1 V1,2 V0,0
  • 25. 25 Algoritmo de Dijkstra Paso 8 Proceso V0,2 0 2 VO V1 4 1 3 10 V3,3 V0,1 2 2 V3,3 V2 V3 V4 5 4 6 8 1 V3,5 V6,6 8 V5 V6 COLA DE PROCESO V4,3 V6,5 V5,6 V2,3 V3,1 V1,2 V0,0
  • 26. 26 Algoritmo de Dijkstra Ejercicio 1 • Desde la población S hay 18 kilómetros a la población A y 15 Km a la población C • Desde la población A hay 9 Km a la población B y 6 Km a la población C • Desde la población C hay 7 Km a la población D • Desde la población B hay 28 Km a la población T y 10 Km a la población D • Desde la población D hay 36 Km la población T • Calcula las rutas mínimas desde la población S al resto de poblaciones teniendo en cuenta que todas las carreteras tienen sentido de ida y vuelta
  • 27. 27 Algoritmo de Dijkstra Ejercicio 2 • Dado el siguiente sistema, encontrar el camino mínimo desde A a todos los demás nodos 6 B G 2 2 4 3 A 6 5 1 H C E 4 2 1 3 10 1 D F
  • 28. 28 Algoritmo de Bellman-Ford • Objetivo: Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo con pesos positivos y negativos • Ejemplo de uso: Protocolos de encaminamiento de información
  • 29. 29 Algoritmo de Bellman-Ford Pseudocódigo método bellman_ford(grafo, origen) inicializar crear cola Q agregar origen a cola Q mientras Q no esté vacia: sacar elemento v de la cola Q si hay bucle negativo “bucle negativo” y si no, para cada nodo adyacente w a v en el grafo: si (peso de w) > (peso de v + peso entre v y w): actualizar el peso de w (disminuye) actualizar el predecesor de w (ahora es v) si w no está en la cola: insertar w dentro de la cola Q:
  • 30. 30 Algoritmo de Bellman-Ford Paso 1 Proceso V1 -1 Nodo inicial 2 3 0 2 VO V4 4 -3 1 V2 V3 COLA DE PROCESO V0
  • 31. 31 Algoritmo de Bellman-Ford Paso 2 Proceso V0,-1 V1 -1 Nodo inicial 2 3 0 2 VO V4 4 -3 1 V2 V3 V0,4 COLA DE PROCESO V2 V1 V0
  • 32. 32 Algoritmo de Bellman-Ford Paso 3 Proceso V0,-1 V1 -1 Nodo inicial 2 3 V1,1 0 2 VO V4 4 -3 1 V2 V3 V1,2 V0,4 V1,1 COLA DE PROCESO V4 V3 V2 V1 V0
  • 33. 33 Algoritmo de Bellman-Ford Paso 4 Proceso V0,-1 V1 -1 Nodo inicial 2 3 V1,1 0 2 VO V4 4 -3 1 V2 V3 V1,2 V1,1 COLA DE PROCESO V4 V3 V2 V1 V0
  • 34. 34 Algoritmo de Bellman-Ford Paso 5 Proceso V0,-1 V1 -1 Nodo inicial 2 3 V1,1 0 2 VO V4 4 -3 1 V2 V3 V1,2 V1,1 COLA DE PROCESO V4 V3 V2 V1 V0
  • 35. 35 Algoritmo de Bellman-Ford Paso 6 Proceso V0,-1 V1 -1 Nodo inicial 2 3 V1,1 0 2 VO V4 4 -3 1 V2 V3 V1,2 V4,-2 V1,1 COLA DE PROCESO V3 V4 V3 V2 V1 V0
  • 36. 36 Algoritmo de Bellman-Ford Paso 7 Proceso V0,-1 V1 -1 Nodo inicial 2 3 V1,1 0 2 VO V4 4 -3 1 V2 V3 V3,-1 V1,2 V4,-2 V1,1 COLA DE PROCESO V2 V3 V4 V3 V2 V1 V0
  • 37. 37 Algoritmo de Bellman-Ford Paso 8 Proceso V0,-1 V1 -1 Nodo inicial 2 3 V1,1 0 2 VO V4 4 -3 1 V2 V3 V3,-1 V1,2 V4,-2 V1,1 COLA DE PROCESO V2 V3 V4 V3 V2 V1 V0
  • 38. 38 Algoritmo de Bellman-Ford Ejercicio 1 • Dado el siguiente sistema basado en las penalizaciones que tiene un jugador en función de las acciones que realiza en un videojuego, encontrar las secuencias de acciones cuya penalización sea mínima desde el inicio del juego (nodo A) 5 6 B -2 E A -3 2 8 7 7 -4 9 C D
  • 39. 39 Algoritmo de Bellman-Ford Ejercicio 2 • En base a la tabla, calcular el camino mínimo desde V2 al resto de nodos: V0 V1 V2 V3 V4 V5 V6 V0 0 4 2 V1 0 2 V2 2 0 3 V3 6 0 6 5 8 V4 -10 0 6 V5 0 V6 1 0
  • 40. 40 Algoritmo de Floyd-Warshall • Objetivo: Encontrar el camino mínimo entre todos los pares de nodos de un grafo • Ejemplo de uso: Averiguar la ruta más corta entre TODAS las poblaciones a través de una red de carreteras
  • 41. 41 Algoritmo de Floyd-Warshall Pseudocódigo método floyd-warshall(grafo) M[i, j] := ∞ ∀i != j M[i, j] := p(i, j) ∀(i, j) ∈ en el grafo M[i, i] := 0 ∀i for k := 1 to n do for i := 1 to n do for j := 1 to n do si M[i, j] > M[i, k] + M[k, j] M[i, j] = M[i, k] + M[k, j] for i := 1 to n do si M[i, i] < 0 “bucle negativo”
  • 42. 42 Algoritmo de Floyd-Warshall Paso 1 Proceso Matriz de adyacencia W V1 V2 V3 V4 V5 V2 3 4 V1 0 3 8 INF -4 V2 INF 0 INF 1 7 8 V1 V3 V3 INF 4 0 INF INF 7 1 V4 2 INF -5 0 INF -4 -5 2 V5 INF INF INF 6 0 6 V5 V4 0 si i=j W ij = ∞ si los vértices i,j no son adyacentes El peso de la arista si los vértices i,j si son adyacentes
  • 43. 43 Algoritmo de Floyd-Warshall Proceso Paso 2 K=0 D(k)ij Wij si k=0 NIL si i=j o si Dij = INF Pij min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 i el resto Matriz de adyacencia D(0) Matriz de predecesores P(0) V1 V2 V3 V4 V5 V1 V2 V3 V4 V5 V1 0 3 8 INF -4 V1 NIL 1 1 NIL 1 V2 INF 0 INF 1 7 V2 NIL NIL NIL 2 2 V3 INF 4 0 INF INF V3 NIL 3 NIL NIL NIL V4 2 INF -5 0 INF V4 4 NIL 4 NIL NIL V5 INF INF INF 6 0 V5 NIL NIL NIL 5 NIL
  • 44. 44 Algoritmo de Floyd-Warshall Proceso Paso 3 K=1 D(k)ij Wij si k=0 min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 Matriz de adyacencia D(0) Matriz de adyacencia D(1) V1 V2 V3 V4 V5 V1 V2 V3 V4 V5 Matriz de predecesores P(1) V1 0 3 8 INF -4 V1 0 3 8 INF -4 V1 V2 V3 V4 V5 V1 NIL 1 1 NIL 1 V2 INF 0 INF 1 7 V2 INF 0 V2 NIL NIL V3 NIL NIL V3 INF 4 0 INF INF V3 INF 0 V4 4 NIL V4 2 INF -5 0 INF V4 2 0 V5 NIL NIL V5 INF INF INF 6 0 V5 INF 0
  • 45. 45 Algoritmo de Floyd-Warshall Proceso Paso 4 K=1 Para i = 2, j = 3: D(k)ij Wij si k=0 min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 D(k)23 = min(D(k-1)23, D(k-1)21 + D(k-1)13) => D(1)23 = min(D(0)23, D(0)21 + D(0)13) => Estamos mirando si hay algún camino para D(1)23 = min(D(0)23, D(0)21 + D(0)13) => llegar D23 que pase por D21 y por D13 y que haga más corto al camino actual D(1)23 = min(INF, INF + 8) = INF Matriz de adyacencia D(0) Matriz de adyacencia D(1) V1 V2 V3 V4 V5 V1 V2 V3 V4 V5 Matriz de predecesores P(1) V1 0 3 8 INF -4 V1 0 3 8 INF -4 V1 V2 V3 V4 V5 V1 NIL 1 1 NIL 1 V2 INF 0 INF 1 7 V2 INF 0 INF V2 NIL NIL NIL V3 NIL NIL V3 INF 4 0 INF INF V3 INF 0 V4 4 NIL V4 2 INF -5 0 INF V4 2 0 V5 NIL NIL V5 INF INF INF 6 0 V5 INF 0
  • 46. 46 Algoritmo de Floyd-Warshall Proceso Paso 5 K=1 Para i = 4, j = 2: D(k)ij Wij si k=0 min(D(k-1)ij, D(k-1)ik+ D(k-1)kj) si k > 0 D(k)42 = min(D(k-1)42, D(k-1)41 + D(k-1)12) => D(1)42 = min(D(0)42, D(0)41 + D(0)12) => Estamos mirando si hay algún camino para D(1)42 = min(D(0)42, D(0)41 + D(0)12) => llegar D42 que pase por D41 y por D12 y que haga más corto al camino actual D(1)42 = min(INF, 2 + 3) = 5 Matriz de adyacencia D(0) Matriz de adyacencia D(1) V1 V2 V3 V4 V5 V1 V2 V3 V4 V5 Matriz de predecesores P(1) V1 0 3 8 INF -4 V1 0 3 8 INF -4 V1 V2 V3 V4 V5 V1 NIL 1 1 NIL 1 V2 INF 0 INF 1 7 V2 INF 0 INF 1 7 V2 NIL NIL NIL 2 2 V3 NIL 3 NIL NIL NIL V3 INF 4 0 INF INF V3 INF 4 0 INF INF V4 4 1 NIL V4 2 INF -5 0 INF V4 2 5 0 V5 NIL NIL V5 INF INF INF 6 0 V5 INF 0 Cambios
  • 47. 47 Algoritmo de Floyd-Warshall Proceso Paso 6 K=1 Matriz de adyacencia D(1) Matriz de predecesores P(1) V1 V2 V3 V4 V5 V1 V2 V3 V4 V5 V1 0 3 8 INF -4 V1 NIL 1 1 NIL 1 V2 INF 0 INF 1 7 V2 NIL NIL NIL 2 2 V3 INF 4 0 INF INF V3 NIL 3 NIL NIL NIL V4 2 5 -5 0 -2 V4 4 1 4 NIL 1 V5 INF INF INF 6 0 V5 NIL NIL NIL 5 NIL
  • 48. 48 Algoritmo de Floyd-Warshall Proceso Paso 7 K=2 Matriz de adyacencia D(2) Matriz de predecesores P(2) V1 V2 V3 V4 V5 V1 V2 V3 V4 V5 V1 0 3 8 4 -4 V1 NIL 1 1 2 1 V2 INF 0 INF 1 7 V2 NIL NIL NIL 2 2 V3 INF 4 0 5 11 V3 NIL 3 NIL 2 2 V4 2 5 -5 0 -2 V4 4 1 4 NIL 1 V5 INF INF INF 6 0 V5 NIL NIL NIL 5 NIL
  • 49. 49 Algoritmo de Floyd-Warshall Proceso Paso 8 Matriz de adyacencia D(5) V1 V2 V3 V4 V5 V2 V1 0 1 -3 2 -4 3 4 V2 3 0 -4 1 -1 V3 7 4 0 5 3 8 V4 2 -1 -5 0 -2 V1 V3 7 1 V5 8 5 1 6 0 -4 -5 Matriz de predecesores P(5) 2 V1 V2 V3 V4 V5 V1 NIL 3 4 5 1 6 V5 V4 V2 4 NIL 4 2 1 V3 4 3 NIL 2 1 V4 4 3 4 NIL 1 V5 4 3 4 5 NIL
  • 50. 50 Algoritmo de Floyd-Warshall ¿Camino y coste desde V3 a V5? Matriz de adyacencia D(5) V1 V2 V3 V4 V5 V1 0 1 -3 2 -4 V2 3 0 -4 1 -1 V3 7 4 0 5 3 V2 V4 2 -1 -5 0 -2 3 4 V5 8 5 1 6 0 Matriz de predecesores P(5) 8 V1 V3 V1 V2 V3 V4 V5 7 1 V1 NIL 3 4 5 1 -4 -5 V2 4 NIL 4 2 1 2 V3 4 3 NIL 2 1 V4 4 3 4 NIL 1 6 V5 V4 V5 4 3 4 5 NIL
  • 51. 51 Algoritmo de Floyd-Warshall Ejercicio 1 • Calcular la distancia mínima entre todos los pares de nodos 3 V1 V2 4 6 3 1 V5 2 1 V3 V4 2
  • 52. 52 Algoritmo de Floyd-Warshall Ejercicio 2 • Busca un ejemplo en el que al aplicar Floyd-Warshall aparezca un bucle infinito y aplica el algoritmo para visualizar la matriz de adyacencia y la matriz de predecesores 1 V1 V2 -3 1 1 1 V4 V3
  • 53. 53
  • 54. 54 Algoritmo de Prim • Objetivo: Encontrar el árbol de recubrimiento mínimo en un grafo conexo, no dirigido • Ejemplo de uso: Un grafo es conexo si cada par de vértices está conectado por un camino Trazar la mínima cantidad de cable posible para cubrir las necesidades de una nueva urbanización
  • 55. 55 Algoritmo de Prim Pseudocódigo método prim(grafo, origen) 1- marcar un nodo dentro del grafo, el cual será el nodo de partida 2- seleccionar la arista de menor valor que salga del nodo marcado 3- marcar el nodo al que llega la arista seleccionada en el paso previo 4- repetir los pasos 2 y 3 de tal modo que se vayan obteniendo aristas entre nodos marcados y otros que no lo están 5- el algoritmo termina cuando están todos los nodos marcados
  • 56. 56 Algoritmo de Prim Paso 1 Proceso 7 VO 8 V1 V2 9 7 5 5 15 V3 V4 6 8 Nodo inicial 9 V5 11 V6
  • 57. 57 Algoritmo de Prim Paso 2 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V3} {V3, V0} = 5 {V0, V1, V2, {V3, V1} = 9 V4, V5, V6} {V3, V4} = 15 15 {V3, V5} = 6 V3 V4 6 8 V5 9 11 V6
  • 58. 58 Algoritmo de Prim Paso 3 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V0, V3} {V3, V1} = 9 {V1, V2, V4, {V3, V4} = 15 V5, V6} {V3, V5} = 6 15 {V0, V1} = 7 V3 V4 6 8 V5 9 11 V6
  • 59. 59 Algoritmo de Prim Paso 4 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V0, V3, V5} {V3, V1} = 9 {V1, V2, V4, {V3, V4} = 15 V6} {V0, V1} = 7 15 {V5, V4} = 8 V3 V4 {V5, V6} = 11 6 8 V5 9 11 V6
  • 60. 60 Algoritmo de Prim Paso 5 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V0, V1, V3, {V3, V1} = C {V2, V4, V6} V5} {V3, V4} = 15 {V5, V4} = 8 15 {V5, V6} = 11 V3 V4 {V1, V2} = 8 {V1, V4} = 7 6 8 V5 9 11 V6
  • 61. 61 Algoritmo de Prim Paso 6 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V0, V1, V3, {V3, V1} = C {V2, V6} V4, V5} {V3, V4} = C {V5, V4} = C 15 {V5, V6} = 11 V3 V4 {V1, V2} = 8 {V4, V2} = 5 6 8 {V4, V6} = 9 V5 9 11 V6
  • 62. 62 Algoritmo de Prim Paso 7 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V0, V1, V2, {V3, V1} = C {V6} V3, V4, V5} {V3, V4} = C {V5, V4} = C 15 {V5, V6} = 11 V3 V4 {V1, V2} = C {V4, V6} = 9 6 8 V5 9 11 V6
  • 63. 63 Algoritmo de Prim Paso 8 Proceso 7 VO 8 V1 V2 9 7 Árbol Opciones Grafo 5 5 {V0, V1, V2, {V3, V1} = C {} V3, V4, V5, {V3, V4} = C V6} {V5, V4} = C 15 {V5, V6} = C V3 V4 {V1, V2} = C 6 8 V5 9 11 V6
  • 64. 64 Trabajo en equipo • Realizar trabajos en grupo para presentarlos y defenderlos en clase • El trabajo de grafos puede consistir en: ▫ Escoger un algoritmo y aplicarlo en un caso real ▫ Comparar dos o más algoritmos • Se entregará en formato Power Point en el campus virtual
  • 65. 65 Bibliografía • WEISS, Mark Allen; (2000) Data Estructures & Problem Solving Using Java. Addison Wesley. ISBN 03-2154-140-5. • JAIME SISA, Alberto; (2002) Estructuras de Datos y Algoritmos con énfasis en programación orientada a objetos. Pearson Educación. ISBN 958-699-044-3. • JOYANES AGUILAR, LUIS (2007) Estructuras de Datos en Java. McGraw Hill. ISBN: 9788448156312. • STANDISH, Thomas A (1998). Data structures in Java. Addison Wesley ISBN 0-201- 30564-X. • WEISS, Mark Allen; (2000) Estructuras de Datos en Java. Addison Wesley. ISBN 84- 7829-035-4. • WIRTH, Niklaus (1992). Algoritmos + Estructuras de Datos = Programas. Prentice- Hall. ISBN: 84-219-0172-9.