Análise e Síntese de Algoritmos

Slides:



Advertisements
Apresentações semelhantes
Algoritmos de Caminho Mínimo em Grafos
Advertisements

Grafos eulerianos 1.
Grafos Orientados (digrafos)
Algoritmo de Caminho Mínimo
Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Representação de Grafos
Ford Fulkerson Teoria dos Grafos.
Algoritmos em Grafos.
Python: Recursão Claudio Esperança.
Celso C. Ribeiro Caroline T. Rocha
Fluxo em Redes Prof. Ricardo R. Santos.
O Problema do Passeio mais Curto
Exercícios PAA- Grafos
Exercícios PAA- Grafos
CC/EC/Mestrado/UFES Teoria dos Grafos (INF 5037/INF2781) Grafos Orientados (digrafos)
Pontes Seja (G) o número de componentes conexas de G. Uma ponte é uma aresta a tal que (G - a) > (G)
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo.
Algoritmo polinomial para geração de uma Árvore Geradora Mínima
Métodos para representação de estruturas hierárquicas
Análise e Síntese de Algoritmos
Grafos Grafo G = (V, E) V — conjunto de vértices
Pesquisa em profundidade
Problemas de fluxo numa rede
Grafos Grafo G = (V, E) V — conjunto de vértices
CONCEITOS BÁSICOS DE GRAFOS
Teoria dos Grafos – Aula 3 Árvores
Árvore Geradora de Peso Mínimo
Grafos - Definições Preliminares - Formas de Representação
Ronaldo Celso Messias Correia –
Prof. Bruno Samways dos Santos
Árvore Geradora Mínima
Algoritmos em Grafos.
Formas de representação e manipulação básica
Grafos Árvores Geradoras.
Algoritmos em Grafos Árvores Geradoras Prof. André Renato
Exercícios PAA- Grafos
Prova AA.
Otimização Inteira 5a. Aula Franklina.
Conceitos Básicos Alysson e Franklina 2ºs/
Operações com grafos União Exemplo
Análise e Síntese de Algoritmos
Algoritmos Gulosos em Grafos
Problema do menor Caminho
UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Disciplina:Estruturas de Dados Aluno:Christiano Otero Avila Prof.
Otimização Linear Definições e Solução Gráfica
Algoritmo de PRIM para MST
Análise de Complexidade do Algoritmo de Dijkstra
Análise e Síntese de Algoritmos
Introdução a Algoritmos em Grafos.

Análise e Síntese de Algoritmos
Mestrado em Informática
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21.
Redes de transporte Uma rede ou grafo consiste num número finito de pontos chamados nós ou vértices interligados por arcos. Muitos sistemas, físicos ou.
Celso C. Ribeiro Caroline T. Rocha
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Análise e Síntese de Algoritmos
Grafos Anjolina Grisi de Oliveira 2005
Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
FLUXOS EM REDES.
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
Algoritmo de Dijkstra.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Exercícios de Revisão 1 Crisitano Arbex Valle Vinicius Fernandes dos Santos
Algoritmo de Johnson Estrutura de Dados II
Transcrição da apresentação:

Análise e Síntese de Algoritmos Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25

Análise e Síntese de Algoritmos Contexto Algoritmos Elementares em Grafos (CLR, Cap. 22) BFS & DFS Ordenação Topológica & SCCs Árvores Abrangentes de Menor Custo (CLR, Cap. 23) Algoritmos de Borůvka, Kruskal e Prim Caminhos mais curtos com fonte única (CLR, Cap. 24) Algoritmos de Dijkstra e Bellman-Ford Caminhos mais curtos entre todos os pares (CLR, Cap. 25) Solução Recursiva e Algoritmo de Floyd-Warshall 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Resumo Caminhos Mais Curtos entre Todos os Pares (APSPs) Definições Soluções recursivas Algoritmo de Floyd-Warshall Fecho Transitivo Algoritmo de Johnson 2003/2004 Análise e Síntese de Algoritmos

Caminhos Mais Curtos entre Todos os Pares (APSPs) — Observações Encontrar caminhos mais curtos entre todos os pares de vértices Se pesos não negativos Utilizar algoritmo de Dijkstra, assumindo cada vértice como fonte: O(V E lg V) (que é O(V3 lg V) se grafo é denso) Se pesos negativos Utilizar algoritmo de Bellman-Ford, assumindo cada vértice como fonte: O(V2E) (que é O(V4) se grafo é denso) Objectivo: Encontrar algoritmos mais eficientes 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos APSPs — Definições Representação: utilização de matriz de adjacências Pesos dos arcos: matriz (n x n) W = (wij) Representação dos caminhos mais curtos: matriz (n x n) D = (dij) dij é o peso do caminho mais curto entre os vértices i e j dij = (vi,vj) 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos APSPs — Definições Representação de caminhos mais curtos Matriz de predecessores  = (ij) ij: NIL: se i = j ou não existe caminho de i para j Caso contrário: predecessor de j num caminho mais curto de i para j Sub-grafo de predecessores de G para i, G, i = (V, i, E, i) Sub-grafo induzido pela linha i de  Exemplo 2003/2004 Análise e Síntese de Algoritmos

APSPs — Solução Recursiva Sub-caminhos de caminhos mais curtos são também caminhos mais curtos Peso mínimo em caminho de vértice i para vértice j que contém não mais do que m arcos: Com m = 0, existe caminho de i para j se e só se i = j Para m  1, wjj = 0 2003/2004 Análise e Síntese de Algoritmos

