Buscar

05 busca em grafos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Otimização em Redes
Allexandre Fortes S. Reis
Coordenadoria de Engenharia de Produção
Departamento de Engenharia Mecânica
Campus Santo Antônio
Universidade Federal de São João Del Rei
5 de setembro de 2017
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 1 / 45
Conteúdo
1
Busca em Grafos
2
Busca em Profundidade - DFS
3
Busca em Largura - BFS
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 2 / 45
Busca em Grafos
Definição
Pode ser definida como a examinação de vértices e arestas de um grafo.
O projeto de bons algoritmos para determinação de estruturas ou proprieda-
des de grafos depende fortemente do domínio destas técnicas.
Terminologia
i Uma aresta ou vértice ainda não examinados são marcados como não explorados
ou não visitados;
ii Inicialmente, todos os vértices e arestas são marcados como não explorados;
iii Após terem sido examinados, os mesmos são marcados como explorados ou
visitados;
iv Ao final, todos os vértices e arestas são marcados como explorados (no caso
de uma busca completa).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 3 / 45
Busca em Grafos
Entrada: Grafo G = (N,A), vértice inicial i
1 Marque o vértice i como explorado;
2 enquanto existe j ∈ N com uma aresta {j, k} não explorada faça
3 Escolha o vértice j e explore a arestas {j, k} ;
4 se k não é marcado então
5 marque k;
6 fim
7 fim
Algoritmo 1: Algoritmo de Busca Genérica em Grafos
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 4 / 45
Busca em Grafos
Tipos
Dependendo do critério utilizado para escolha dos vértices e arestas a serem
examinados, diferentes tipos de buscas são desenvolvidos a partir da busca
genérica. Basicamente, duas buscas completas em grafos são essenciais:
i Busca em Profundidade (ou DFS � Depth-First Search);
ii Busca em Largura (ou BFS � Breadth-First Search).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 5 / 45
Busca em Profundidade - DFS
Características
A Busca em Profundidade explora todos os vértices de um grafo, usando
como critério o vértice visitado mais recentemente e não marcado. Utiliza
uma pilha explícita ou recursividade para guiar a busca.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 6 / 45
Busca em Profundidade - DFS
Entrada: Grafo G = (N,A), vértice inicial i
1 Marque o vértice i como explorado;
2 enquanto existe j vizinho de i faça
3 se j é marcado como não explorado então
4 Explore a aresta {i, j} ;
5 marque j como explorado;
6 DFS(G, j); //chamada recursiva
7 senão
8 se {i, j} não foi explorada ainda então
9 Explore a aresta {i, j} ;
10 fim
11 fim
12 fim
Algoritmo 2: Algoritmo de Busca em Profundidade - DFS
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 7 / 45
Busca em Profundidade - DFS
Algoritmo de Tarjan - GND
Durante a Busca em Profundidade de um grafo, o Algoritmo de Tarjan (1972)
propõe que pode-se numerar os vértices de acordo com o início e término desta
exploração; As diferentes situações nos permitem estabelecer uma classificação dos
arestas:
i Arestas de Árvore: Satisfazem ao primeiro se do algoritmo anterior (linha 3), ou seja, levam
à exploração de vértices ainda não visitados;
ii Arestas de Retorno: Demais arestas. Formam ciclos, pois levam a vértices já visitados.
Árvore de Profundidade
A subárvore de G formada pelas arestas de árvore é chamada de Árvore de
Profundidade de G.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 8 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(1) Aresta {1, 2}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 9 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(2) Aresta {2, 3}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 10 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(3) Aresta {3, 1}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 11 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(4) Aresta {3, 4}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 12 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(5) Aresta {4, 5}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 13 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(6) Aresta {5, 3}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 14 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(7) Aresta {3, 6}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 15 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
(8) Aresta {3, 7}.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 16 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Não-direcionado
Grago original e sua respectiva Árvore de Profundidade.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 17 / 45
Busca em Profundidade - DFS
Entrada: Grafo G = (N,A), vértice inicial i
1 enquanto existe i não explorado faça
2 DFS(G, i);
3 fim
Algoritmo 3: Algoritmo DFS para GD
Algoritmo de Tarjan - GD
Novamente, o Algoritmo de Tarjan propõe que, ao se explorar um grafo direcionado
G usando a DFS, pode-se categorizar os arcos;
Sejam o vértice i a origem do arco o vértice j o destino da mesmo:
i Arestas de Avanço: Caso j seja descendente de i na floresta;
ii Arestas de Retorno: Caso i seja descendente de j na floresta;
iii Arestas de Cruzamento: Caso j não seja descendente de i e nem i seja descendente de j na
floresta;
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 18 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(1) Arco (1, 2).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 19 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(2) Arco (2, 3).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 20 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(3) Arco (3, 6).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 21 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(4) Arco (6, 2).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 22 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(5) Arco (1, 3).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 23 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(6) Arco (4, 3).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 24 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
(7) Arco (4, 5).
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 25 / 45
Busca em Profundidade - DFS
Exemplo - Grafo Direcionado
Grafo original e respectivo conjunto de árvores, ou floresta de profundidade.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 26 / 45
Aplicações - DFS
Detecção de Ciclos
Ao se executar o Algoritmo de Tarjan ou o DFS, basta que seja detectado
ao menos um arco de retorno, para se identificar que existe pelo menos um
ciclo no Grafo.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 27 / 45
Aplicações - DFS
Detecção de Componentes Fortemente Conexas
Uma Componente Fortemente Conexa é um subconjunto maximal de vértices de um grafo
direcionado,o que significa que, para todo par de vértices i e j existe um caminho orientado
de j a i e vice-versa;
Durante a execução da DFS, podemos rotular os vértices de acordo com sua ordem de
exploração (índice superior, em preto);
Os vértices ainda não examinados totalmente, ou seja, ainda empilhados, permanecerão
assim até que seja determinada sua componente conexa;
Cada vértice também será rotulado com o menor valor de exploração entre os vértices
alcançáveis (índice inferior, em verde);
Ao final da exploração de um vértice v, se os dois rótulos forem iguais, então todos os
vértices presentes na pilha pertencem a uma mesma componente.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 28 / 45
Aplicações - DFS
Detecção de Componentes Fortemente Conexas
Uma Componente Fortemente Conexa é um subconjunto maximal de vértices de um grafo
direcionado, o que significa que, para todo par de vértices i e j existe um caminho orientado
de j a i e vice-versa;
Durante a execução da DFS, podemos rotular os vértices de acordo com sua ordem de
exploração (índice superior, em preto);
Os vértices ainda não examinados totalmente, ou seja, ainda empilhados, permanecerão
assim até que seja determinada sua componente conexa;
Cada vértice também será rotulado com o menor valor de exploração entre os vértices
alcançáveis (índice inferior, em verde);
Ao final da exploração de um vértice v, se os dois rótulos forem iguais, então todos os
vértices presentes na pilha pertencem a uma mesma componente.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 28 / 45
Aplicações - DFS
Detecção de Vértices de Articulação
Um vértice j é um vértice de articulação se sua remoção do grafo conexo aumentar o número de
componentes conexos.
O Algoritmo de Tarjan pode ser utilizado para detectar estes vértices em grafos conexos, não
orientados e sem laços ou arestas paralelas.
Considerando a árvore de profundidade T e a ordem de exploração dos vértices obtidas pela
aplicação da DFS, tem-se:
A raiz será um vértice de articulação se possuir pelo menos dois filhos em T ;
Cada um dos demais vértices i será um vértice de articulação se possuir pelo menos um
filho sem retorno para nenhum dos vértices ancestrais de i
Os vértices C e H são vértices de articulação.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 29 / 45
Aplicações - DFS
Detecção de Vértices de Articulação
Um vértice j é um vértice de articulação se sua remoção do grafo conexo aumentar o número de
componentes conexos.
O Algoritmo de Tarjan pode ser utilizado para detectar estes vértices em grafos conexos, não
orientados e sem laços ou arestas paralelas.
Considerando a árvore de profundidade T e a ordem de exploração dos vértices obtidas pela
aplicação da DFS, tem-se:
A raiz será um vértice de articulação se possuir pelo menos dois filhos em T ;
Cada um dos demais vértices i será um vértice de articulação se possuir pelo menos um
filho sem retorno para nenhum dos vértices ancestrais de i
Os vértices C e H são vértices de articulação.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 29 / 45
Aplicações - DFS
Detecção de Arestas de Articulação
Uma aresta é uma aresta de articulação ou ponte se sua remoção do grafo conexo aumentar o
número de componentes conexos.
Considerando a árvore de profundidade T e a ordem de exploração dos vértices obtidas pela
aplicação da DFS, tem-se:
Nenhuma aresta de retorno pode ser uma aresta de articulação;
Uma aresta (i, j) será uma aresta de articulação se o vértice j não possuir retorno para
nenhum de seus vértices ancestrais.
As arestas {C,E} e {H,G} são arestas de articulação
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 30 / 45
Aplicações - DFS
Detecção de Arestas de Articulação
Uma aresta é uma aresta de articulação ou ponte se sua remoção do grafo conexo aumentar o
número de componentes conexos.
Considerando a árvore de profundidade T e a ordem de exploração dos vértices obtidas pela
aplicação da DFS, tem-se:
Nenhuma aresta de retorno pode ser uma aresta de articulação;
Uma aresta (i, j) será uma aresta de articulação se o vértice j não possuir retorno para
nenhum de seus vértices ancestrais.
As arestas {C,E} e {H,G} são arestas de articulação
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 30 / 45
Busca em Largura - BFS
Características
A Busca em Largura explora todos os vértices de um grafo, usando como critério
o vértice visitado menos recentemente e não marcado. Utiliza uma fila guiar
a busca. Atuação em camadas:
i Inicialmente são considerados os vértices com distância 0 do vértice inicial;
ii Na iteração 1 são explorados os vértices com distância 1. Prosseguindo, de modo genérico,
na iteração d será adicionada uma camada com todos os vértices com distância d do vértice
inicial;
iii Cada novo vértice explorado é adicionado no final de uma fila Q;
iv Cada vértice da fila é removido depois que toda a vizinhança for visitada;
v A busca termina quando a fila se torna vazia.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 31 / 45
Busca em Largura
Entrada: Grafo G = (N,A), vértice inicial i
1 Crie uma fila Q vazia;
2 Marque o vértice i como explorado;
3 enquanto Q 6= ∅ faça
4 i← remove primeiro elemento de Q;
5 para todo vértice j vizinho de i faça
6 se j é marcado como nao explorado então
7 Explore a aresta {i, j} ;
8 Insira j em Q;
9 Marque j como explorado;
10 senão
11 se {i, j} não foi explorada ainda então
12 Explore a aresta {i, j} ;
13 fim
14 fim
15 fim
16 fim
Algoritmo 4: Algoritmo de Busca em Largura - BFS
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 32 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Inclusão de 1
Q = 1
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 33 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {1, 2}
Q = 2
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 34 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {1, 3}
Q = 2, 3
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 35 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {2, 3}
Q = 3
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 36 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {3, 4}
Q = 4
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 37 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {3, 5}
Q = 4, 5
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 38 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {3, 6}
Q = 4, 5, 6
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 39 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {3, 7}
Q = 3, 7
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 40 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
(1) Aresta {4, 5}
Q = 5, 6, 7
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 41 / 45
Busca em Largura - BFS
Exemplo - Grafo Não-direcionado
Grafo original e sua respectiva Árvore de Profundidade
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 42 / 45
Exercício
Aplique os os algoritmos DFS e BFS no grafo abaixo, à partir do nó 7.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 43 / 45
Dúvidas? Valar joll	orisO que faremos 
hoje professor? Esclarecer todas
 as dúvidas.
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 44 / 45
Referências
(1) Notas de aula Professor Dr. Marco Antônio Carvalho (DECOM/UFOP);
(2) Notas de aula Professor Dr. Gustavo Peixoto Silva (DECOM/UFOP);
(3) Goldbarg, Marco e Goldbarg, Elizabeth. Grafos: Conceitos, algoritmos e apli-
cações (2012);
Allexandre Fortes S. Reis (UFSJ) Otimização em Redes 5 de setembro de 2017 45 / 45
	Busca em Grafos
	Busca em Profundidade - DFS
	Busca em Largura - BFS

Outros materiais