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

Caminho Mnimo

Algoritmos em Grafos: Caminho Mnimo


Letcia Rodrigues Bueno
UFABC

Caminho Mnimo

Problema 2: Menor caminho entre duas cidades

Dado um mapa de cidades, contendo as distncias entre

cidades, qual o menor caminho entre quaisquer cidades A e B?

Caminho Mnimo

Problema 2: Menor caminho entre duas cidades

Dado um mapa de cidades, contendo as distncias entre

cidades, qual o menor caminho entre quaisquer cidades A e B? Este problema pode ser modelado atravs de um grafo:
Cidade: vrtices; Estradas entre cidades: arestas ponderadas com peso que

indicam distncia entre cidades. Esse problema conhecido como Problema do Caminho

Mnimo.

Caminho Mnimo

Abordagem

Problema do caminho mnimo semelhante a problema

do nmero de Erds;

Caminho Mnimo

Abordagem

Problema do caminho mnimo semelhante a problema

do nmero de Erds;
Podemos utilizar uma idia semelhante ao Levar em considerao: O problema tem subestrutura tima.
BFS

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

t
10

s
2 5 3

9 4 7 2 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

10
10

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

8
10

14

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

8
10

13

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

8
10

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

8
10

s 0
5

9 2 3 4 7 6

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


u 5
2

v 9

u
1 2 3 4

relaxa(u, v): se v.d > u.d + p(u, v) ento v.d = u.d + p(u, v) v.p = u

5 u 5

Relaxa(u,v) v 2 7 (a)

v
2

u 5

Relaxa(u,v) v 2 6 (b)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra

1 2 3 4 5 6 7 8 9 10 11 12 13

dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
1 2 3 4 5 6 7 8 9 10 11 12 13

dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
1 2 3 4 5 6 7 8 9 10 11 12 13

dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)

Construo do heap (linha 6): O (n)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
1 2 3 4 5 6 7 8 9 10 11 12 13

dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)

Construo do heap (linha 6): O (n) retira_min (linha 9) tem complexidade (log n) e executado n vezes: O (n log n)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
1 2 3 4 5 6 7 8 9 10 11 12 13

dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)

Construo do heap (linha 6): O (n) retira_min (linha 9) tem complexidade (log n) e executado n vezes: O (n log n) refaz_heap (linha 13) tem complexidade (log n) e executado m vezes: O (m log n)

Caminho Mnimo

Caminho mnimo de fonte nica: algoritmo de Dijkstra


Anlise da complexidade:
1 2 3 4 5 6 7 8 9 10 11 12 13

dijkstra(G, s): para u em V(G) faa u.d = u.p = None s.d = 0 A = Heap(V(G)) \\ com base em d S=[] enquanto tamanho(A) > 1 faa u = retira_min(A) S=S+u para v em adj(u) faa relaxa(u, v) refaz_heap(A)

Construo do heap (linha 6): O (n) retira_min (linha 9) tem complexidade (log n) e executado n vezes: O (n log n) refaz_heap (linha 13) tem complexidade (log n) e executado m vezes: O (m log n) Complexidade total: O ((n + m) log n)

Caminho Mnimo

Problemas do Caminho Mnimo

Caminho mnimo de fonte nica; Caminho mnimo de destino nico; Caminho mnimo entre quaisquer vrtices u e v ; Caminho mnimo de todos os vrtices para todos os

vrtices:
Algoritmo de Floyd-Warshall O (n3 ).

Caminho Mnimo

Limitaes do algoritmo de Dijkstra

No funciona para grafos com ciclos com pesos negativos;

Caminho Mnimo

Limitaes do algoritmo de Dijkstra

No funciona para grafos com ciclos com pesos negativos; Alternativa: Algoritmo de Bellman-Ford de complexidade

O (n m).

Caminho Mnimo

Exerccios

2. Faa a anlise da complexidade (tempo e espao) do algoritmo de Dijkstra quando a representao do grafo por matriz de adjacncias.

Caminho Mnimo

Exerccios

2. Faa a anlise da complexidade (tempo e espao) do algoritmo de Dijkstra quando a representao do grafo por matriz de adjacncias. 3. Faa a anlise da complexidade do algoritmo de Dijkstra quando a la de prioridades uma lista (ordenada e no-ordenada).

Caminho Mnimo

Exerccios

2. Faa a anlise da complexidade (tempo e espao) do algoritmo de Dijkstra quando a representao do grafo por matriz de adjacncias. 3. Faa a anlise da complexidade do algoritmo de Dijkstra quando a la de prioridades uma lista (ordenada e no-ordenada). 4. D exemplo de um grafo com pesos negativos em que o algoritmo de Dijkstra no retorna a resposta correta.

Caminho Mnimo

Bibliograa Utilizada

CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C. Introduction to Algorithms, 3a edio, MIT Press, 2009.

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