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

Documentos relacionados
Acessibilidade e Fecho Transitivo de Grafos Dirigidos

Melhores momentos AULAS 1-8

Fluxos em redes: o Problema do Fluxo máximo

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

Calculando distâncias

Projeto e Análise de Algoritmos

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

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

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

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

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

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

Melhores momentos AULA 12

Melhores momentos AULA 15

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

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

INF 1010 Estruturas de Dados Avançadas

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

Melhores momentos AULA 5

Grafos - Representação

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

Melhores momentos AULA 4

Algoritmos e Estruturas de Dados LEE 2015/16. Teoria de Grafos e Algoritmos em Grafos 2ª Parte

Algoritmos e Estruturas de Dados LEE 2013/14. Teoria de Grafos e Algoritmos em Grafos 2ª Parte

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

Teoria dos Grafos Caminhos. Profª. Alessandra Martins Coelho

INF 1010 Estruturas de Dados Avançadas

Grafos Procura (1) AED (IST/DEEC) 44. Grafos Procura (2) Procurar em grafos é equivalente a percorrer labirintos

Design Patterns (Factory Method, Prototype, Singleton)

SSC 0721 Teste e Inspeção de Software

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Melhores momentos AULA 1

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

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

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

Melhores momentos AULA 14

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

Algoritmos em Grafos: Conectividade

Percursos em um grafo

Algoritmos e Estruturas de Dados. Décima primeira aula: Árvores chanfradas

Grafos - Representação

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

SIN Exemplo de Prova do Conteúdo Semestral

Análise e Síntese de Algoritmos

Projeto e Análise de Algoritmos Estruturas de Dados Básicas em C

Listas ligadas/listas encadeadas

Percursos em um grafo

Árvores Binárias e Busca. Jeane Melo

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

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

Algoritmos de pesquisa

Pesquisa em Grafos. Pedro Ribeiro 2016/2017 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2016/ / 52

INF 1010 Estruturas de Dados Avançadas

Prova Final de Linguagens de Programação - DCC024B - Sistemas de Informação

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

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Teoria dos Grafos Aula 5

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

Análise e Projeto de Algoritmos

BCC204 - Teoria dos Grafos

AED 2002/2003 p.1/19. Tipos Abstractos. Necessidade de tipos de dados abstractos Objectos Pilhas FIFOs e filas

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

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

Projeto e Análise de Algoritmos

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

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

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados LEE 2013/14. Objecto abstracto Dois tipos de entidades. Vértices representam

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados MEEC 2012/13. Objecto abstracto Dois tipos de entidades. Vértices representam

Estruturas (Registros)

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

AED 2002/2003 p.1/16. Tabelas de Dispersão. Funçoes de dispersão Encadeamento externo Procura linear Double hashing Eficiência da procura

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

Por que C? Ferramentas Recomendadas. Padrões

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 2. Nelma Moreira (DCC-FC) Fundamentos de Linguagens de Programação Aula 2 2 / 12

Teoria dos Grafos. Grafos Eulerianos

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

Representações de Grafos

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

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

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

INTRODUÇÃO À REPRESENTAÇÃO E ANÁLISE DE GRAFOS COM A API JUNG

Universidade Federal de Mato Grosso Estrutura de Dados II

Árvores & Árvores Binárias

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

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

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

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

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

DFS: Depth-First Search (pesquisa em profundidade) Percursos e Conectividade em Grafos Depth-First Search. Implementação de DFS

Testes de correção (de defeitos)

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas

Recursividade. Prof. Jesus José de Oliveira Neto

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Pesquisa em profundidade. 1 - Grafos não dirigidos

Transcrição:

1 Componentes fortemente conexos

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua)

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos:

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho]

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho] Algoritmo de Kosaraju (década de 80)

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho] Algoritmo de Kosaraju (década de 80) [O(n + m)]

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho] Algoritmo de Kosaraju (década de 80) [O(n + m)] Algoritmo de Tarjan (1972)

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho] Algoritmo de Kosaraju (década de 80) [O(n + m)] Algoritmo de Tarjan (1972) [O(n + m)]

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho] Algoritmo de Kosaraju (década de 80) [O(n + m)] Algoritmo de Tarjan (1972) [O(n + m)] Algoritmo de Gabow (1999)

