Você está na página 1de 56

Algoritmos em Grafos

Prof. Tarcisio Rocha

Livro Texto: Cormen, T., Leiserson, C., Rivest, R. and Stein, C. Algoritmos Teoria e Prtica, Elsevier, 2002.

Busca em Largura
Considere:
um grafo G = (V, E) um vrtice de origem s, Busca em largura:
explora sistematicamente as arestas de G at descobrir cada vrtice acessvel a partir de s; calcula a distncia (caminho mais curto) desde s at todos os vrtices acessveis a partir de s.

em largura
Descobre todos os vrtices distncia k a partir de s, antes de descobrir quaisquer vrtices distncia k + 1.

Busca em Largura
Controle do andamento do algoritmo
Utiliza trs tipos de marcaes para os vrtices
Vrtice branco um vrtice ainda no descoberto pelo algoritmo Vrtice cinza um vrtice que j foi descoberto pelo algoritmo mas que ainda possui vrtices adjacentes no descobertos. Vrtice preto um vrtice que j foi descoberto pelo algoritmo e que no possui nenhum vrtice adjacente que ainda no foi descoberto.

Busca em Largura
O Algoritmo:
G = (V,E) representado com o uso de listas de adjacncia. A cada vrtice v so adicionadas as seguintes informaes
cor[v] indica a cor do vrtice v [v] indica o vrtice predecessor de v, ou seja, o vrtice a partir do qual v foi descoberto d[v] indica a distncia entre s e v, onde s o vrtice de origem

O conjunto de vrtices de cor cinza mantido em uma fila Q do tipo FIFO (o primeiro a entrar o primeiro a sair)

Busca em Largura
O Algoritmo:

Busca em Largura
Exemplo

Busca em Profundidade
Tenta-se e explorar novos vrtices a partir do vrtice mais recentemente descoberto. Informaes
cor[v] indica a cor do vrtice v (branco, cinza ou preto) [v] indica o vrtice predecessor de v, ou seja, o vrtice a partir do qual v foi descoberto Dois carimbos de tempo: d[v] indica o tempo em que o vrtice v foi descoberto (pintado de cinza) f[v] indica o tempo em que o o algoritmo termina de examinar a lista de adjacncias de v (v pintado de preto) o d[v] e f[v] compartilham o mesmo contador de tempo o O contador de tempo um inteiro entre 1 e 2|V|

Busca em Profundidade

Busca em Profundidade

Busca em Profundidade
Propriedades
Produz informaes sobre a estrutura de um grafo
Floresta de rvores Estrutura de parnteses Classificao das arestas Arestas de rvore Arestas de retorno Arestas diretas Arestas cruzadas

Busca em Profundidade
Estrutura de Parnteses
Representao
A descoberta de um vrtice (u) representada por (u O trmino de um vrtice representado por u)

A histria de descobertas e trminos forma uma expresso bem formada

Retngulos: linha de tempo Aninhamento: parentesco

Busca em Profundidade
Classificao das Arestas
Aresta de rvore
Arestas na floresta.

Arestas de retorno
Arestas (u, v) que conectam u a um ancestral v em uma rvore.

Busca em Profundidade
Classificao das Arestas
Aresta diretas
Arestas (u, v) que conectam u a um descendente v em uma rvore.

Arestas cruzadas
Todas as outras arestas.

Busca em Profundidade
Classificao das Arestas
Aplicao
Ex: Descoberta de grafos orientados acclicos: UM GRAFO ORIENTADO ACCLICO SSE EM UMA BUSCA EM PROFUNDIDADE NO ENCONTRADA NENHUMA ARESTA DE RETORNO

Busca em Profundidade
Classificao das Arestas
Como classificar as arestas?
Cada aresta (u, v) pode ser classificada pela cor do vrtice v que alcanado pelo algoritmo BRANCO indica uma aresta de rvore CINZA indica uma aresta de retorno PRETO indica uma aresta direta ou cruzada

Busca em Profundidade
Classificao das Arestas
Grafos no orientados
Em uma busca em profundidade de um grafo G, toda aresta de G uma aresta de rvore ou uma aresta de retorno.

Ordenao Topolgica
Definio
A ordenao toplgica de um gao G=(VG, AG) uma ordenao linear de todos os seus vrtices tal que se G contm uma aresta (u, v), ento u aparece antes de v na ordenao. Pode ser vista como u

Aplicao
Grafos acclicos orientados (gaos)
Se o grafo no acclico, ento no possvel nenuma ordenao linear

Ordenao Topolgica
Algoritmo
Baseado no algoritmo de busca em profunidade (DFS)
1. 2. 3.

Chamar DFS(G) para calcular o tempo de trmino de f[v] para cada vrtice v medida que cada vrtice terminado, inserir o vrtice frente de uma lista ligada Devolva como redultado a lista ligada