APSPs — Solução Recursiva Calcular sequência de matrizes D(1), …, D(n-1), onde D(n-1) contém os pesos dos caminhos mais curtos D(1) = W Complexidade: (n3) p/ cada matriz; Total: (n4) Extend-Shortest-Paths(D,W) n = rows[W] D’: matriz (n x n) for i = 1 to n for j = 1 to n for k = 1 to n return D’ 2003/2004 Análise e Síntese de Algoritmos

APSPs — Solução Recursiva Genericamente: calcular D(i) em função de D(i-1) (e de W) Complexidade para cálculo de D(n): (n4) OBS: é possível melhorar complexidade reduzindo número de matrizes calculadas: (n3lg n) A cada iteração, calcular D(2i) em função de D(i) e de D(i) Exemplo 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Floyd-Warshall Caracterização de um caminho mais curto Vértices intermédios de caminho p = v1,v2,,vk, {v2,,vk-1} Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,,k} e seja p um caminho mais curto (p é simples) Se k não é vértice intermédio de p, então todos os vértices intermédios de p estão em {1,,k-1} Se k é vértice intermédio de p, então existem caminhos p1 e p2, respectivamente de i para k e de k para j com vértices intermédios em {1,,k} k não é vértice intermédio de p1 e de p2 p1 e p2 com vértices intermédios em {1,,k-1} 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Floyd-Warshall Formulação i j k p1 p2 Vértices entre 1 e k-1 Vértices entre 1 e k 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Floyd-Warshall Complexidade: (n3) Exemplo Floyd-Warshall(W) n = rows[W] D(0) = W for k = 1 to n for i = 1 to n for j = 1 to n return D(n) 2003/2004 Análise e Síntese de Algoritmos

Fecho Transitivo de um Grafo Dirigido Dado um grafo G = (V, E) dirigido, o fecho transitivo é definido por G* = (V, E*) tal que, Aplicação: autorizações de acesso Algoritmo: Atribuir a cada arco peso 1 e utilizar algoritmo de Floyd-Warshall Se dij  , então (i, j)  E* Complexidade: (n3) 2003/2004 Análise e Síntese de Algoritmos

Fecho Transitivo de um Grafo Dirigido Outro algoritmo: Substituir operações min e + por  e , respectivamente Se existe caminho de i para j com todos os vértices intermédios em {1,2,…,k}, Caso contrário, Formulação: Complexidade: (n3) (mas constantes menores) Exemplo 2003/2004 Análise e Síntese de Algoritmos

Fecho Transitivo de um Grafo Dirigido Transitive-Closure(G) n = |V[G]| for i = 1 to n for j = 1 to n if i = j or (i, j)  E else for k = 1 to n return T(n) 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Utiliza algoritmos de Dijkstra e de Bellman-Ford Baseado em re-pesagem dos arcos Se arcos com pesos não negativos, utilizar Dijkstra para cada vértice Caso contrário, calcular novo conjunto de pesos não negativos w’, tal que Um caminho mais curto de u para v com função w é também caminho mais curto com função w’ Para cada arco (u, v) o peso w’(u, v) é não negativo 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Dado G = (V, E), com função de pesos w e de re-pesagem h: V  R, seja w’(u, v) = w(u, v) + h(u) - h(v) Seja p = v0,v1,,vk. Então w(p) = (v0, vk) se e só se w’(p) = ’(v0, vk) = (v0, vk) + h(v0) - h(vk) Existe ciclo negativo com w se e só se existe ciclo negativo com w’ 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Hipótese: existe pz, caminho mais curto de v0 para vk com w’ Então: O que implica Mas p é caminho mais curto com w; contradição ! OBS: Para quaisquer caminhos p1, p2 entre v0 e vk, verifica-se w(p1) < w(p2)  w’(p1) < w’(p2) 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Semelhante: Admitir pz como caminho mais curto de v0 para vk com w (ou considerar observação anterior) Existe ciclo negativo com w se e só se existe com w’ Caminhos mais curtos e ciclos negativos inalteráveis com mudanças na função de pesos w’(u, v) = w(u, v) + h(u) - h(v) 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Dado G = (V, E), criar G’ = (V’,E’): V’ = V  { s } E’ = E  { (s, v) : v  V } ( v  V, atingível a partir de s) w(s, v) = 0 Com ciclos negativos: Detectados com algoritmo de Bellman-Ford aplicado a G’ ! Sem ciclos negativos: Definir: h(v) = (s, v) Dado que: h(v)  h(u) + w(u, v) Verifica-se: w’(u, v) = w(u, v) + h(u) - h(v)  0 ! 24.10 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Executar Dijkstra para todo o u  V Cálculo de ’(u,v), para u  V Mas também, ’(u,v) = (u, v) + h(u) - h(v) (u,v) = ’(u, v) + h(v) - h(u) 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Johnson(G) Representar G’ if Bellman-Ford(G’,w,s) = FALSE print “Indicar ciclo negativo” else atribuir h(v) = (s, v), calculado com Bellman-Ford calcular w’(u,v) = w(u,v) + h(u) - h(v) para cada arco (u,v) foreach v  V[G] executar Dijkstra(G,w’,u); calcular ’(u, v) duv = ’(u, v) + h(v) - h(u) return D 2003/2004 Análise e Síntese de Algoritmos

APSPs — Algoritmo de Johnson Complexidade: Bellman-Ford: O(V E) Executar Dijkstra para cada vértice: O(V (V + E) lg V) Assumindo amontoado (heap) binário Total: O(V (V + E) lg V) Útil para grafos esparsos Exemplo 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Revisão Caminhos Mais Curtos entre Todos os Pares (APSPs) Definições Solução recursiva Algoritmo de Floyd-Warshall Fecho Transitivo Algoritmo de Johnson A seguir: Fluxos máximos em grafos (CLR, Cap. 26) 2003/2004 Análise e Síntese de Algoritmos