1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 2. Algoritmos para identificação de componented fortemente conexos: Calculamos o fecho transitivo de G e calculamos [custo do fecho transitivo número de arcos no fecho] Algoritmo de Kosaraju (década de 80) [O(n + m)] Algoritmo de Tarjan (1972) [O(n + m)] Algoritmo de Gabow (1999) [O(n + m)]

2 Algoritmo de Kosaraju

2 Algoritmo de Kosaraju 1. Invertemos G

2 Algoritmo de Kosaraju 1. Invertemos G 2. Executamos uma BeP e determinamos post[]

2 Algoritmo de Kosaraju 1. Invertemos G 2. Executamos uma BeP e determinamos post[] 3. Executamos uma BeP na ordem dada por post[] invertida

3 Programa 19.10, Algoritmo de Kosaraju

3 Programa 19.10, Algoritmo de Kosaraju static int post[maxv], postr[maxv]; static int cnt0, cnt1; void SCdfsR(Graph G, int w) { link t; G->sc[w] = cnt1; for (t = G->adj[w]; t!= NULL; t = t->next) if (G->sc[t->v] == -1) SCdfsR(G, t->v); post[cnt0++] = w; }

4 Programa 19.10, Algoritmo de Kosaraju (cont.)

4 Programa 19.10, Algoritmo de Kosaraju (cont.) int GRAPHsc(Graph G) { int v; Graph R = GRAPHreverse(G); cnt0 = 0; cnt1 = 0; for (v = 0; v < G->V; v++) R->sc[v] = -1; for (v = 0; v < G->V; v++) if (R->sc[v] == -1) SCdfsR(R, v); cnt0 = 0; cnt1 = 0; for (v = 0; v < G->V; v++) G->sc[v] = -1; for (v = 0; v < G->V; v++) postr[v] = post[v]; for (v = G->V-1; v >=0; v--) if (G->sc[postR[v]] == -1) { SCdfsR(G, postr[v]); cnt1++; } GRAPHdestroy(R); return cnt1; }

5 Programa 19.10, Algoritmo de Kosaraju (cont.)

5 Programa 19.10, Algoritmo de Kosaraju (cont.) int GRAPHstrongreach(Graph G, int s, int t) { return G->sc[s] == G->sc[t]; }

6 Exemplo; grafo da Figura 19.28

6 Exemplo; grafo da Figura 19.28 13 vertices, 22 arcs 0: 6 1 5 0 1: 1 2: 3 0 2 3: 2 5 3 4: 2 11 3 4 5: 4 5 6: 4 9 6 7: 8 6 7 8: 9 7 8 9: 10 11 9 10: 12 10 11: 12 11 12: 9 12

7 Exemplo, Figura 19.28; Reverso de G

7 Exemplo, Figura 19.28; Reverso de G 0-0 tree 1-1 tree 0-2 tree 1-0 cross 2-4 tree 9-9 tree 4-6 tree 9-12 tree 6-7 tree 12-11 tree 7-8 tree 11-9 back 8-7 back 11-4 cross 6-0 cross 12-10 tree 4-5 tree 10-9 cross 5-3 tree 9-8 cross 3-4 back 9-6 cross 3-2 cross 5-0 cross 2-3 down

8 Exemplo, Figura 19.28

8 Exemplo, Figura 19.28 v: 0 1 2 3 4 5 6 7 8 9 10 11 12 pre[]: 0 8 1 7 2 6 3 4 5 9 12 11 10 post[]: 8 7 6 3 5 4 2 0 1 11 10 12 9 st[]: 0 1 0 5 2 4 4 6 7 9 12 12 9

9 Exemplo, Figura 19.28

9 Exemplo, Figura 19.28 9-9 tree 5-4 cross 9-10 tree 2-0 cross 10-12 tree 4-11 cross 12-9 cross 4-3 down 9-11 tree 6-9 cross 11-12 cross 0-1 cross 1-1 tree 0-5 down 0-0 tree 7-7 tree 0-6 tree 7-8 tree 6-4 tree 8-9 cross 4-2 tree 8-7 cross 2-3 tree 7-6 cross 3-2 cross 3-5 tree