Ordenao Topolgica
Exemplo
Ordenao topolgica de vesturio

Ordenao Topolgica
Exemplo
Ordenao topolgica de vesturio

Componentes Fortemente Conectados


Definio
Um componente fortemente conectado de um grafo G=(VG, AG) um conjunto mximo de vrtices C VG tal que, para todo par de vrtices u e v em C:
u acessvel a partir v v acessvel a partir u

Componentes Fortemente Conectados


O Algoritmo

rvores Geradoras Mnimas


Definio
rvore geradora na qual o somatrio dos pesos das suas arestas minimo (no existe uma outra rvore geradora que possua um somatrio de pesos menor) Exemplo
Menor uso de cabos na interconexo de componentes eltricos (o peso entre as arestas a distncia entre os componentes)

rvores Geradoras Mnimas


Algoritmo Genrio
Tipo guloso
Parte-se de um vrtice (subconjunto da rvore geradora) adicionando arestas seguras at completar a rvore

rvores Geradoras Mnimas


Algoritmo Genrio
Definies
Um corte (S, V-S) de um grafo G=(V,E) uma partio de V Uma aresta que cruza um corte leve se seu peso mnimo com relao a qualquer outra aresta que cruza o mesmo corte.

rvores Geradoras Mnimas


Algoritmo de Prim
Durante a execuo do algoritmo, todos os vrtices que esto em uma fila de prioridade mnima Q baseada em um campo chave Para cada vrtice v, chave[v] o peso mnimo de qualquer aresta que conecta v a um vrtice na rvore

w(u,v) peso da aresta que liga u a v

rvores Geradoras Mnimas


Exemplo
(4) (0) () () () () (4) (0) () () (8) ()

(8) (4) (0) (2)

() (8)

() (7)

(8) (4) (0) () (2)

() (8)

() (7)

()

(8)

()

(4)

(7)

(6)

(4)

rvores Geradoras Mnimas


(4) (0) (2) (10) (8) (7) (0) (4) (2) (10) (8) (7)

(7) (4) (0) (2)

(2) (8)

(4) (7)

(1) (4) (0) (10) (2)

(2) (8)

(4) (7)

(9)

(1) (4) (0) (2)

(2) (8)

(4) (7)

(1)

(2)

(4)

(9)

(1)

(2)

(4)

Caminhos Mais Curtos


O Algoritmo de Dijkstra
Calcula o caminho mais curto entre um vrtice de origem e os demais vrtices do grafo

Operao de relaxamento de aresta (RELAX)


Relaxar uma aresta (u,v) consiste em tentar melhorar o caminho mais curto para v encontrado at agora pela passagem atravs de u e, nesse caso, atualizar d[v] e [v] d[v] caminho mais curto da origem at v; [v] - antecessor de v

Caminhos Mais Curtos


O Algoritmo de Dijkstra

Caminhos Mais Curtos


O Algoritmo de Dijkstra

Colorao Aproximada
Um Algoritmo
Q - lista dos vrtices ordenados pelos seus graus EXTRACT-MAX(Q) retira de Q o vrtice de maior grau
COLORIR(G) 1 for cada u V[G] 2 do cor[u] 0 3 cor[r] 1 4 Q V[G] r 5 while Q 0 6 do u EXTRACT-MAX(Q) 7 cor min { i | cor[Adj[u]] i} 8 cor[u] cor

Colorao Aproximada
Exemplos de aplicao
Ex 1: Estipulao de horrios para realizao de provas
Disciplinas

. D1 D2 D3 D4 D5 D6 D7

D1 D2 D3 D4 D5 D6 D7 . * * * * * * . * * * * . * * * . * * * . * * * * . * * * * .

* = ocorrncia de alunos em comum

Colorao Aproximada
Exemplos de aplicao
Ex 1: Estipulao de horrios para realizao de provas
Disciplinas

. D1 D2 D3 D4 D5 D6 D7

D1 D2 D3 D4 D5 D6 D7 . * * * * * * . * * * * . * * * . * * * . * * * * . * * * * . Cor = horrio da prova

* = ocorrncia de alunos em comum

Colorao Aproximada
Exemplos de aplicao
Ex 2: Atribuibuio de armrios em uma creche
Crianas Horrios que esto na creche

. 7:00 8:00 9:00 10:00 11:00 12:00

1 * * * * * *

2 * -

3 * * * -

4 * * -

5 * *

6 * * * -

7 * * -

Colorao Aproximada
Exemplos de aplicao
Ex 2: Atribuibuio de armrios em uma creche
Crianas Horrios que esto na creche

. 7:00 8:00 9:00 10:00 11:00 12:00

1 * * * * * *

2 * -

3 * * * -

4 * * -

5 * *

6 * * * -

7 * * Cor = armrio

Fluxo Mximo em Redes


Tipos de Redes
Rede de computadores
Fluxo de dados

