Análise e Síntese de Algoritmos

Slides:



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

Grafos Orientados (digrafos)
Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Antonio Dirceu Rabelo de Vasconcelos Filho
CAMINHAMENTO EM GRAFOS (CONTINUAÇÃO)
Fluxo em Redes Prof. Ricardo R. Santos.
Grafos – Parte 2 Projeto e Análise de Algoritmos Aline Vasconcelos
Análise de Decisão Aplicada a Gerência Empresarial – UVA Grafos - V
Grafos Introdução
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.
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
Estrutura de Dados e Algoritmos e Programação e Computadores II
CONCEITOS BÁSICOS DE GRAFOS
Árvores.
Grafos – Parte 1 Projeto e Análise de Algoritmos Aline Vasconcelos
Pesquisa em Memória Primária
Busca Cega (Exaustiva)
Grafos - Definições Preliminares - Formas de Representação
Ronaldo Celso Messias Correia –
Capítulo 3 - Russell e Norvig
Árvore Geradora Mínima
Ordenação Topológica Luis Raphael Mareze Marcus Vinicius Lemos Chagas
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
Baseado em: The Algorithm Design Manual Steven S. Skiena
Algoritmos em Grafos.
Grafos Árvores Geradoras.
Caminhamento em Grafos: Busca em Largura e Busca em Profundidade
Exercícios PAA- Grafos
Prova AA.
Operações com grafos União Exemplo
Análise e Síntese de Algoritmos
Introdução aos Agentes Inteligentes Busca Cega (Exaustiva)
Katia S. Guimarães Busca em Grafos Katia S. Guimarães
Universidade Federal de Mato Grosso do Sul Departamento de Computação e Estatística Circuitos de Euler em Paralelo Universidade Federal de Mato Grosso.
Análise e Síntese de Algoritmos
Msc. Daniele Carvalho Oliveira
CAMINHOS MAIS CURTOS EM GRAFOS
Katia S. Guimarães Busca em Grafos Katia S. Guimarães
Resolução de Problemas de Busca
Introdução a Algoritmos em Grafos.

Análise e Síntese de Algoritmos
Problema MST Método Genérico Guloso usando Estratégia do Corte
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.
Celso C. Ribeiro Caroline T. Rocha
Running time: O(n + m) BFS(G) 1 for every vertex s of G not explored yet 2 do Enqueue(S,s) 3 mark vertex s as visited 4 while S is not empty do 5 u ← Dequeue(S);
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Grafos Anjolina Grisi de Oliveira 2005
Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE ©
 Prof. Miguel Gabriel Prazeres de Carvalho 1. 2 Redes Sociais GPS Para o correio. Para Viajantes. Pesquisas Biológicas. Distribuição de Tarefas. Recomendações.
Grafos Prof. Miguel Gabriel Prazeres de Carvalho.
Transcrição da apresentação:

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

Análise e Síntese de Algoritmos Resumo Algoritmos elementares em grafos Representação de grafos Procura em Largura Primeiro Breadth-First Search (BFS) Propriedades da BFS Procura em Profundidade Primeiro Depth-First Search (DFS) Propriedades da DFS Ordenação Topológica Componentes Fortemente Ligados Strongly Connected Components (SCCs) Exemplos 2003/2004 Análise e Síntese de Algoritmos

Grafos — Definição e Representação Grafo definido por um conjunto V de vértices e um conjunto E de arcos, G = (V, E) Arcos representam ligações entre pares de vértices E  V  V Grafo esparso: |E| << |V  V| Representação dos arcos Matriz de adjacências: arcos representados por matriz Para grafos densos Listas de adjacências: arcos representados por listas Para grafos esparsos Grafos podem ser dirigidos ou não dirigidos Existência (ou não) da noção de direcção nos arcos 2003/2004 Análise e Síntese de Algoritmos

Grafos — Definição e Representação Listas vs. Matriz de adjacências Não Dirigido: 1 2 4 3 Dirigido: 1 2 4 3 2003/2004 Análise e Síntese de Algoritmos

Grafos — Definição e Representação Listas de adjacências: Grafos não dirigidos Tamanho das listas é 2 E Grafos dirigidos Tamanho das listas éE  Tamanho total das listas de adjacências é O(V+E) Grafos pesados: Função de pesos: w: E  R Permite associar peso com cada arco 2003/2004 Análise e Síntese de Algoritmos

Procura em Largura Primeiro (BFS) Dados G = (V, E) e vértice fonte s, BFS explora sistematicamente vértices de G para descobrir todos os vértices atingíveis a partir de s Cálculo da distância: menor número de arcos de s para cada vértice atingível Identificação de árvore BF: caminho mais curto de s para cada vértice atingível v Fronteira entre nós descobertos e não descobertos é expandida uniformemente Nós à distância k descobertos antes de qualquer nó à distância k+1 2003/2004 Análise e Síntese de Algoritmos

