Melhores momentos AULA 15

Documentos relacionados
Melhores momentos AULA 14

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

AULA 14. Problema. Melhores momentos. Simulação. Simulação. Simulação. Simulação

Calculando distâncias

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

Melhores momentos AULA 12

Melhores momentos AULAS 1-8

Melhores momentos AULA 4

Melhores momentos AULA 4

Na última aula... Procurando um caminho. Certicados. Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t

Na última aula... Algoritmos em Grafos 1º sem / 1

Melhores momentos AULA 5

AULA 4. Procurando um caminho. Melhores momentos. Certicados. Certicado de inexistência

Na última aula... Procurando um caminho. Certificados. Procurando um caminho

Na última aula... Algoritmos em Grafos 1º sem / 80

MAC328 Algoritmos em grafos (4/6/2004) Caminhos mínimos

Filas de prioridade e heapsort

Grafos Caminhos mais curtos

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

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

Fluxos em redes: o Problema do Fluxo máximo

Caminhos mínimos de única origem

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

O grau de saída d + (v) de um vértice v é o número de arcos que tem

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

05 Grafos: ordenação topológica SCC0503 Algoritmos e Estruturas de Dados II

Melhores momentos AULA 1

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados LEE 2014/15. Algoritmos e Estruturas de Dados - C. Teoria de Grafos e Algoritmos em Grafos

Filas com prioridade - Introdução (1)

MAC328 Algoritmos em grafos (14/5/2004) Componentes fortemente conexos

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

QUESTÕES DE PROVAS ANTIGAS

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

Análise e Síntese de Algoritmos

Estruturas de dados elementares

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

Algoritmo de Dijkstra Estudo e Implementação

Acessibilidade e Fecho Transitivo de Grafos Dirigidos

INF 1010 Estruturas de Dados Avançadas

Representações de Grafos

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

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

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

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

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

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

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

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

INF 1010 Estruturas de Dados Avançadas

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Desafios de Programação TCC Turma A-1

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

Algoritmos de Caminho Mínimo Parte 1

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

CIC 111 Análise e Projeto de Algoritmos II

Análise e Síntese de Algoritmos

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

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

Caminhos mínimos de todos os pares

Universidade Federal de Alfenas

AED Algoritmos e Estruturas de Dados LEEC /2007. Teoria de Grafos e Algoritmos em Grafos

Oalgoritmo de Dijkstra

Teoria dos Grafos Aula 8

Grafos - Representação

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

INF 1010 Estruturas de Dados Avançadas

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

Grafos tipo abstrato de dados

SSC 0721 Teste e Inspeção de Software

Heap Sort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Projeto e Análise de Algoritmos

5COP096 TeoriadaComputação

AED2 - Aula 11 Problema da separação e quicksort

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36

INF 1010 Estruturas de Dados Avançadas

Teoria dos Grafos Aula 5

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Lista de Exercícios de CES-11 CTA - ITA - IEC

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

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

GRAFOS E DIGRAFOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

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

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

PCC173 - Otimização em Redes

Estruturas de Dados Grafos

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

Filas com prioridade - Introdução (1)

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

01 Grafos: parte 1 SCC0503 Algoritmos e Estruturas de Dados II

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

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

Grafos - Representação

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

Teoria dos Grafos Aula 22

INF111 Programação II Aulas 11, 12, 13 Ordenação

Limite assintótico para a ordenação, Ordenação em tempo linear

Transcrição:

Melhores momentos AULA 5

Arborescência de caminhos mínimos Uma arborescência com raiz s é de caminhos mínimos (= shortest-paths tree = SPT) se para todo vértice t que pode ser alcançado a partir de s, o único caminho de s a t na arborescência é um caminho simples mínimo 7 5 5 5

Problema O algoritmo de Dijkstra resolve o problema da SPT: Dado um vértice s de um digrafo com custos não-negativos nos arcos, encontrar uma SPT com raiz s 7 5 5 5

dijkstra Recebe digrafo G com custos não-negativos nos arcos e um vértice s Calcula uma arborescência de caminhos mínimos com raiz s. A arborescência é armazenada no vetor parnt As distâncias em relação a s são armazenadas no vetor cst void dijkstra(digraph G, Vertex s, Vertex parnt[], double cst[]);

Conclusão O consumo de tempo da função dijkstra é O(V + A) mais o consumo de tempo de execução de PQinit e PQfree, O(V) execuções de PQinsert, O(V) execuções de PQempty, O(V) execuções de PQdelmin, e O(A) execuções de PQdec.