Rede eltrica
Fluxo de energia

Rede de esgoto
Fluxo de gua/dejetos

Rede de abastecimento de gua


Fluxo de gua potvel

Fluxo Mximo em Redes


Conceitos Bsicos
Origem (Fonte)
Produz material em uma taxa fixa

Sorvedor (Destino)
Consome material na mesma taxa da origem

Fluxo
Taxa na qual o material se move

Fluxo Mximo em Redes


Definies
Fluxo em rede
um grafo orientado G=(V, E) em que cada aresta (u, v) E tem uma capacidade no negativa c(u, v) 0 Distinguem-se dois vrtices em um fluxo em rede: Um vrtice de origem s Um vrtice sorvedor t

Fluxo Mximo em Redes


Propriedades
Um fluxo G uma funo de valor real f:VxV R que satisfaz as trs propriedades seguintes:
v, u

Fluxo Mximo em Redes


Definies
Fluxo total positivo que entra em um vrtice v
f(u,v)
uV f(u,v)>0

Fluxo total positivo que sai de um vrtice v


f(v,u)
uV f(v,u)>0

Fluxo total lquido de um vrtice v


Diferena entre o fluxo total positivo de sada de v e o fluxo total positivo de entrada de v Pela propriedade de conservao de fluxo, o fluxo total lquido de um vrtice deve ser sempre igual a 0

Exemplo de Fluxo
Problema de transporte
Como determinar o nmero mximo de caixotes que podem ser enviados por dia?
Manter a conservao de fluxo

Redes com vrias origens e sorvedores


Reduo a um problema de fluxo mximo comum
superorigem superdestino

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Conceitos necessrios
Redes residuais Caminhos aumentantes Cortes

Algoritmo genrico

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Redes residuais
Dados um fluxo em rede e um fluxo, a rede resiual consite em arestas que podem admitor mais fluxo Definio formal Considere um fluxo de rede G=(V,E) com origem s e sorvedor t. Seja f um fluxo em G, e considere um par de vrtices u, v V. A capacidade residual de (u, v) a quantidade de fluxo adicional que podemos empurrar desde u at v antes de exceder a capacidade c(u, v) o cf(u,c) = c(u,v) f(u,v) A rede residual de G induzida por f Gf=(V,Ef)

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Redes residuais

Redes residuais

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Caminhos aumentantes
Dados um fluxo em rede G=(V,E) e um fluxo f, um caminho aumentante p um caminho desde s at t na rede residual Gf Capacidade residual de p Quantidade mxima pela qual podemos aumentar o fluxo em cada aresta de p

o cf(p) = min{cf(u,v): (u,v) est em p}

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Caminho aumentante

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Cortes de fuxo em redes
Um corte (S,T) de um fluxo em rede G=(V,E) uma partio de V em S e T=V-S tal que sS e tT Se f um fluxo, ento o fluxo lquido pelo corte (S,T) definido como f(S,T). A capacidade do corte (S,T) c(S,T) Um corte mnimo de uma rede um corte cuja capacidade mnima dentre todos os cortes da rede

Encontrando o fluxo mximo


O mtodo de Ford-Fulkerson
Cortes de fuxo em redes
Exemplo Corte ({s, v1, v2}, {v3, v4, t}) Fluxo lquido: f(v1,v3) + f(v2,v3) + f(v2,v4) = 12+(-4)+11 = 19 Capacidade: c(v1,v3) + c(v2,v4) = 12+14 = 26

Encontrando o fluxo mximo


O algoritmo bsico de Ford-Fulkerson
A cada interao, encontramos algum caminho aumentante p e aumentamos o fluxo f em cada aresta de p pela capacidade residual cf(p)

Encontrando o fluxo mximo


O algoritmo bsico de Ford-Fulkerson

Encontrando o fluxo mximo


O algoritmo bsico de Ford-Fulkerson

Emparelhamento bipartido mximo


Emparelhamento em grafos bipartidos

Como encontrar um emparelhamento mximo?

Emparelhamento bipartido mximo


Emparelhamento mximo a partir de um fluxo em rede
Artifcio
Construir um fluxo em rede G=(V,E) a partir do grafo bipartido G=(V,E) no qual os fluxos equivalem a emparelhamentos A origem s e o sorvedor t so novos vertices no pertencentes a V V=V{s,t} Se a partio de vrtices de G V = L R, as arestas orientadas de Gso arestas de E, orientadas de L para R, junto com |V| novas arestas Atribui-se capacidade unitria a cada aresta Usa-se o mtodo de Ford-Fulkerson para encontrar um fluxo mximo O caminho aumentante escolhido deve ser o lexicograficamente menor O fluxo mximo resultante corresponder a um emparelhamento mximo no subgrafo bipartido G de G

Emparelhamento bipartido mximo


Emparelhamento mximo a partir de um fluxo em rede
G G