Análise e Síntese de Algoritmos

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

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de todos os pares

Caminhos mínimos de todos os pares

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Caminhos mínimos de única origem

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Otimização em Grafos

Projeto e Análise de Algoritmos. Método Guloso

Análise e Síntese de Algoritmos

Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos. Fluxos Máximos em Grafos CLRS, Cap. 26

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

Acessibilidade e Fecho Transitivo de Grafos Dirigidos

Análise e Síntese de Algoritmos. Problemas NP-Completos CLRS, Cap. 34

Algoritmo Floyd-Warshall. Problema dos caminhos mínimos entre todos os pares. Programação dinâmica

Teoria dos Grafos Aula 22

Grafos Parte 2. SCC-603 Algoritmos e Estruturas de Dados II. Profª. Rosane Minghim / Baseado em material de professores dos anos anteriores

Análise e Síntese de Algoritmos. Fluxos Máximos em Grafos CLRS, Cap. 26

Complexidade de Algoritmos

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

2006/2007 Análise e Síntese de Algoritmos 2

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Sub-grafo. Árvore Geradora Mínima

Grafos parte 2* Algoritmos e Estruturas de Dados II SCC-203 Rosane 2010/2011. *Baseado em material de professores dos anos anteriores

Análise e Síntese de Algoritmos

Teoria dos Grafos Aula 24

Grafos: caminhos mínimos

Algoritmos em Grafos: Caminho Mínimo

AULA 13 PROJETO E ANÁLISE DE ALGORITMOS. Problema do caminho mais curto de uma única origem em grafos Karina Valdivia Delgado

Grafos Caminhos mais Curtos

Problema do Caminho Mínimo

Teoria dos Grafos Aula 5

Algoritmo de Dijkstra Estudo e Implementação

Análise e Síntese de Algoritmos

Grafos e Algoritmos de Busca

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14

Busca em largura. Algoritmos em Grafos. Marco A L Barbosa

Grafos Parte 1. Aleardo Manacero Jr.

Teoria dos Grafos Aula 6

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Melhores momentos AULAS 1-8

Algoritmos e Estruturas de Dados II

Caminho Mínimo de Fonte Única em Grafos sem Pesos Negativos

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv];

ESTRUTURAS DISCRETAS (INF 1631) GRAFOS. 1. O que é um grafo? Defina um grafo orientado. Defina um grafo não-orientado.

Teoria dos Grafos Aula 23

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Otimização em Grafos

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Grafos: caminhos (matriz adjacência)

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Grafos COM11087-Tópicos Especiais em Programação II

Algoritmos em Grafos COM11087-Tópicos Especiais em Programação I

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Algoritmo de Dijkstra (um para todos ; arestas de peso não negativo ; guloso)

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Problemas de Fluxo em Redes

Introdução aos Algoritmos e Estruturas de Dados. 2 o Teste - A

Grafos. Notas. Notas. Notas. Notas. Algoritmos elementares. Representação de grafos Lista de adjacências Matriz de adjacências Atributos

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DA REPESCAGEM DO 1 o TESTE

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Algoritmo de Kruskal. Algoritmo de Kruskal. Floresta geradora 26. Subfloresta S 20.3

Algoritmo de Dijkstra Wikipédia, a enciclopédia livre

Caminho Mínimo de Fonte Única em Grafos com Pesos Negativos Letícia Rodrigues Bueno

Divisão e Conquista: Par de Pontos mais Próximo

Busca em Largura. Adaptado de Humberto C. B. Oliveira

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

SCC-210 Algoritmos Avançados. Capítulo 9 Grafos. Adaptado por João Luís G. Rosa

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

Estruturas de Dados Grafos

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

IPRJ PROJETO E ANÁLISE DE ALGORITMOS LISTA DE EXERCÍCIOS 10

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Programação Dinâmica. Prof. Anderson Almeida Ferreira

Facebook. Um grafo é uma rede. Estrutura de dados fundamental em Informática, tal como listas e árvores.

Análise e Síntese de Algoritmos. Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

CIC 110 Análise e Projeto de Algoritmos I

QUESTÕES DE PROVAS ANTIGAS