10 Algoritmo de Kosaraju

10 Algoritmo de Kosaraju Propriedade 1 (Propriedade 19.14). O método de Kosaraju encontra os componentes fortemente conexos de G em tempo O(n + m).

10 Algoritmo de Kosaraju Propriedade 1 (Propriedade 19.14). O método de Kosaraju encontra os componentes fortemente conexos de G em tempo O(n + m). Demonstração. (... )

11 Algoritmo de Tarjan, Programa 19.11

11 Algoritmo de Tarjan, Programa 19.11 void SCdfsR(Graph G, int w) { link t; int v, min; pre[w] = cnt0++; low[w] = pre[w]; min = low[w]; s[n++] = w; for (t = G->adj[w]; t!= NULL; t = t->next) { if (pre[t->v] == -1) SCdfsR(G, t->v); if (low[t->v] < min) min = low[t->v]; } if (min < low[w]) { low[w] = min; return; } do { G->sc[(v = s[--n])] = cnt1; low[v] = G->V; } while (s[n]!= w); cnt1++; }

12 Algoritmo de Tarjan; Exemplo da Fig. 19.29

12 Algoritmo de Tarjan; Exemplo da Fig. 19.29 13 vertices, 22 edges 0: 5 1 6 0 1: 1 2: 0 3 2 3: 5 2 3 4: 3 11 2 4 5: 4 5 6: 9 4 6 7: 6 8 7 8: 7 9 8 9: 11 10 9 10: 12 10 11: 12 11 12: 9 12

13 Algoritmo de Tarjan; Exemplo da Fig. 19.29

13 Algoritmo de Tarjan; Exemplo da Fig. 19.29 0-0 tree 4-2 down 0-5 tree 0-1 tree 5-4 tree 0-6 tree 4-3 tree 6-9 back 3-5 back 6-4 cross 3-2 tree 7-7 tree 2-0 back 7-6 cross 2-3 back 7-8 tree 4-11 tree 8-7 cross 11-12 tree 8-9 cross 12-9 tree 9-11 back 9-10 tree 10-12 back

14 Algoritmo de Tarjan; Exemplo da Fig. 19.29

14 Algoritmo de Tarjan; Exemplo da Fig. 19.29 pre[]: 0 9 4 3 2 1 10 11 12 7 8 5 6 low[]: 0 9 0 0 0 0 0 11 11 5 6 5 5 st[]: 0 0 3 4 5 0 0 7 7 12 9 4 11 sc[]: 2 1 2 2 2 2 2 3 3 0 0 0 0

15 Algoritmo de Tarjan

15 Algoritmo de Tarjan Propriedade 2 (Propriedade 19.15). O método de Tarjan encontra os componentes fortemente conexos de G em tempo O(n + m).

15 Algoritmo de Tarjan Propriedade 2 (Propriedade 19.15). O método de Tarjan encontra os componentes fortemente conexos de G em tempo O(n + m). Demonstração. (... )

16 Algoritmo de Gabow, Programa 19.12

16 Algoritmo de Gabow, Programa 19.12 void SCdfsR(Graph G, int w) { link t; int v; pre[w] = cnt0++; s[n++] = w; path[p++] = w; for (t = G->adj[w]; t!= NULL; t = t->next) if (pre[t->v] == -1) SCdfsR(G, t->v); else if (G->sc[t->v] == -1) while (pre[path[p-1]] > pre[t->v]) p--; if (path[p-1]!= w) return; else p--; do G->sc[s[--N]] = cnt1; while (s[n]!= w); cnt1++; }

17 Algoritmo de Gabow

17 Algoritmo de Gabow Propriedade 3 (Propriedade 19.16). O método de Gabow encontra os componentes fortemente conexos de G em tempo O(n + m).

17 Algoritmo de Gabow Propriedade 3 (Propriedade 19.16). O método de Gabow encontra os componentes fortemente conexos de G em tempo O(n + m). Demonstração. (... )