AULA 6

Dijkstra para grafos esparços S. e.

Min-heap 8 nível 5 6 7 8 8 9 5 8 9 5 6 7 8 9 8 8 5 8 9

Rotina básica de manipulação de min-heap 5 8 nível 5 6 7 8 8 9 5 8 9 5 6 7 8 9 5 8 8 5 8 9

Rotina básica de manipulação de min-heap 8 5 nível 5 6 7 8 8 9 5 8 9 5 6 7 8 9 8 5 8 5 8 9

Rotina básica de manipulação de min-heap 8 8 nível 5 6 7 5 8 9 5 8 9 5 6 7 8 9 8 8 5 5 8 9

Rotina básica de manipulação de min-heap 8 8 nível 5 6 7 8 9 5 5 8 9 5 6 7 8 9 8 8 5 5 8 9

Rotina básica de manipulação de min-heap 8 8 nível 5 6 7 8 9 5 5 8 9 5 6 7 8 9 8 8 5 5 8 9

Implementação clássica Min-Heap O vetor qp é o "inverso"de pq: para cada vértice v, qp[v] é o único índice tal que pq[qp[v]] == v. É claro que qp[pq[i]] == i para todo i. static Vertex pq[maxv+]; static int N; static int qp[maxv];

PQinit, PQempty, PQinsert void PQinit(void) { N = ; } int PQempty(void) { return N == ; } void PQinsert(Vertex v) { } qp[v] = ++N; pq[n] = v; fixup(n);

PQdelmin e PQdec Vertex PQdelmin(void) { exch(, N); --N; fixdown(); return pq[n+]; } void PQdec(Vertex w) { } fixup(qp[w]);

exch e fixup static void exch(int i, int j) { Vertex t; t = pq[i]; pq[i] = pq[j]; pq[j] = t; qp[pq[i]] = i; qp[pq[j]] = j; } static void fixup(int i) { while (i> && cst[pq[i/]]>cst[pq[i]]){ } } exch(i/, i); i = i/;

fixdown static void fixdown(int i) { int j; while (*i <= N) { } } j = *i; if (j< N && cst[pq[j]] > cst[pq[j+]]) j++; if (cst[pq[i]] <= cst[pq[j]]) break; exch(i, j); i = j;

Conclusão O consumo de tempo da função dijkstra implementada com um min-heap é O(A lg V). Este consumo de tempo é ótimo para digrafos esparsos.

Outra implementação para digrafos esparsos void DIGRAPHsptD (Digraph G, Vertex s, Vertex parnt[ ], double cst[ ]) { Vertex v, w; link p; PQinit(); for (v = ; v < G->V; v++) { parnt[v] = -; 5 cst[v] = INFINITO; 6 PQinsert(v); } 7 parnt[s] = s; 8 cst[s] = ; 9 PQdec(s);

Outra implementação para digrafos esparsos while (!PQempty()) { v = PQdelmin(); if (cst[v] == INFINITO) break; for (p=g->adj[v];p!=null;p=p->next){ w = p->w; 5 if (cst[w] > cst[v] + p->cst){ 6 cst[w] = cst[v] + p->cst; 7 PQdec(w); 8 parnt[w] = v; } } } }

Caminhos mínimos em DAGs S 9.6

DAGs Um digrafo é acíclico se não tem ciclos Digrafos acíclicos também são conhecidos como DAGs (= directed acyclic graphs) Exemplo: um digrafo acíclico 5

DAGs Um digrafo é acíclico se não tem ciclos Digrafos acíclicos também são conhecidos como DAGs (= directed acyclic graphs) Exemplo: um digrafo que não é acíclico 5

DAGs Um digrafo é acíclico se não tem ciclos Digrafos acíclicos também são conhecidos como DAGs (= directed acyclic graphs) Exemplo: um digrafo que não é acíclico 5

Ordenaçao topológica Uma permutação dos vértices de um digrafo é uma seqüência em que cada vértice aparece uma e uma só vez Uma ordenação topológica (= topological sorting) de um digrafo é uma permutação ts[], ts[],..., ts[v-] dos seus vértices tal que todo arco tem a forma ts[i]-ts[j] com i < j ts[] é necessariamente uma fonte ts[v-] é necessariamente um sorvedouro

Exemplo i 5 ts[i] 5 5

Fato Para todo digrafo G, vale uma e apenas umas das seguintes armações: G possui um ciclo G é um DAG e, portanto, admite uma ordenação topológica

