Melhores momentos AULAS 1-8

Documentos relacionados
Melhores momentos AULA 5

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

Melhores momentos AULA 4

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

Melhores momentos AULA 4

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

Melhores momentos AULA 1

Calculando distâncias

Melhores momentos AULA 12

Melhores momentos AULA 15

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

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

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

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

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

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

INF 1010 Estruturas de Dados Avançadas

Melhores momentos AULA 14

Teoria dos Grafos Aula 8

INF 1010 Estruturas de Dados Avançadas

Teoria dos Grafos Aula 5

GRAFOS. Prof. André Backes. Como representar um conjunto de objetos e as suas relações?

Teoria dos Grafos Aula 2

Árvores Árvores Geradoras de Custo Mínimo 0/16

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

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

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

CI065 CI755 Algoritmos e Teoria dos Grafos

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

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

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

Representações de Grafos

Introdução à Teoria dos Grafos (MAC-5770) IME-USP Depto CC Profa. Yoshiko. Capítulo 3

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

CAP4. ELEMENTOS DA TEORIA DE GRAFOS. Grafo [graph]. Estrutura que consiste num par ordenado de conjuntos, G ( V, E) , sendo:

Estruturas de Dados Grafos

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

Grafos tipo abstrato de dados

Acessibilidade e Fecho Transitivo de Grafos Dirigidos

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

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

Sub-grafo. Árvore Geradora Mínima

Teoria dos Grafos Aula 6

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

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

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

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

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

Complexidade de Algoritmos

Teoria dos Grafos. Edson Prestes

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

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

CI065 CI755 Algoritmos e Teoria dos Grafos

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

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

grafo nós vértices arcos arestas

Análise e Síntese de Algoritmos

Teoria dos Grafos. Edson Prestes

Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa

AED2 - Aula 22 Busca em largura, cálculo de distâncias

GRAFOS E ALGORITMOS TEORIA DE GRAFOS

GRAFOS Aula 03 Representações de Grafos Max Pereira

Parte B Teoria dos Grafos

Grafos e Algoritmos de Busca

QUESTÕES DE PROVAS ANTIGAS

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

Aula 08. Estruturas de dados Árvore e Grafo

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

1.3 Isomorfismo 12 CAP. 1 CONCEITOS BÁSICOS

Projeto e Análise de Algoritmos

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

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

Teoria dos Grafos. Árvores Geradoras

Grafos Orientados (digrafos)

Implementação do TAD DiGrafo Ponderado usando Matriz de Adjacência. Profa. Dra. Denise Guliato FACOM - UFU

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

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

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

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Capítulo 5: Grafos Conexos. Departamento de Matemática Aplicada

Árvores Binárias e Busca. Jeane Melo

Teoria dos Grafos. Edson Prestes

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos

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

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

Análise de Algoritmos

Grafos - Motivação. Grafos - Motivação. Algoritmos e Estruturas de Dados II Introdução a Grafos

Árvores: Conceitos Básicos e Árvore Geradora

Teoria dos Grafos Aula 3

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45

Programa. 1 Parte 1 - Conjuntos e Aplicações. 1 Conjuntos. 4 Indução Matemática e Divisibilidade. 5 Congruências Lineares

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

Pesquisa Operacional. Teoria dos Grafos

Alg l ori r t i m t os e E str t u r tu t ra r s d e D ados I I Intr t o r duçã ç o ã a a Gr G a r f a o f s P of o a. M. C r C ist s ina n a /

Algoritmos e Estruturas de Dados II Introdução a Grafos. Divisão do arquivo

Definição e Conceitos Básicos

Conceitos Básicos da Teoria de Grafos

Transcrição:

Melhores momentos AULAS 1-8

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = e t = 1 a resposta é SIM 2 1 4 3 5

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = 5 e t = 4 a resposta é NÃO 2 1 4 3 5

Certicado de inexistência Exemplo: certicado de que não há caminho de 2 a 3 2 1 T 4 S 3 5

Conclusão Para quaisquer vértices s e t de um digrafo, vale uma e apenas umas das seguintes armações: existe um caminho de s a t existe st-corte (S, T) em que todo arco no corte tem ponta inicial em T e ponta nal em S.

Procurando um ciclo Problema: decidir se dado digrafo G possui um ciclo Exemplo: para o grafo a seguir a resposta é SIM 2 1 4 3 5

Procurando um ciclo Problema: decidir se dado digrafo G possui um ciclo Exemplo: para o grafo a seguir a resposta é SIM 2 1 4 3 5

Procurando um ciclo Problema: decidir se dado digrafo G possui um ciclo Exemplo: para o grafo a seguir a resposta é NÃO 2 1 4 3 5

Ordenação topológica i 1 2 3 4 5 ts[i] 3 2 4 5 1 2 1 4 3 5

Conclusão 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

Floresta DFS [,9] [1,15] 3 5 4 6 [1,8] [11,12] [13,14] 2 7 [2,5] [6,7] 1 [3,4]

AULA 9

Ciclos em grafos

Comprimento O comprimento de um caminho é o número de arcos no caminho, contanto-se as repetições. Exemplo: 2-4-1-3-5-4-5 tem comprimento 6 1 3 5 2 4

Comprimento O comprimento de um caminho é o número de arcos no caminho, contanto-se as repetições. Exemplo: 2-4-1-3-5 tem comprimento 4 1 3 5 2 4

