algoritmos em grafos: caminho m...

27
Caminho Mínimo Algoritmos em Grafos: Caminho Mínimo Letícia Rodrigues Bueno UFABC

Upload: vuongque

Post on 25-Jan-2019

248 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Algoritmos em Grafos: Caminho Mínimo

Letícia Rodrigues Bueno

UFABC

Page 2: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Problema 2: Menor caminho entre duas cidades

• Dado um mapa de cidades, contendo as distâncias entrecidades, qual o menor caminho entre quaisquer cidades Ae B?

Page 3: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Problema 2: Menor caminho entre duas cidades

• Dado um mapa de cidades, contendo as distâncias entrecidades, qual o menor caminho entre quaisquer cidades Ae B?

• Este problema pode ser modelado através de um grafo:• Cidade: vértices;• Estradas entre cidades: arestas ponderadas com peso que

indicam distância entre cidades.

• Esse problema é conhecido como Problema do CaminhoMínimo.

Page 4: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Abordagem

• Problema do caminho mínimo é semelhante a problemado número de Erdõs;

Page 5: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Abordagem

• Problema do caminho mínimo é semelhante a problemado número de Erdõs;

• Podemos utilizar uma idéia semelhante ao BFS ;• Levar em consideração:

• O problema tem subestrutura ótima.

Page 6: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

s

t x

zy

10

1

5

2

2 3

9

4 6

7

Page 7: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

∞ ∞

10

1

5

2

2 3

9

4 6

7

Page 8: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

∞ ∞

10

1

5

2

2 3

9

4 6

7

Page 9: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

10

1

5

2

2 3

9

4 6

7

5

10

Page 10: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

10

1

5

2

2 3

9

4 6

7

5

8

7

14

Page 11: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

10

1

5

2

2 3

9

4 6

7

5

8

7

13

Page 12: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

10

1

5

2

2 3

9

4 6

7

5

8

7

9

Page 13: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

0

s

t x

zy

10

1

5

2

2 3

9

4 6

7

5

8

7

9

Page 14: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 relaxa(u, v):2 se v.d > u.d + p(u, v) então3 v.d = u.d + p(u, v)4 v.p = u

5

u v2 7

5

u v2 9

Relaxa(u,v)

(a)

5

u v2 6

5

u v2 6

Relaxa(u,v)

(b)

Page 15: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 dijkstra(G, s):2 para u em V(G) faça3 u.d = ∞4 u.p = None5 s.d = 06 A = Heap(V(G)) \\ com base em d7 S = [ ]8 enquanto tamanho(A) > 1 faça9 u = retira_min(A)

10 S = S + u11 para v em adj(u) faça12 relaxa(u, v)13 refaz_heap(A)

Page 16: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 dijkstra(G, s):2 para u em V(G) faça3 u.d = ∞4 u.p = None5 s.d = 06 A = Heap(V(G)) \\ com base em d7 S = [ ]8 enquanto tamanho(A) > 1 faça9 u = retira_min(A)

10 S = S + u11 para v em adj(u) faça12 relaxa(u, v)13 refaz_heap(A)

Análise da complexidade:

Page 17: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 dijkstra(G, s):2 para u em V(G) faça3 u.d = ∞4 u.p = None5 s.d = 06 A = Heap(V(G)) \\ com base em d7 S = [ ]8 enquanto tamanho(A) > 1 faça9 u = retira_min(A)

10 S = S + u11 para v em adj(u) faça12 relaxa(u, v)13 refaz_heap(A)

Análise da complexidade:

• Construção do heap(linha 6): O(n)

Page 18: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 dijkstra(G, s):2 para u em V(G) faça3 u.d = ∞4 u.p = None5 s.d = 06 A = Heap(V(G)) \\ com base em d7 S = [ ]8 enquanto tamanho(A) > 1 faça9 u = retira_min(A)

10 S = S + u11 para v em adj(u) faça12 relaxa(u, v)13 refaz_heap(A)

Análise da complexidade:

• Construção do heap(linha 6): O(n)

• retira_min (linha 9)tem complexidade(log n) e é executadon vezes: O(n log n)

Page 19: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 dijkstra(G, s):2 para u em V(G) faça3 u.d = ∞4 u.p = None5 s.d = 06 A = Heap(V(G)) \\ com base em d7 S = [ ]8 enquanto tamanho(A) > 1 faça9 u = retira_min(A)

10 S = S + u11 para v em adj(u) faça12 relaxa(u, v)13 refaz_heap(A)

Análise da complexidade:

• Construção do heap(linha 6): O(n)

• retira_min (linha 9)tem complexidade(log n) e é executadon vezes: O(n log n)

• refaz_heap (linha 13)tem complexidade(log n) e é executadom vezes: O(m log n)

Page 20: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Caminho mínimo de fonte única: algoritmo de Dijkstra

1 dijkstra(G, s):2 para u em V(G) faça3 u.d = ∞4 u.p = None5 s.d = 06 A = Heap(V(G)) \\ com base em d7 S = [ ]8 enquanto tamanho(A) > 1 faça9 u = retira_min(A)

10 S = S + u11 para v em adj(u) faça12 relaxa(u, v)13 refaz_heap(A)

Análise da complexidade:

• Construção do heap(linha 6): O(n)

• retira_min (linha 9)tem complexidade(log n) e é executadon vezes: O(n log n)

• refaz_heap (linha 13)tem complexidade(log n) e é executadom vezes: O(m log n)

• Complexidade total:O((n + m) log n)

Page 21: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Problemas do Caminho Mínimo

• Caminho mínimo de fonte única;

• Caminho mínimo de destino único;

• Caminho mínimo entre quaisquer vértices u e v ;• Caminho mínimo de todos os vértices para todos os

vértices:• Algoritmo de Floyd-Warshall O(n3).

Page 22: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Limitações do algoritmo de Dijkstra

• Não funciona para grafos com ciclos com pesos negativos;

Page 23: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Limitações do algoritmo de Dijkstra

• Não funciona para grafos com ciclos com pesos negativos;

• Alternativa: Algoritmo de Bellman-Ford de complexidadeO(n · m).

Page 24: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Exercícios

2. Faça a análise da complexidade (tempo e espaço) doalgoritmo de Dijkstra quando a representação do grafo épor matriz de adjacências.

Page 25: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Exercícios

2. Faça a análise da complexidade (tempo e espaço) doalgoritmo de Dijkstra quando a representação do grafo épor matriz de adjacências.

3. Faça a análise da complexidade do algoritmo de Dijkstraquando a fila de prioridades é uma lista (ordenada enão-ordenada).

Page 26: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Exercícios

2. Faça a análise da complexidade (tempo e espaço) doalgoritmo de Dijkstra quando a representação do grafo épor matriz de adjacências.

3. Faça a análise da complexidade do algoritmo de Dijkstraquando a fila de prioridades é uma lista (ordenada enão-ordenada).

4. Dê exemplo de um grafo com pesos negativos em que oalgoritmo de Dijkstra não retorna a resposta correta.

Page 27: Algoritmos em Grafos: Caminho M nimoprofessor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/... · Caminho Mínimo Caminho mínimo de fonte única: algoritmo de Dijkstra 1 dijkstra(G,

Caminho Mínimo

Bibliografia Utilizada

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