Вы находитесь на странице: 1из 11

TEORA DE GRAFOS: ALGORITMOS FUNDAMENTALES

BIANKA BARRIOS S.

b 1

1 3 45

10

2
20

s
3

4
3 c 2

55

40 25 50 4

25

30 15

Algoritmos de caminos ms cortos

CAMINOS MAS CORTOS


Frecuentemente, se desea conocer en una red
Cual es el camino mas corto En este caso
Entre un par de vrtices

Se aplica el algoritmo de Dijkstra


Es un algoritmo avido, ya que:

Si importa cuantos caminos existen Si ya conozco un camino, pero encuentro uno mejor, sustituir

Resuelve el problema en sucesivos pasos En cada paso


Selecciona la solucin mas optima

Algoritmos de caminos ms cortos


El problema de los caminos ms cortos desde un vrtice.
Algoritmo de Dijkstra.

El problema de los caminos ms cortos entre todos los pares de vrtices.


Algoritmo de Floyd.

rbol de Expansin Mnima


Kruskal Prim

Grafos con pesos


Cada arista lleva asociado un valor numrico no negativo, w(e), que representar un costo que vara linealmente a lo largo de la arista (distancia, tiempo). El costo de un camino es la suma de los costos de las aristas del camino.
COR

2 1.5 1

SAN

BIL

Ejemplo: grafo que representa

1.1

las rutas entre ciudades de una aerolnea. El peso de las aristas es el tiempo de vuelo.

1 1.2 1.2

0.9
BAR

MAD

1 2 1.5
VAL

1.2 1.3
SEV MAL

Algoritmo de Dijkstra
La idea principal es realizar una bsqueda a lo ancho ponderada empezando por el vrtice inicial f. De manera iterativa se construye un conjunto de vrtices seleccionados S que se toman del conjunto de vrtices candidatos C segn el menor peso (distancia) desde f. El algoritmo termina cuando no hay ms vrtices de G fuera del conjunto formado. El paradigma usado corresponde al mtodo voraz, en el que se trata de optimizar una funcin sobre una coleccin de objetos (menor peso). Se usa un vector d[v] para almacenar la distancia de v a f.

Algoritmo de Dijkstra
Cuando se aade un vrtice al conjunto S, el valor de d[v] contiene la distancia de f a v. Cuando se aade un nuevo vrtice u al conjunto S, es necesario comprobar si u es una mejor ruta para sus vrtices adyacentes z que estn en el conjunto C. Para ello se actualiza d con la relajacin de la arista (u, z): d[z] = min( d[z], d[u] + w[u, z] )
30

30
f f

60

90

z 100

100
S

Algoritmo de Dijkstra
Dijkstra(G, f) S = { f }, C = { V } d[f] = 0

d[u] = u f

while (C ) { seleccionar vrtice w C / d[w] es mnimo S = S {w}, C = C - {w} for cada vertex v Adyacente[w] { if (d[v] > d[w] + w(w, v)) d[v] = d[w] + w(w, v) } }

Algoritmo de Dijkstra
10 0 5

1 3 9 7 2
1 3 9 7

10 0 5 2

10 3

6 f

10 0 5 2

8 3

14 4 7
9 4 6

9
7

9
7

5 8 2 3

2 1 9 7

5
8

2
1 3

10 0 5 2

13

4
7

10 0 5

9
f

10 0 5 2

4
7

9
7

Algoritmo de Dijkstra
Para reconstruir los vrtices del camino ms corto desde el vrtice fuente a cada vrtice:
Se usa otro array p[v] que contiene el vrtice anterior a v en el camino. Se inicializa p[v] = f para todo v f Se actualiza p siempre que d[v] > d[w] + w(w, v) a: p[v] = w. El camino a cada vrtice se halla mediante una traza hacia atrs en el array p.

a f 10 0 2

1 3 9 7 4

9 b 6 7 d

5
c

p[a] = c p[b] = a p[c] = f p[d] = c

Caminos ms cortos
Problema: Hallar los caminos mnimos entre cualquier par de nodos de un grafo. Se puede usar el algoritmo de Dijkstra tomando cada vrtice como fuente. Existe una manera ms directa: algoritmo de Floyd.

Вам также может понравиться