Ciclos Um ciclo é trivial se tem comprimento 2 Num grafo, ciclos triviais são ignorados, pois usam os dois arcos de uma mesma aresta. Exemplo: 2-1-5-3-4-2 é um ciclo 2 1 4 3 5

Procurando um ciclo Problema: decidir se dado grafo G possui um ciclo (não trivial) Exemplo: para o grafo a seguir a resposta é SIM 2 1 4 3 5

Procurando um ciclo Problema: decidir se dado grafo G possui um ciclo (não trivial) Exemplo: para o grafo a seguir a resposta é SIM 2 1 4 3 5

Procurando um ciclo Problema: decidir se dado grafo G possui um ciclo Exemplo: para o grafo a seguir a resposta é NÃO 2 1 4 3 5

GRAPHcycle Recebe um grafo G e devolve 1 se existe um ciclo não-trivial em G e devolve em caso contrário Supõe que o grafo tem no máximo maxv vértices. int GRAPHcycle (Graph G);

Primeiro algoritmo int GRAPHcycle (Graph G) { Vertex v, w; link p; int output; 1 for (v = ; v < G>V; v++) 2 for(p=g>adj[v];p!=null;p=p>next){ 3 w = p>w; 4 if (v < w) { 5 GRAPHremoveA(G,w,v); 6 output = DIGRAPHpath(G,w,v); 7 GRAPHinsertA(G,w,v); 8 if (output == 1) return 1; } } 9 return ;

Consumo de tempo O consumo de tempo da função GRAPHcycle é A/2 vezes o consumo de tempo da função DIGRAPHpath. O consumo de tempo da função GRAPHcycle para vetor de listas de adjacência é O(A(V + A)). O consumo de tempo da função GRAPHcycle para matriz de adjacência é O(AV 2 ).

GRAPHcycle Vamos supor que nossos digrafos têm no máximo maxv vértices #dene maxv 1 static int cnt, parnt[maxv];

GRAPHcycle Recebe um grafo G e devolve 1 se existe um ciclo não-trivial em G e devolve em caso contrário int GRAPHcycle (Graph G); A função tem por base a seguinte observação: em relação a qualquer oresta DFS, todo arco de retorno que não é anti-paralelo a um arco da arborescência pertence a um ciclo não-trivial todo ciclo não trivial tem um arco de retorno que não é anti-paralelo a um arco da arborescência

Arcos de retorno 5 3 5 4 6 1 6 7 2 7 2 4 1 3

GRAPHcycle int GRAPHcycle (Graph G) { Vertex v; 1 for (v = ; v < G>V; v++) 2 lbl[v] = -1; 3 for (v= ; v < G>V,v++) 4 if (lbl[v] == -1) { 5 parnt[v] = v; 6 if (cycle3r(g,v) == 1) 7 return 1 ; 8 return ; }

cycle3r int cycle3r (Graph G, Vertex v) { link p; 1 lbl[v] = 1; 2 for (p = G>adj[v]; p!= NULL; p= p>next) 3 Vertex w = p>w; 4 if (lbl[w] == -1) { 5 parnt[w] = v; 6 if (cycle3r(g,w)==1) return 1; } 7 else if (parnt[w]!=v) return 1; } 8 return ; }

Consumo de tempo O consumo de tempo da função GRAPHcycle para vetor de listas de adjacência é O(V + A). O consumo de tempo da função GRAPHcycle para matriz de adjacência é O(V 2 ).

Florestas e árvores

Florestas Uma oresta (= forest) é um grafo sem ciclos não-triviais Exemplo: 2 1 5 8 4 9 6 3 1 7

Propriedades Para cada par s,t de vértices de uma árvore existe um e um só caminho simples de s a t. Toda árvore com V vértices tem exatamente V-1 arestas.

Conclusão Para todo grafo G, vale uma e apenas umas das seguintes armações: G possui um ciclo não trivial G é uma oresta

Componentes de grafos S 18.5

Grafos conexos Um grafo é conexo se e somente se, para cada par (s,t) de seus vértices, existe um caminho com origem s e término t Exemplo: um grafo conexo 2 1 5 8 4 9 6 3 1 7

Componentes de grafos Uma componente (= component) de um grafo é o subgrafo conexo maximal Exemplo: grafo com 4 componentes (conexos) 2 1 5 8 4 9 6 3 1 7

Contando componentes Problema: calcular o número de componente Exemplo: grafo com 4 componentes 2 1 5 8 4 9 6 3 1 7

Cálculo das componentes de grafos A função abaixo devolve o número de componentes do grafo G. #dene maxv 1 static int cc[maxv]; Além disso, ela armazena no vetor cc o número do componente a que o vértice pertence: se o vértice v pertence ao k-ésimo componente então cc[v] == k-1 int GRAPHcc (Graph G)

Exemplo v 1 2 3 4 5 6 7 8 9 1 cc[v] 1 2 3 3 2 3 2 2 1 5 8 4 9 6 3 1 7

GRAPHcc int GRAPHcc (Graph G) { Vertex v; int id = ; 1 for (v = ; v < G>V; v++) cc[v] = -1; 2 for (v = ; v < G>V; v++) 3 if (cc[v] == -1) 4 dfsrcc(g, v, id++); 5 return id; }

dfsrcc void dfsrcc (Graph G, Vertex v, int id){ link p; 1 cc[v] = id; 2 for (p=g>adj[v];p!=null;p=p>next) 3 if (cc[p>w] == -1) 4 dfsrcc(g, p>w, id); }

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