Problema Problema: Dado um vértice s de um DAG com custos possivelmente negativos nos arcos, encontrar, para cada vértice t que pode ser alcançado a partir de s, um caminho mínimo simples de s a t Problema: Dado um vértice s de um DAG com custos possivelmente negativos nos arcos, encontrar uma SPT com raiz s

Simulação i 5 ts[i] 5 5 5 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5 5

Simulação i 5 ts[i] 5 5 5

Simulação i 5 ts[i] 5 5 5

Simulação i 5 ts[i] 5 5 5

Simulação i 5 ts[i] 5 5 5

Simulação i 5 ts[i] 5 5 5

Simulação i 5 ts[i] 5 5

Simulação i 5 ts[i] 5 5

Simulação i 5 ts[i] 5 5

Simulação i 5 ts[i] 5 5

DAGmin A função DAGmin recebe um DAG G com custos possivelmente negativos e uma ordenação topológica ts de G. Recebe também um vértice s. Para cada vértice t, a função calcula o custo de um caminho de custo mínimo de sa t. Esse número é depositado em cst[t]. void DAGmin (Digraph G, Vertex ts[ ], Vertex s, double cst[ ])

void DAGmin DAGmin (Digraph G, Vertex ts[ ], Vertex s, double cst[ ]) { int i; Vertex v; link p; for (v= ; v < G->V; v++) cst[v] = INFINITO; cst[s] = ; 5 for (v = ts[i = ]; i < G->V; v = ts[i++]) 6 for (p=g->adj[v];p!=null;p=p->next) 7 if (cst[p->w] > cst[v] + p->cst) 8 cst[p->w] = cst[v] + p->cst; }

Consumo de tempo O consumo de tempo da função DAGmin é O(V + A).

Caminhos máximos em DAGs Do ponto de vista computacional, o problema de encontrar um caminho simples de custo máximo num digrafos com custos nos arcos é difícil. Mais precisamente, problema é NP-difícil como vocês verão no nal de Análise de Algoritmos. O problema torna-se fácil, entretanto, quando restrito a DAGs.

void DAGmax DAGmax (Digraph G, Vertex ts[ ], Vertex s, double cst[ ]) { int i; Vertex v; link p; for (v= ; v < G->V; v++) cst[v] = -INFINITO; cst[s] = ; 5 for (v= ts[i = ]; i < G->V; v = ts[i++]) 6 for (p=g->adj[v];p!=null;p=p->next) 7 if (cst[p->w] < cst[v] + p->cst) 8 cst[p->w] = cst[v] + p->cst; }

Consumo de tempo O consumo de tempo da função DAGmax é O(V + A).

Programação dinâmica

Programação dinâmica Propriedade (da subestrutura ótima) Se G é um digrafo com custo não-negativos nos arcos e v -v -v -... -v k é um caminho mínimo então v i -v i+ -... -v j é um caminho mínimo para i j k custo[v][w] = menor custo de uma caminho de v a w Propriedade O valor de custo[s][t] é min{custo[s][v] + custo[v][t] : v é vértice}

Programação dinâmica Propriedade (da subestrutura ótima) Se G é um digrafo com custo não-negativos nos arcos e v -v -v -... -v k é um caminho mínimo então v i -v i+ -... -v j é um caminho mínimo para i j k custo[v][w] = menor custo de uma caminho de v a w Propriedade O valor de custo[s][t] é min{custo[s][v] + custo[v][t] : v-t é arco}

Dijkstra em digrafos com custos negativos

Problema da SPT Problema: Dado um vértice s de um digrafo com custos possivelmente negativos nos arcos, encontrar uma SPT com raiz s Entra: 6 5 8 6 9 7 5

Problema da SPT Problema: Dado um vértice s de um digrafo com custos possivelmente negativos nos arcos, encontrar uma SPT com raiz s Sai: 5 8 6 9 7 5

Apelemos para Dijkstra 6 6 6 6 7 6 6

Apelemos para Dijkstra 6 6 6 6 7 6 6

Apelemos para Dijkstra 6 6 6 7 6 6

Apelemos para Dijkstra 6 6 6 7 6 6

Apelemos para Dijkstra 6 6 7 6 6

Apelemos para Dijkstra 6 6 7 6 6

Apelemos para Dijkstra 6 6 7 6 6

Apelemos para Dijkstra 6 6 7 6 6

Apelemos para Dijkstra 6 7 6 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Apelemos para Dijkstra 6 7 6

Opsss 6 7 6 O caminho mínimo de a tem custo e não...