Procura em Largura Primeiro (BFS) Implementação: color[v]: cor do vértice v, branco, cinzento e preto p[v]: predecessor de v na árvore BF d[v]: tempo de descoberta de v Outras definições: d(s,v): menor distância de s a v menor número de arcos em qualquer caminho de s para v 2003/2004 Análise e Síntese de Algoritmos

Procura em Largura Primeiro (BFS) Algoritmo: function BFS(G,s) for each vertex u  in V[G] - { s } color[u] = white; d[u] = ; p[u] = NIL color[s] = gray; d[s] = 0; p[s] = NIL Q = { s } while Q   u = Head[Q] for each v  Adj[u] if color[v] = white color[v] = gray; d[v] = d[u] + 1; p[v] = u Enqueue (Q, v) Dequeue (Q) color[u] = black inicializações ciclo principal 2003/2004 Análise e Síntese de Algoritmos

Procura em Largura Primeiro (BFS) Tempo de execução: O(V + E) Inicialização: O(V) Para cada vértice Colocado na fila apenas 1 vez: O(V) Lista de adjacências visitada 1 vez: O(E) Exemplo 2003/2004 Análise e Síntese de Algoritmos

Procura em Largura Primeiro (BFS) Resultado: Para qualquer arco (u,v): Se u atingível, então v atingível caminho mais curto para v não pode ser superior a caminho mais curto para u mais arco (u,v) Se u não atingível, então resultado é válido (independentemente de v ser atingível) … No final da BFS: d[u] = (s,u), para todo o vértice u de V 2003/2004 Análise e Síntese de Algoritmos

Procura em Largura Primeiro (BFS) Árvores BF: (sub-grafo de G) Vértices atingíveis a partir de s Arcos que definem a relação predecessor da BFS 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Grafo pesquisado dando prioridade aos arcos dos vértices mais recentemente visitados Resultado da procura: Floresta DF: Floresta DF composta por várias árvores DF Implementação: color[u]: cor do vértice (branco, cinzento, preto) d[u]: tempo de início (de visita do vértice) f[u]: tempo de fim (de visita do vértice) 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Algoritmo: function DFS(G) for each vertex u  V[G] color[u] = white; p[u] = NIL time = 1 for each vertex u  V[G] if color[u] = white DFS-Visit(u) function DFS-Visit(u) color[u] = gray; d[u] = time; time = time + 1 for each v  Adj[u] if color[v] = white p[v] = u; DFS-Visit(v) color[u] = black; f[u] = time; time = time + 1 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Tempo de execução: O(V+E) Inicialização: O(V) Chamadas a DFS-Visit dentro de DFS: O(V) Arcos analisados em DFS-Visit: (E) Chamadas a DFS-Visit dentro de DFS-Visit: O(V) Exemplo: 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Resultado: Numa DFS de G = (V, E), para cada par de vértices u e v apenas um dos 3 casos seguintes é verdade: Os intervalos [d[u], f[u]] e [d[v], f[v]] são disjuntos [d[u], f[u]] está contido em [d[v], f[v]] e u é descendente de v na árvore DF [d[v], f[v]] está contido em [d[u], f[u]] e v é descendente de u na árvore DF d[u] d[v] f[u] v é descendente de u ( f[v] < f[u] ) intervalos são disjuntos 1 f[v] 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Classificação de arcos (u,v): Arcos de árvore: (tree edges) arcos na floresta DF, Gp (u,v) é arco de árvore se v foi visitado devido ao arco (u,v) ser visitado Arcos para trás: (back edges) ligam vértice u a vértice v antecessor na mesma árvore DF Arcos para a frente: (forward edges) ligam vértice v a vértice descendente na mesma árvore DF Arcos de cruzamento: (cross edges) Na mesma árvode DF, se u (ou v) não antecessor de v (ou u) Entre árvores DF diferentes 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Classificação de cada arco (u,v): Arco de árvore: d[u]  d[v]  f[v]  f[u] ; color[v] = white; visita v a partir de u Arco para trás: d[v]  d[u]  f[u]  f[v] ; color[v] = gray Arco para a frente: d[u]  d[v]  f[v]  f[u] ; color[v] = black Arco de cruzamento: d[v]  f[v]  d[u]  f[u] ; color[v] = black 2003/2004 Análise e Síntese de Algoritmos