Teoria dos Grafos Caminhos. Profª. Alessandra Martins Coelho

MATEMÁTICA DISCRETA. Patrícia Ribeiro 2018/2019. Departamento de Matemática, ESTSetúbal 1 / 47

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Melhores momentos AULA 2. Otimização Combinatória p. 71

Transcrição:

Análise e Síntese de Algoritmos Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25 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ůva, Krusal e Prim Caminhos mais curtos com fonte única (CLR, Cap. 24) Algoritmos de Dstra e Bellman-Ford Caminhos mais curtos entre todos os pares (CLR, Cap. 25) Solução Recursiva, Algoritmos de Floyd-Warshall e Johnson 26/27 Análise e Síntese de Algoritmos 2 1

Resumo Caminhos Mais Curtos entre Todos os Pares (APSPs) Definições Soluções recursivas Algoritmo de Floyd-Warshall Fecho Transitivo Algoritmo de Johnson 26/27 Análise e Síntese de Algoritmos 3 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 Dstra, assumindo cada vértice como fonte: O(V E lg V) (que é O(V 3 lg V) se grafo é denso) Se pesos negativos Utilizar algoritmo de Bellman-Ford, assumindo cada vértice como fonte: O(V 2 E) (que é O(V 4 ) se grafo é denso) Objectivo: Encontrar algoritmos mais eficientes 26/27 Análise e Síntese de Algoritmos 4 2

APSPs Definições Representação: utilização de matriz de adjacências Pesos dos arcos: matriz (n x n) W = (w ) w $ = # peso do arco (i, j) "' se i = j se i & se i & ( i, j) ( i, j) ( E % E Representação dos caminhos mais curtos: matriz (n x n) D = (d ) d é o peso do caminho mais curto entre os vértices i e j d = δ(v i,v j ) j e j e 26/27 Análise e Síntese de Algoritmos 5 APSPs Definições Representação de caminhos mais curtos Matriz de predecessores = (π ) π : 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 ) V { j $ V : # " NIL} {} i #, i = E {( #, j) : j " V {i}} #, i = #, i Sub-grafo induzido pela linha i de Exemplo 26/27 Análise e Síntese de Algoritmos 6 3

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 (m) que contém não mais do que m arcos: d Com m =, existe caminho de i para j se e só se i = j # se i = j d = " % se i $ j Para m 1, ( m 1) { { + w j } = min{ di w j } ( m) ( m 1) ( m 1) = min d,min di 1" " n d + 1" " n w jj = 26/27 Análise e Síntese de Algoritmos 7 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 Extend-Shortest-Paths(D,W) n = rows[w] D : matriz (n x n) for i = 1 to n for j = 1 to n d' = for = 1 to n ' ' d = min d,di + return D ( w ) Complexidade: Θ(n 3 ) p/ cada matriz; Total: Θ(n 4 ) 26/27 Análise e Síntese de Algoritmos 8 j 4

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) : Θ(n 4 ) OBS: é possível melhorar complexidade reduzindo número de matrizes calculadas: Θ(n 3 lg n) A cada iteração, calcular D (2i) em função de D (i) e de D (i) 26/27 Análise e Síntese de Algoritmos 9 APSPs Algoritmo de Floyd-Warshall Caracterização de um caminho mais curto Vértices intermédios de caminho p = v 1,v 2,,v, {v 2,,v -1 } Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,,} e seja p um caminho mais curto (p é simples) Se não é vértice intermédio de p, então todos os vértices intermédios de p estão em {1,,-1} Se é vértice intermédio de p, então existem caminhos p 1 e p 2, respectivamente de i para e de para j com vértices intermédios em {1,,} não é vértice intermédio de p 1 e de p 2 p 1 e p 2 com vértices intermédios em {1,,-1} 26/27 Análise e Síntese de Algoritmos 1 5

