SlideShare una empresa de Scribd logo
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

Grafos
GrafosGrafos
Grafos
xsmokix
 
Ejercicios de grafos
Ejercicios de grafosEjercicios de grafos
Ejercicios de grafos
Tere Suarez
 
Grafos
GrafosGrafos
Grafos
drakul09
 
Grafos[1]
Grafos[1]Grafos[1]
Grafos[1]
Raul Mateus
 
grafos conexos
grafos conexosgrafos conexos
grafos conexos
Deivis Alexander
 
Conceptos básicos de los grafos
Conceptos básicos de los grafosConceptos básicos de los grafos
Conceptos básicos de los grafos
Marco Delgado Martínez
 
Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserción
Alvaro Enrique Ruano
 
Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de Ordenamiento
José Antonio Sandoval Acosta
 
Ordenamiento QuickSort
Ordenamiento QuickSortOrdenamiento QuickSort
Ordenamiento QuickSort
Andre Jaramillo
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
Miguel Guanira Erazo
 
Circuito de Hamilton
Circuito de HamiltonCircuito de Hamilton
Circuito de Hamilton
Vicentino
 
Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sort
tephyfree
 
Algoritmo de Dijkstra
Algoritmo de DijkstraAlgoritmo de Dijkstra
Algoritmo de Dijkstra
Joemmanuel Ponce
 
Presentacion PseudocóDigo
Presentacion PseudocóDigoPresentacion PseudocóDigo
Presentacion PseudocóDigo
Marco Antonio
 
conceptos de Punteros y Nodos
conceptos de Punteros y Nodosconceptos de Punteros y Nodos
conceptos de Punteros y Nodos
Boris Salleg
 
Listas de adyacencia
Listas de adyacenciaListas de adyacencia
Listas de adyacencia
leidy2220
 
Recursividad en POO - Java
Recursividad en POO - JavaRecursividad en POO - Java
Recursividad en POO - Java
Martin Pacheco Chávez
 
ejercicios de recorrido de grafos (arboles)
ejercicios de recorrido de grafos (arboles) ejercicios de recorrido de grafos (arboles)
ejercicios de recorrido de grafos (arboles)
brayan0015
 
Grafo bipartito
Grafo bipartitoGrafo bipartito
Grafo bipartito
Dukakis de Jesus
 
Matemáticas discretas- Teoría de Grafos
Matemáticas discretas- Teoría de GrafosMatemáticas discretas- Teoría de Grafos
Matemáticas discretas- Teoría de Grafos
Angela Janeth Jimenez
 

La actualidad más candente (20)

Grafos
GrafosGrafos
Grafos
 
Ejercicios de grafos
Ejercicios de grafosEjercicios de grafos
Ejercicios de grafos
 
Grafos
GrafosGrafos
Grafos
 
Grafos[1]
Grafos[1]Grafos[1]
Grafos[1]
 
grafos conexos
grafos conexosgrafos conexos
grafos conexos
 
Conceptos básicos de los grafos
Conceptos básicos de los grafosConceptos básicos de los grafos
Conceptos básicos de los grafos
 
Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserción
 
Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de Ordenamiento
 
Ordenamiento QuickSort
Ordenamiento QuickSortOrdenamiento QuickSort
Ordenamiento QuickSort
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
 
Circuito de Hamilton
Circuito de HamiltonCircuito de Hamilton
Circuito de Hamilton
 
Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sort
 
Algoritmo de Dijkstra
Algoritmo de DijkstraAlgoritmo de Dijkstra
Algoritmo de Dijkstra
 
Presentacion PseudocóDigo
Presentacion PseudocóDigoPresentacion PseudocóDigo
Presentacion PseudocóDigo
 
conceptos de Punteros y Nodos
conceptos de Punteros y Nodosconceptos de Punteros y Nodos
conceptos de Punteros y Nodos
 
Listas de adyacencia
Listas de adyacenciaListas de adyacencia
Listas de adyacencia
 
Recursividad en POO - Java
Recursividad en POO - JavaRecursividad en POO - Java
Recursividad en POO - Java
 
ejercicios de recorrido de grafos (arboles)
ejercicios de recorrido de grafos (arboles) ejercicios de recorrido de grafos (arboles)
ejercicios de recorrido de grafos (arboles)
 
