Grafos - FACOMmadriana/EBD/Didatica.pdf1 Denic‚oesŸ Basicas· de Grafos Denic‚aoŸ de Grafo...
Transcript of Grafos - FACOMmadriana/EBD/Didatica.pdf1 Denic‚oesŸ Basicas· de Grafos Denic‚aoŸ de Grafo...
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
GrafosOrdenacao TopologicaComponentes Conexos
Maria Adriana Vidigal de Lima
Fevereiro - 2009
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
1 Definicoes Basicas de GrafosDefinicao de GrafoListas de Adjacencias de Grafos
2 Busca em ProfundidadeTecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
3 Ordenacao TopologicaAplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
4 Componentes ConexosGrafo TranspostoAlgoritmo
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Definicao de GrafoListas de Adjacencias de Grafos
Exemplos de Aplicacao em Computacao
Verificar a existencia de um caminho entre um objeto eoutro (uma cidade e outra)
Calcular a distancia entre um objeto e outro (pontos de ummetro)
Determinar quais objetos podem ser alcancados a partirde um determinado objeto (navegacao na web)
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Definicao de GrafoListas de Adjacencias de Grafos
Representacao de Grafos
Um grafo e constituıdo de um conjunto de vertices e umconjunto de arestas conectando pares de vertices. Um grafopode ser orientado ou nao orientado.
54
211
3
654
32
grafo não−orientadografo orientado
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Definicao de GrafoListas de Adjacencias de Grafos
Definicao de GrafoUm grafo orientado e um par (V , E) em que V e um conjunto finitode vertices e E e um conjunto de arestas com uma relacao binariaem V .
2 3
4 5 6
1
E={(1,2),(1,4),(2,5),(3,5),(3,6),(4,2),(5,4),(6,6)}
V={1,2,3,4,5,6}
Um grafo nao orientado e um par (V , E) em que E e constituıdo depares de vertices nao ordenados. As arestas (u, v) e (v , u) saoconsideradas como unica.
3
1 2
4 5
V = {1,2,3,4,5}
E = {(1,2),(1,4),(2,3),(2,4),(2,5),(3,5),(4,5)}
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Definicao de GrafoListas de Adjacencias de Grafos
Listas de Adjacencias de Grafos
Um grafo G = (V , E) pode ser representado por uma lista deadjacencias, definida a partir de um arranjo de listas, umapara cada vertice em V .
Para cada u ∈ V , a lista de adjacencias Adj[u] contem(ponteiros para) todos os vertices v que podem ser alcancadosdiretamente a partir de u (existe uma aresta (u, v) ∈ E).
A ordem de armazenamento dos vertices em cada lista deadjacencias e arbitraria.
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Definicao de GrafoListas de Adjacencias de Grafos
Representacao de Listas de Adjacencias
45
2 3
4 5 6
3
1 1 2
1
2
3
4
5
2
2
2
2
1
1
5
5
5
4
4
4
3
3
grafo não−orientadografo orientado
lista de adjacênciaslista de adjacências
1
2
3
4
5
2
2
4
6 6
6 5
5
4
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Definicao de GrafoListas de Adjacencias de Grafos
Ciclos
Em um grafo orientado, um caminho (v0, v1, v2, . . . , vk ) forma umciclo se v0 = vk e o caminho contem pelo menos uma aresta.
5
4
23
0 1
O caminho (0,1,2,3,0) forma um ciclo
Em um grafo nao orientado, v0, v1, v2, . . . , vk forma um ciclo sev0 = vk e o caminho contem pelo menos tres arestas.
Em ambos os casos, o ciclo e simples se os vertices v1, v2, . . . , vksao distintos. Um grafo sem ciclos e um grafo acıclico.
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Busca em Profundidade
A busca em profundidade e um algoritmo para caminhar no grafo,com a estrategia de buscar o mais profundo no grafo, sempre quepossıvel.
Na busca, as arestas sao exploradas a partir do vertice v maisrecentemente descoberto que ainda possui arestas nao exploradassaindo dele. Quando nao existem mais arestas a serem exploradas,a busca anda para tras.
A busca em profundidade e a base para os algoritmos de:
ordenacao topologica
obtencao dos componentes fortemente conectados
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Busca em Profundidade
Sempre que um vertice v e descoberto a partir de um u, a buscaregistra este evento atribuindo u a uma estrutura chamadaantecessor[v ].
Para acompanhar o andamento da busca, cada vertice recebe ascores branca, cinza ou preta. No inıcio os vertices estao todosbrancos.
O tempo de descoberta do vertice (tornado cinza) e registrado emd [v ] e o tempo de termino do exame da lista de adjacentes de v eregistrado em t [v ] (nesse momento v se torna preto).
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Progresso do Percurso em Profundidade
2 3
0
( 2 / )( 1 / )( 1 / )
( / )( / )( / )( / )
( / )
( / )( / )
( / )( / )
32
0
32
0
(a)
1
(c)
11
(b)
Ao lado de cada vertice e indicado (tempo-de-descoberta / tempo-de-termino).
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Progresso do Percurso em Profundidade
( / )3
0
( 1 / )
(f)
2( 3 / 4 )
1
( 2 / 5 )
( 3 / 4 ) 2
(e)
( / )
1
3
0
( 1 / ) ( 2 / )
(d)
( 3 / )
( 2 / )( 1 / )
0
2 3
1
( / )
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Progresso do Percurso em Profundidade
( 1 / 6 )
0
32( 3 / 4 )
1
( 2 / 5 )
(h)
( 7 / )
( 2 / 5 )
1
( 3 / 4 ) 2 3 ( / )
0
( 1 / 6 )
(g)
( 2 / 5 )
1
( 3 / 4 ) 2
0
( 1 / 6 )
(i)
3 ( 7 / 8 )
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Algoritmo de Busca em Profundidade
BuscaEmProfundidade(G)
1 For Each vertice u em V
2 Do cor[u] := BRANCO
3 antecessor[u] := NIL
4 tempo := 0
5 For Each vertice u em V
6 Do If cor[u] = BRANCO
7 Then VisitaBEP(u)
Fim
VisitaBEP(u)
1 cor[u] := CINZA
2 tempo := tempo + 1
3 d[u] := tempo
4 For Each v em Adj[u]
5 Do If cor[v] = BRANCO
6 Then antecessor[v] := u
7 VisitaBEP(v)
8 cor[u] := PRETO
9 tempo := tempo + 1
10 t[u] := tempo
Fim
Sempre que um vertice v e descoberto durante uma varredura na lista de adjacenciasde um vertice ja descoberto u, a busca em profundidade registra u como antecessorde v .
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Classificacao das Arestas
A Busca em Profundidade pode ser utilizada para aclassificacao das arestas de um grafo G = (V , E).
Durante a Busca em Profundidade, cada aresta (u, v) pode serclassificada na primeira vez em que e percorrida, atraves dacor do vertice v alcancado:
Branco indica uma aresta de arvore;
Cinza indica uma aresta de retorno;
Preto indica uma aresta de avanco quando d [u] < d [v ] e indicauma aresta de cruzamento quanto d [u] > d [v ]
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Tecnicas da Busca em ProfundidadeAlgoritmoClassificacao das Arestas
Classificacao das ArestasA classificacao das arestas pode ser utilizada para verificar se umgrafo orientado e acıclico ou contem um ou mais ciclos.
Se uma aresta de retorno for encontrada durante a Busca emProfundidade, entao existe um ciclo. O grafo abaixo contem um ciclo,e ao lado de cada aresta e mostrado o tipo (arv , ret , avan ou cruz).
ret
cruzarvret
arv
( 7 / 8 )
( 1 / 6 )
2
1
3
0
( 3 / 4 )
( 2 / 5 )
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Ordenacao Topologica
A Ordenacao Topologica de um grafo orientado acıclicoG = (V , E) e uma ordenacao linear de todos os seus verticestal que se G contem uma aresta (u, v ) entao u aparece antesde v .
Uma ordenacao topologica de um grafo fornece a ordem emque as atividades devem ser processadas.
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Ordenacao Topologica
Os grafos orientados acıclicos sao usados para indicarprecedencias entre eventos. Uma aresta direcionada numgrafo orientado acıclico indica que a atividade u deve serrealizada antes da v .
calças
cinto
paleto
gravata
camisa
meias
relogio
sapatos
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Aplicacao do Algoritmo de Busca em Profundidade
Aplicacao do algoritmo de Busca em Profundidade para amarcacao dos tempos de descoberta e termino em cadavertice de um trecho do exemplo anterior:
paleto
calças
cintocinto
calças
gravata
paleto
cinto
calças
gravata
paleto
( / )
( / )
( / )
( / )
( / )
camisa
(2 / )
(1 / )
gravata
camisa
( / )
( / )
( / )(1 / ) ( / )
( / )( / )
( / )
camisa
(c)(b)(a)
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Aplicacao do Algoritmo de Busca em Profundidade
cinto
calçascalças
cinto
calças
cinto
(2 / )
(1 / )
gravata
camisa
( / )
( / )
(d)
paleto(3 / )
(2 / 5)
(3 / 4)
gravata
paleto
(3 / 4)
paleto
(f)(e)
( / )
( / )
camisa
(1 / )
(2 / )
(1 / )
gravata
camisa
( / )
( / )
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Aplicacao do Algoritmo de Busca em Profundidade
calças calças calças
(i)
(2 / 5)
(3 / 4)
gravata
paleto
( / )
camisa
(1 / )
(g)
cinto
(6 / ) (2 / 5)
(3 / 4)
gravata
paleto
( / )
camisa
(1 / )
(6 / 7)
cinto
(h)
cinto
(6 / 7)
( / )
paleto
gravata
(3 / 4)
(2 / 5)
camisa
(1 / 8 )
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Aplicacao do Algoritmo de Busca em Profundidade
(k)
(1 / 8 )
camisa
(2 / 5)
(3 / 4)
gravata
paleto
(6 / 7)
cinto
(j)
calças
(9 / )
cinto
(6 / 7)
paleto
gravata
(3 / 4)
(2 / 5)
camisa
(1 / 8 )
calças
(9 / 10 )
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Apresentacao de Grafo com Ordenacao Topologica
calças gravatacintocamisa paleto
(3 / 4)(2 / 5)(6 / 7)(9 / 10 ) (1 / 8 )
paleto
cinto
(6 / 7)gravata
(3 / 4)
(2 / 5)
camisa
(1 / 8 )
calças
(9 / 10 )
O grafo com ordenacao topologica apresenta seus vertices organizados daesquerda para a direita, em ordem de tempo de termino decrescente.
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Algoritmo de Ordenacao Topologica
O algoritmo simples a seguir ordena topologicamente um grafoacıclico orientado utilizando o algoritmo de Busca emProfundidade:
OrdenacaoTopologica(G)
1 Chamar BuscaEmProfundidade(G) para calcular o tempo
de termino t[v] para cada vertice v
2 A medida que cada vertice e terminado, inserir o
vertice a frente de uma lista ligada
3 Retornar a lista ligada de vertices
Fim
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Aplicacao do Algoritmo de Busca em ProfundidadeAlgoritmo de Ordenacao Topologica
Exercıcio Dirigido
Mostre a ordenacao de vertices produzida pelo algoritmoOrdenacaoTopologica(G) quando ele e executado sobre ografo acıclico orientado abaixo:
calças
cinto
paleto
gravata
camisa
meias
relogio
sapatos
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Componentes Conexos de um Grafo
Os componentes conexos de um grafo sao as classesde equivalencia de vertices sob a relacao ”e acessıvel apartir de”.Um grafo orientado e fortemente conectado se cada umde dois vertices quaisquer e acessıvel a partir do outro.Os componentes fortemente conectados de um grafoorientado sao as classes de equivalencia de vertices sob arelacao ”sao mutuamente acessıveis”.
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Componentes Conexos de um Grafo
Grafo orientado G e seus componentes fortementeconectados:
1
34
2
2
4
1
3
ConectadosComponentes Fortemente
Grafo G
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Definicao de Grafo Transposto
O algoritmo para a obtencao dos componentes fortementeconectados em um grafo orientado G utiliza o grafo transpostoGT de G.
Grafo Transposto
Seja o grafo orientado G = (V , E). O grafo transposto de G e definidocomo sendo o grafo GT = (V , ET ), onde ET = {(u, v) : (v , u) ∈ E}.
Isto e, ET contem as arestas de G com suas direcoesinvertidas.
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Exemplo de Grafo Transposto
Os grafos G e GT possuem os mesmos componentesfortemente conectados:
2
3
1
4
2
4
4
1
3
3
2
TGrafo G
1 2
34
1
Componentes Fortemente Conectados
Grafo G
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Algoritmo para Obtencao de ComponentesFortemente Conectados
O algoritmo simples a seguir apresenta o algoritmo para obteros componentes fortemente conectados utilizando a Busca emProfundidade:ObterCFC(G)
1 Chamar BuscaEmProfundidade(G) para calcular o tempo
de termino t[u] para cada vertice u
2 Gerar GT
3 Chamar BuscaEmProfundidade(GT), realizando a busca
a partir do vertice de maior t[u] obtido na linha 1.
Se a nova busca n~ao alcancar todos os vertices,
reiniciar uma nova busca em profundidade a partir do
vertice de maior t[u] dentre os restantes
4 Retornar os vertices de cada arvore da floresta
obtida na busca da linha 3 como um componente
fortemente conectado separado
Fim
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Execucao do Algoritmo
A execucao do algoritmo no grafo G se inicia no vertice 0 e saocalculados os tempos de descoberta e termino. O grafotransposto GT e gerado, e a busca em profundidade em GT
resulta em duas arvores: raiz em 0 e raiz em 3.
1
2
0 3
arv
arvret
arv
2
1
3
0
( 1 / 8 ) ( 2 / 7 )
( 3 / 6 )( 4 / 5 )
avan
Grafo Orientado
0
3
1
2
arv
ret
arv
Grafo Transposto
( 1 / 6 ) ( 3 / 4 )
( 7 / 8 ) ( 2 / 5 )
cruz
cruz
Arvores Resultantes
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Execucao do Algoritmo
As duas arvores: raiz em 0 e raiz em 3 representam oscomponentes fortemente conectados do grafo, e um grafo decomponentes acıclicos pode ser obtido pela condensacao doscomponentes fortemente conectados de G.
2
1
30
3
012
Aciclico
Grafo de ComponentesArvores Resultantes
cruz
cruz
( 2 / 5 )( 7 / 8 )
( 3 / 4 )( 1 / 6 )
Grafo Transposto
arv
ret
arv
2
1
3
0
Grafo Orientado
avan
( 4 / 5 ) ( 3 / 6 )
( 2 / 7 )( 1 / 8 )
0
3
1
2
arv
retarv
arv
Maria Adriana Vidigal de Lima Grafos
Definicoes Basicas de GrafosBusca em Profundidade
Ordenacao TopologicaComponentes Conexos
Grafo TranspostoAlgoritmo
Bibliografia Utilizada
Nıvio Ziviani. Projeto de Algoritmos com Implementacoesem Pascal e C.
Thomas H. Cormen, Charles E. Leiserson, Ronald L.Rivest, Clifford Stein. Algoritmos - Teoria e Pratica.
Maria Adriana Vidigal de Lima Grafos