APSPs Algoritmo de Floyd-Warshall i p 1 p 2 j Formulação Vértices entre 1 e -1 # w d = " ( % 1) ( % 1) ( % 1) min d,di + dj se = se $ 1 Vértices entre 1 e 26/27 Análise e Síntese de Algoritmos 11 APSPs Algoritmo de Floyd-Warshall Floyd-Warshall(W) n = rows[w] D () = W for = 1 to n for i = 1 to n for j = 1 to n d return D (n) = min ( 1) ( 1) ( 1) d,di + dj Complexidade: Θ(n 3 ) Exemplo 26/27 Análise e Síntese de Algoritmos 12 6

Fecho Transitivo de um Grafo Dirigido Dado um grafo G = (V, E) dirigido, o fecho transitivo é definido por G* = (V, E*) tal que, E*={(i, j): existe caminho de i para j em G} Algoritmo: Atribuir a cada arco peso 1 e utilizar algoritmo de Floyd- Warshall Se d, então (i, j) E* Complexidade: Θ(n 3 ) 26/27 Análise e Síntese de Algoritmos 13 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,,}, t = 1 Caso contrário, t = Formulação: # se i & j e ( i, j) = " 1 se i = j ou ( i, j) t % E $ E t 1 ( $ 1) ( $ 1) ( $ 1) = t # ti " tj se Complexidade: Θ(n 3 ) (mas constantes menores) Exemplo 26/27 Análise e Síntese de Algoritmos 14 7

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 t = 1 else t = for = 1 to n for i = 1 to n for j = 1 to n 1 t return T (n) = t ( 1) ( 1) # ti " tj 26/27 Análise e Síntese de Algoritmos 15 APSPs Algoritmo de Johnson Utiliza algoritmos de Dstra e de Bellman-Ford Baseado em re-pesagem dos arcos Se arcos com pesos não negativos, utilizar Dstra 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 26/27 Análise e Síntese de Algoritmos 16 8

APSPs Algoritmo de Johnson Dado G = (V, E), com função de pesos w e de repesagem h: V R, seja w (u, v) = w(u, v) + h(u) - h(v) Seja p = v,v 1,,v. Então w(p) = δ(v, v ) se e só se w (p) = δ (v, v ) = δ(v, v ) + h(v ) - h(v ) Existe ciclo negativo com w se e só se existe ciclo negativo com w ( p) = w( p) + h( v ) h w ' w' v ( p) = " w' ( v i 1,v i) = = i= 1 "( w( v i 1,v i) + h( vi 1) h( vi ) i= 1 " w ( v,v ) + h( v ) h( v ) = w( p) + h( v ) h( v ) i 1 i i= 1 26/27 Análise e Síntese de Algoritmos 17 APSPs Algoritmo de Johnson ( p) = ( v,v ) " w' ( p) = '( v, ) w v Hipótese: existe p z, caminho mais curto de v para v com w w' p z < w' p Então: ( p ) + h( v ) h( v ) = w' ( p ) < w' ( p) = w( p) + h( v ) h( v ) w z z O que implica ( p ) w( p) w z < Mas p é caminho mais curto com w; contradição OBS: Para quaisquer caminhos p 1, p 2 entre v e v, verifica-se w(p 1 ) < w(p 2 ) w (p 1 ) < w (p 2 ) 26/27 Análise e Síntese de Algoritmos 18 9

APSPs Algoritmo de Johnson ( p) = ( v,v ) " w' ( p) = '( v, ) w v Semelhante: Admitir p z como caminho mais curto de v para v com w (ou considerar observação anterior) Existe ciclo negativo com w se e só se existe com w w' c = " v,v1, K,v ; v = v; w c < ( c) = w( c) + h( v ) h( v ) w( c) = 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) 26/27 Análise e Síntese de Algoritmos 19 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) = 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) 24.1 26/27 Análise e Síntese de Algoritmos 2 1

APSPs Algoritmo de Johnson Executar Dstra 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) 26/27 Análise e Síntese de Algoritmos 21 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 Dstra(G,w,v); calcular δ (u, v) d uv = δ (u, v) + h(v) - h(u) return D 26/27 Análise e Síntese de Algoritmos 22 11

APSPs Algoritmo de Johnson Complexidade: Bellman-Ford: O(V E) Executar Dstra 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 26/27 Análise e Síntese de Algoritmos 23 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) 26/27 Análise e Síntese de Algoritmos 24 12