Escolar Documentos
Profissional Documentos
Cultura Documentos
3 5
V = {1, 2, 3, 4, 5, 6}
dezembro/2009 E = { (1, 2), (1, 3), (2, 5), (3, 5), (4, 2), (5, 4), (5, 6) }
1 2
Digrafos Digrafos
1 6 1 6
3 5 3 5
Florestas de Profundidade do digrafo
Usam-se os mesmos algoritmos mostrados para grafos
simples. Aresta de avanço
1
Analogamente às buscas em grafos simples, também temos
2 1
árvores (florestas) de Profundidade e de Largura.
Aresta de retorno
Mas novos tipos de arestas surgem, as arestas de avanço
e de cruzamento. As arestas são, então: 2
-arestas de árvore 5
-arestas de retorno
-arestas de avanço 5 Aresta de
-arestas de cruzamento 3 4 cruzamento
6
3
3 4 6 4
Digrafos Digrafos
1
Digrafos Digrafos
3 5
3 5
1 v Ps(Saída) Saída Pv Saída Pv
1 6 1 4 1 3 2 6 1 4
3 2 4 2 6
2 2 6
3 5 3 5 4 3 5
4 1 4 2 4 2
5 5 3 5 3 5 5 3
6 2 6 1
4 6 6 1
Obs: Ps não é necessário no algoritmo. O vetor Pv, que Componentes: {1}, {3}, {2, 4, 5} , {6}
representa a função inversa a Ps, é preenchido ao final Obs: O digrafo transposto não precisa ser criado quando a representa-
7 8
da busca e processado do final para o início. ção é por matriz de adjacência. Basta percorrer a coluna da matriz.
Digrafos Digrafos
3 5 3 5
Digrafos Digrafos
Porque o algoritmo de 1 6
Kosaraju funciona? Exercício: Aplicar o algoritmo de Kosaraju ao digrafo
3 5 abaixo:
Para provar que o algoritmo é correto, temos que provar que, se os vértices
r e s pertencem ao mesmo cfc em D então vão estar na mesma árv.
profund. de DT. Temos tb que provar o inverso, ou seja, se r e s estão
na mesma árv. profund de DT, então pertencem ao mesmo cfc de D. 1 2 3 4
a) Suponhamos r e s pertencentes a um mesmo cfc, em D. Suponhamos r o
vértice com menor ordem de entrada na busca em DT. Como existe o
caminho de s a r em D, então s será descendente de r nessa árvore.
7
b) Suponhamos s e r na mesma árv. prof. de DT. Seja t a raiz dessa
árvore. Então existe caminho de s para t, em D. Mas também tem que
ter caminho de t para s, pois t tem ordem de saida maior que s na
5 6
busca em D. Então s tem que ser descendente de t nessa árvore. Logo,
existe caminho de t para s em D. Portanto, t e s estão no mesmo cfc
em D. De forma análoga, t e r estão no mesmo cfc em D. Logo s e r
estão no mesmo cfc em D. 11 12
2
Digrafos Digrafos
Digrafos Digrafos
Digrafos Digrafos
1 6 O algoritmo é destrutivo. 1 6
Uma ordenação topológica é
uma ordenação dos vértices Coloca numa fila os vértices
tal que se vi vem antes de com grau de entrada 0 e
3 5 3 5
vj, então não existe aresta retira os vértices do digrafo,
de vj para vi. usando a fila.
Ordenação Topológica:
A ordenação topológica pode ser visualizada como uma forma Esvaziar Q;
de redesenhar o DAG, com os vértices em linha, tal que as Enfilar vértices com grau de entrada 0;
arestas sempre estejam da esquerda para a direita. Enquanto (Q não vazia) efetuar:
v ← vértice da frente de Q; Colocar v na ordenação;
Para vizinhos w de v:
Diminuir 1 do grau de entrada(w);
1 3 5 4 2 6
Se (grau de entrada(w) = 0) Então Enfilar (w);
Fp;
Desenfilar v;
17 18
Fe; Complexidade: O(n+m)
3
Digrafos Digrafos
Grafos - Ordenação Topológica num DAG Grafos - Ordenação Topológica num DAG
2 4
3 5
GE = grau de entrada 19 20
Digrafos Digrafos
Digrafos - Ordenação Topológica num DAG Grafos - Ordenação Topológica num DAG
Caminho máximo em um DAG
1 3 5 4 2 6 2 4 6 9
1 10
Digrafos Digrafos
Grafos - Ordenação Topológica num DAG Grafos - Ordenação Topológica num DAG
Aplicação: Dado um conjunto de caixotes, todos de mesma Aplicação: Dado um conjunto de caixotes, todos de mesma
altura e dimensões l x c, determinar a pilha de maior altu- altura e dimensões l x c, determinar a pilha de maior altu-
ra, colocando um caixote totalmente sobre o outro: ra, colocando um caixote totalmente sobre o outro:
l c 3 4
l c 1 5 4 5
1 5 4 2 8 3 2
2 8 3 Solução:
3 9 5
3 9 5 Criar um DAG representando as
4 7 1 1
6
4 7 1 relações de sobreposição, determi-
5 10 5
5 10 4 nar uma ordenação topológica e en-
6 12 5 8
6 12 5 contrar o maior caminho no DAG, a 7
7 6 6
7 6 6 partir da ordenação, de trás para
8 4 3 Orden.Top. 6 7 5 3 2 1 4 8
8 4 3 frente.
teste 28 Maior cam. 5 3 4 3 2 2 1 1
23 24
4
Digrafos Digrafos
Digrafos Digrafos
Escrever uma fórmula na FNC com 2 variáveis -2-SAT (a expressão só contém cláusulas Krom,
booleanas que não seja satisfatível. i.e., com no máximo 2 literais)
27 28
Digrafos Digrafos
ALGORITMOS POLINOMIAIS PARA 2-SAT ALGORITMO ASPVALL
Decisão: Existe uma atribuição que satisfaz C? Decisão: Existe ma atribuição que satisfaz C?
5
Digrafos Digrafos
ALGORITMO ASPVALL ALGORITMO ASPVALL
Exemplo: C = (¬
¬x ∨ y) ∧ (¬
¬y ∨ z) ∧ (¬
¬z ∨ x) ∧ (a ∨ b) ∧ Exemplo: C = (¬
¬x ∨ y) ∧ (¬
¬y ∨ z) ∧ (¬
¬z ∨ x) ∧ (a ∨ b) ∧
(¬
¬a ∨ ¬b) ∧ (¬¬x ∨ a) ∧ (¬
¬y ∨ b) (¬
¬a ∨ ¬b) ∧ (¬
¬x ∨ a) ∧ (¬
¬y ∨ b)
a x y b a x y b Conclusão:
C é satisfatí-
z z vel, pois ne-
nhum literal
e sua negação
estão no
¬a ¬a mesmo cfc!!
¬b ¬y ¬x ¬b ¬y ¬x
¬z 31
¬z 32
Digrafos Digrafos
ALGORITMO ASPVALL - ATRIBUIÇÃO
Exemplo: C = (¬
¬x ∨ y) ∧ (¬
¬y ∨ z) ∧ (¬
¬z ∨ x) ∧ (a ∨ b) ∧
(¬
¬a ∨ ¬b) ∧ (¬
¬x ∨ a) ∧ (¬
¬y ∨ b)
Exercício:
Se fundirmos cada cfc, obtemos um DAG D’:
a x y b
Aplicar o algoritmo de Aspvall à seguinte fórmula: x,y,z
z
a,
C = (¬x ∨ y) ∧ (¬y ∨ z) ∧ (x ∨ ¬z) ∧ (z ∨ y) ¬b
¬a,
b
. ¬b ¬y ¬x ¬a
¬z
¬x,¬
¬y,¬
¬z
33 34
Digrafos Digrafos
ALGORITMO ASPVALL - ATRIBUIÇÃO ALGORITMO ASPVALL - ATRIBUIÇÃO
Exemplo: C = (¬
¬x ∨ y) ∧ (¬
¬y ∨ z) ∧ (¬
¬z ∨ x) ∧ (a ∨ b) ∧ Exemplo: C = (¬
¬x ∨ y) ∧ (¬
¬y ∨ z) ∧ (¬
¬z ∨ x) ∧ (a ∨ b) ∧
(¬
¬a ∨ ¬b) ∧ (¬
¬x ∨ a) ∧ (¬
¬y ∨ b) (¬
¬a ∨ ¬b) ∧ (¬
¬x ∨ a) ∧ (¬
¬y ∨ b)
Se fundirmos cada cfc, obtemos um DAG D’: Possíveis ordenações: Possíveis atribuições:
Atribuição:
x,y,z x,y,z Alternativa 1:
1. Fazer a ordenação topo-
lógica de D’. 1, 1 x,y,z ← F;
a, ¬a, a,
¬b 2. Dada um literal x, seja ¬b 2, 3 3, 2 ¬a, a ← V;
b f(x) a posição de x na b b ← F;
ordenação. 4, 4
3. Se f(x) > f(¬¬x) Então Alternativa 2:
¬x,¬
¬y,¬
¬z atr(x) = V ¬x,¬
¬y,¬
¬z
Senão x,y,z ← F;
atr(x) = F; a ← F;
b ← V;
35 36
6
Digrafos Digrafos
ALGORITMO ASPVALL - CFC ALGORITMO ASPVALL – Ordenação
BP(v); Topológica
Marcar v; BPT(v);
Para vizinhos w de v em D: gCo[v] ← gcomp;
Se (w não marcado): Para vizinhos w de v em DT:
Se (gCo[w]=0): OrdTop:
BP(w);
BPT(w); Esvaziar Q;
Fp;
Fp; Para i de 1 a gn:
gos ← gos+1;
Fim; Se (DE[i] = 0) Então Enfilar(i);
gPo[gos] ← v;
Fp;
Fim;
Enquanto (Q ≠ ∅ );
CFC:
v ← Desenfilar;
gos ← 0; Desmarcar vértices;
Para w vizinho de v:
Para i de 1 a gn:
DE[w] ← DE[w]-1;
Se ( i não marcado) Então BP(i);
Se ( DE[w] = 0) Então Enfilar(w);
Fp;
Fp;
gcomp ← 0; gCo[*] ← 0;
Fe;
Para i descendo de gn a 1:
Fim;
Se ( gCo[gPo[i]]=0) Então
gcomp ← gcomp+1; BPT(gPo[i]);
Fp; 37 38
Fim;
Digrafos Digrafos
Problema 10319 - Manhattan
Descrição: Dado um grid s (ruas) x a (avenidas) e dados m pares de pontos, quer-se sa-
ber se é possível orientar as direções do trânsito em mão única, para que haja
sempre um caminho simples para os m pares de pontos dados.
Exercício:
C = (¬
¬x ∨ y) ∧ (¬
¬y ∨ z) ∧ (x ∨ ¬z) ∧ (z ∨ y)
. Solução: criar uma expressão 2FNC para a situação e usar o algoritmo de 2SAT para
verificar se a expressão é satisfatível. As cláusulas a serem criadas, para
cada um dos m pares (s1, a1, s2, a2) dados são as seguintes:
Digrafos Digrafos
Problema 10319 - Manhattan Problema 10319 - Manhattan
Descrição: Dado um grid s (ruas) x a (avenidas) e dados m pares de pontos, quer-se sa- Descrição: Dado um grid s (ruas) x a (avenidas) e dados m pares de pontos, quer-se sa-
ber se é possível orientar as direções do trânsito em mão única, para que haja ber se é possível orientar as direções do trânsito em mão única, para que haja
sempre um caminho simples para os m pares de pontos dados. sempre um caminho simples para os m pares de pontos dados.
Solução: ...
b) caso contrário, criar duas condições (cj e ck), uma para cada percurso
Solução: ...
possível, associando a cj,k uma atribuição para s e para a, como no caso Cond. s vs a va clausulas
anterior. Criar dois vértices para cada condição (v, w (¬
¬v), p, q(¬
¬p)), e criar a c1 1 1 0 -1 (c1 ou c1)
Entrada: 7 7 4
cláusula (cj ou ck), colocando no grafo as arestas (w → v e q → p). c2 6 1 0 -1 (c2 ou c2)
1 1 1 6
6 1 6 6 c3 6 0 1 0
c) verificar, para cada condição, se há alguma incompatibilidade com condições c4 1 0 6 0 (c3 ou c4) (¬
¬c3 ou ¬c2)(¬
¬c4 ou ¬c1)
6 6 1 1
já criadas anteriormente incompatibilidade entre (ci e cj), criar a cláusula c5 4 0 1 1
4 3 5 1
(¬
¬cj ou ¬ck), e duas arestas no grafo correspondentes. c6 5 0 4 1 (c5 ou c6)
Finalmente, rodar CFC do digrafo e verificar se há vértice e sua negação c5 ¬c5
no mesmo CFC ¬c1 x ¬c3 c2
Cond. s vs a va clausulas
c1 1 1 0 -1 (c1 ou c1)
Entrada: 7 7 4 c2 6 1 0 -1 (c2 ou c2)
1 1 1 6 c3 6 0 1 0
6 1 6 6 c4 1 0 6 0 (c3 ou c4) (¬
¬c3 ou ¬c2)(¬
¬c4 ou ¬c1) c1 ¬c4 c3 ¬c2
c6 ¬c6
6 6 1 1 c5 4 0 1 1
4 3 5 1 c6 5 0 4 1 (c5 ou c6)
41 Saída: No (c1 e ¬c1 estão nomesmo CFC) 42
7
Digrafos Digrafos
Problema Banquete = (11294 – Wedding) Problema Banquete - Exemplo
Descrição: Quer-se arrumar n casais em uma mesa de banquete, com o casal anfitrião na
Exemplo: 3 2
posição 1, os casais sentados um em frente ao outro. São dados m pares de
1h 2w
inimigos (diferentes sexos ou não). Do lado da mesa onde está o anfitrião não
1h 2h
pode haver nenhum par de inimigos. Indicar como a distribuição deve ser feita.
a) o anfitrião senta-se na posição 1 e as expressões referem-se q quem senta do seu
Solução: ....
lado na mesa.
Entrada: 10 6 (dez casais, 6 pares de inimigos, anfitrião = 0)
b) Variáveis: a = homem do casal 1 senta-se do mesmo lado do anfitrião
3h 7h
b = mulher do casal 1 senta-se do mesmo lado do anfitrião
5w 3w
c = homem do casal 2 senta-se do mesmo lado do anfitrião
7h 6w
d = mulher do casal 2 senta-se do mesmo lado do anfitrião
8w 3w
7h 3w
c) Éxpressão que obriga cada componente do casal sentar-se em lados opostos:
2w 5h
(a ∨ b)∧
∧(¬
¬a ∨ ¬b)∧
∧(c ∨ d)∧
∧(¬
¬c ∨ ¬d)
Saída: 1h 2h 3w 4h 5h 6h 7h 8h 9h
d) Expressão que proibe dois inimigos sentarem-se do lado do anfitrião:
(¬
¬a ∨ ¬c)∧
∧(¬
¬ a ∨ ¬d)
e) Expres.final:(a ∨ b)∧
∧(¬
¬a ∨ ¬b)∧
∧(c ∨ d)∧
∧(¬
¬c ∨ ¬d)∧
∧(¬
¬a ∨ ¬c)∧
∧(¬
¬a ∨ ¬d)
43 44
Digrafos Digrafos
45 46
Digrafos Digrafos
Descrição: Um supermercado quer reduzir os produtos através de uma pesquisa junto aos
clientes. Eles indicam 2 produtos para ficarem e dois para sairem. Dados os
votos, quer-se saber se é possível satisfazer a todos os clientes (um produto
escolhido para ficar fica e um para sair, sai).
FIM
Solução: ...