Grafo bipartito
Grafo bipartitoGrafo bipartito
Grafo bipartito
 
Matemáticas discretas- Teoría de Grafos
Matemáticas discretas- Teoría de GrafosMatemáticas discretas- Teoría de Grafos
Matemáticas discretas- Teoría de Grafos
 

Destacado

Fundamentos de Corriente Alterna Monofásica
Fundamentos de Corriente Alterna MonofásicaFundamentos de Corriente Alterna Monofásica
Fundamentos de Corriente Alterna Monofásica
Mario Fagúndez Silva
 
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
Facultad de Arquitectura y Urbanismo, Univesidad de Chile
 
Conserving crop diversity forever
Conserving crop diversity foreverConserving crop diversity forever
Conserving crop diversity forever
CIAT
 
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 variables
juanchojuancho
 
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
Boston Consulting Group
 
The Career Guide to Green Jobs
The Career Guide to Green JobsThe Career Guide to Green Jobs
The Career Guide to Green Jobs
Kelly 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 arquitectura
Crisstian Cm
 
ESTUDIO DE IMPACTO AMBIENTAL
ESTUDIO DE IMPACTO AMBIENTALESTUDIO DE IMPACTO AMBIENTAL
ESTUDIO DE IMPACTO AMBIENTAL
guest9129bc
 
Identificación de Variables - Tema 5
Identificación de Variables - Tema 5Identificación de Variables - Tema 5
Identificación de Variables - Tema 5
Universidad de Málaga
 
Las hipotesis y las variables
Las hipotesis y las variablesLas hipotesis y las variables
Las hipotesis y las variables
Werner Granados
 
El poblamiento de América
El poblamiento de AméricaEl poblamiento de América
FormulacióN De HipóTesis
FormulacióN De HipóTesisFormulacióN De HipóTesis
FormulacióN De HipóTesis
silvia trujano nassar
 
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
gloria_garciae
 
Smart city
Smart citySmart city
Smart city
modi_123smartcity
 
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?
Institute for Transport Studies (ITS)
 
Evaluacion de impacto ambiental
Evaluacion de impacto ambientalEvaluacion de impacto ambiental
Evaluacion de impacto ambiental
jcarlitos1
 
El Deconstructivismo en Arquitectura
El Deconstructivismo en ArquitecturaEl Deconstructivismo en Arquitectura
El Deconstructivismo en Arquitectura
Rodolfo-J. Rodríguez-R.
 

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

Creating a textual domain specific language
Creating a textual domain specific languageCreating a textual domain specific language
Creating a textual domain specific language
Vicente García Díaz
 
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...
Vicente García Díaz
 
jBPM
jBPMjBPM
Wikitude. KML y ARML
Wikitude. KML y ARMLWikitude. KML y ARML
Wikitude. KML y ARML
Vicente García Díaz
 
Wikitude. ARchiect
Wikitude. ARchiectWikitude. ARchiect
Wikitude. ARchiect
Vicente García Díaz
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
Vicente García Díaz
 
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
Vicente García Díaz
 
Iniciación a OpenGL
Iniciación a OpenGLIniciación a OpenGL
Iniciación a OpenGL
Vicente García Díaz
 
Iniciación a la realidad aumentada
Iniciación a la realidad aumentadaIniciación a la realidad aumentada
Iniciación a la realidad aumentada
Vicente García Díaz
 
Iniciación a ARToolKit
Iniciación a ARToolKitIniciación a ARToolKit
Iniciación a ARToolKit
Vicente García Díaz
 
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)
Vicente García Díaz
 
Wikitude. Servicios Seb
Wikitude. Servicios SebWikitude. Servicios Seb
Wikitude. Servicios Seb
Vicente García Díaz
 
LaTeX
LaTeXLaTeX
Automatización y Microsoft Word
Automatización y Microsoft WordAutomatización y Microsoft Word
Automatización y Microsoft Word
Vicente García Díaz
 
Árboles
ÁrbolesÁrboles
Dispersión y tablas hash
Dispersión y tablas hashDispersión y tablas hash
Dispersión y tablas hash
Vicente García Díaz
 

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.