Procura Profundidade Primeiro (DFS) Dado G = (V, E), não dirigido, cada arco é arco de árvore ou arco para trás i.e., não existem arcos para a frente e de cruzamento Numa floresta DFS, v é descendente de u se e só se quando u é descoberto existe um caminho de vértices brancos de u para v v descendente de u  existe caminho de vértices brancos de u para v Qualquer vértice w descendente de u verifica [d[w], f[w]]  [d[u], f[u]], pelo que w é branco quando u é descoberto … 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Recapitular Representação de grafos Listas de adjacências Matrizes de adjacências Procuras em grafos BFS Tempos de descoberta (d[]) DFS Tempos de início (d[]) e de fim (f[]) 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Definições Dado grafo G = (V, E), um caminho p é uma sequência <v0,v1,…,vk> tal que para todo o i, 0ik-1, (vi,vi+1)E Se existe um caminho p de u para v,então v diz-se atingível a partir de u via p Um ciclo num grafo G = (V,E) é um caminho <v0,v1,…,vk>, tal que v0 = vk Um grafo dirigido G = (V,E) diz-se acíclico se não tem ciclos Directed acyclic graph (DAG) 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Ordenação Topológica Uma ordenação topológica de um DAG G=(V,E) é uma ordenação de todos os vértices tal que se (u,v)E então u aparece antes de v na ordenação Algoritmos: Eliminação de vértices Utilizando informação de DFS 2003/2004 Análise e Síntese de Algoritmos

Ordenação Topológica (Cont.) Algoritmo: function Topological-Sort-1(G) L =  // Lista de vértices Q =  // Fila de vértices for each v  G if v sem arcos de entrada (w,v) Enqueue(Q,v) while Q   u = Head(Q) Eliminar todos os arcos (u,v) Dequeue(Q) Colocar u no fim da lista L Inicialização O(V) Colocar vértices em L O(V+E) 2003/2004 Análise e Síntese de Algoritmos

Ordenação Topológica (Cont.) Algoritmo: Tempo de execução DFS: O(V+E) Exemplo function Topological-Sort-2(G) Executar DFS(G) para cálculo do tempo de fim f[v] para cada v Para cada vértice terminado, inserir no princípio de lista ligada return lista ligada de vértices 2003/2004 Análise e Síntese de Algoritmos

Ordenação Topológica (Cont.) Intuição: 1 2 4 3 Na DFS: Tempo de fim de 3 é sempre  Tempo de fim de 4 Tempo de fim de 2 é sempre  Tempo de fim de 4 Tempo de fim de 1 é sempre  Tempo de fim de 2,4 Sem ciclos, se existe caminho de u para v, verifica-se sempre f[u]  f[v] ! 2003/2004 Análise e Síntese de Algoritmos

Componentes Fortemente Ligados Definição: Dado grafo dirigido G = (V,E) um componente fortemente ligado (SCC) é um conjunto máximo de vértices U  V, tal que para u,vU, u é atingível a partir de v, e v é atingível a partir de u Obs: vértice simples é SCC Outras definições: Grafo transposto de G = (V,E) GT = (V, ET) tal que: OBS: G e GT têm os mesmos SCCs 2003/2004 Análise e Síntese de Algoritmos

Componentes Fortemente Ligados Algoritmo: Tempo de execução: O(V+E) Exemplo function SCCs(G) Executar DFS(G) para cálculo do tempo de fim f[v] para cada v Representar GT Executar DFS(GT) (no ciclo principal de DFS considerar os vértices por ordem decrescente de tempo de fim de DFS(G)) Cada árvore de DFS encontrada corresponde a novo SCC 2003/2004 Análise e Síntese de Algoritmos

Componentes Fortemente Ligados Intuição: SCC 1 SCC 2 SCC 3 maior f  Em G: SCC 3 SCC 2 SCC 1 árvore DFS Em GT: 2003/2004 Análise e Síntese de Algoritmos

Componentes Fortemente Ligados 1 2 4 3 5 6 8 7 9 10 12 11 G: f[] = 24 max f > max f GT: 1 2 4 3 5 6 8 7 9 10 12 11 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Problemas Algoritmo eficiente para determinar se grafo G = (V, E) é bipartido ? Grafo G é bipartido se V pode ser dividido em L e R, tal que todos os arcos de G incidentes em 1 vértice de L e 1 vértice de R Algoritmo eficiente para calcular o diâmetro de uma árvore T = (V, E) ? Diâmetro: Sol. 1: Duas BFSs Sol. 2: Vértice adicional e 1 BFS 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Outro Problema Algoritmo eficiente para determinar se um grafo G=(V, E) é semi-ligado Um grafo dirigido G = (V,E) diz-se semi-ligado se para qualquer par de vértices (u,v), u atingível a partir de v ou v atingível a partir de u 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Revisão Algoritmos elementares em grafos Representação de grafos BFS; DFS Algoritmos Propriedades Aplicações: Ordenação topológica Componentes fortemente ligados A seguir: Estruturas de dados para conjuntos disjuntos (CLRS, Cap. 21) Árvores abrangentes de menor custo (CLRS, Cap. 23) 2003/2004 Análise e Síntese de Algoritmos