Escolar Documentos
Profissional Documentos
Cultura Documentos
26 de outubro de 2011
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
a c
e
e a b
b d
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Grafo Simples Tamanho do Grafo
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Caminhos em Grafos Caminhos Simples e Ciclos
Um caminho P de v0 a vn no grafo G é uma seqüência Um caminho simples é um caminho em que não há
finita e não vazia (v0 , e1 , v1 , . . . , en , vn ) cujos elementos repetição de vértices e nem de arestas na sequência.
são alternadamente vértices e arestas e tal que, para todo Um ciclo ou caminho fechado é uma caminho em que
1 ≤ i ≤ n, vi−1 e vi são os extremos de ei . v0 = vn .
O comprimento do caminho P é dado pelo seu número de Exemplo:
arestas, ou seja, n.
Exemplo: v0
f v0=v4 f
a a
v0 e4
a f v3 v3
e4
e1 c e c e
v3 e1
c e3 v4 e3
e1 e
e4 e3 v6 b d b d
e6 v1 e2 v2 v1 e2 v2
b d
v1=v4 e2=e5 v2=v5
Caminho Simples Ciclo
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Dizemos que um grafo é conexo se, para qualquer par de Um grafo G é uma árvore se é conexo e não possui ciclos
vértices u e v de G, existe um caminho de u a v em G. (acı́clico). As seguintes afirmações são equivalentes:
Quando o grafo G não é conexo, podemos particionar em G é uma árvore.
componentes conexos. Dois vértices u e v de G estão no G é conexo e possui exatamente |V | − 1 arestas.
mesmo componente conexo de G se há caminho de u a v G é conexo e a remoção de qualquer aresta desconecta o
em G. grafo (minimal conexo).
Para todo par de vértices u, v de G, existe um único
Exemplo: caminho de u a v em G.
Exemplo:
a f f f
a a
c e c e
c e
b d b d
b d
Conexo Não-conexo com
3 componentes conexos
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Alguns exemplos de grafos Grafo Orientado
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Algoritmos em Grafos - Motivação Aplicações
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Problema do Caixeiro Viajante: dado um conjunto de A complexidade dos algoritmos para solução de
cidades, encontrar um passeio que sai de uma cidade, problemas modelados por grafos depende fortemente da
passa por todas as cidades e volta para a cidade inicial tal sua representação interna.
que a distância total a ser percorrida seja menor possı́vel. Existem duas representações canônicas: matriz de
Problema Chinês do Correio: dado o conjunto das ruas adjacência e listas de adjacência.
de um bairro, encontrar um passeio que passa por todas O uso de uma ou outra num determinado algoritmo
as ruas voltando ao ponto inicial tal que a distância total a depende da natureza das operações que ditam a
ser percorrida seja menor possı́vel. complexidade do algoritmo.
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Matriz de adjacência Matriz de adjacência
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Listas de adjacência Lista de adjacências
a c
a
a c
b a c
a b c
e b a c d e c a b
c a b d e d b c
d b c e
b d e c d
b d e c d
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Busca em grafos
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Para um grafo G (orientado ou não) denotamos por V [G] Dizemos que um vértice v é alcançável a partir de um
seu conjunto de vértices e por E[G] seu conjunto de vértice s em um grafo G se existe um caminho de s a v em
arestas. G.
Definição: a distância de s a v é o comprimento de um
Para denotar complexidades nas expressões com O ou Θ caminho mais curto de s a v .
usaremos V e E em vez de |V [G]| ou |E[G]|. Por exemplo,
Se v não é alcançável a partir de s, então dizemos que a
Θ(V + E) ou O(V 2 ).
distância de s a v é ∞ (infinita).
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Busca em largura Busca em largura
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
r s t u
Busca em largura atribui cores a cada vértice: branco,
∞ 0 ∞ ∞
cinza e preto.
Cor branca = “não visitado”. Q s
Inicialmente todos os vértices são brancos.
0
Cor cinza = “visitado pela primeira vez”. ∞ ∞ ∞ ∞
Cor Preta = “teve seus vizinhos visitados”. v w x y
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo (CLRS) Exemplo (CLRS)
r s t u r s t u
1 0 ∞ ∞ 1 0 2 ∞
Q w r Q r t x
1 1 1 2 2
∞ 1 ∞ ∞ ∞ 1 2 ∞
v w x y v w x y
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
r s t u r s t u
1 0 2 ∞ 1 0 2 3
Q t x v Q x v u
2 2 2 2 2 3
2 1 2 ∞ 2 1 2 ∞
v w x y v w x y
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo (CLRS) Exemplo (CLRS)
r s t u r s t u
1 0 2 3 1 0 2 3
Q v u y Q u y
2 3 3 3 3
2 1 2 3 2 1 2 3
v w x y v w x y
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
r s t u r s t u
1 0 2 3 1 0 2 3
Q y Q ∅
3
2 1 2 3 2 1 2 3
v w x y v w x y
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cores Representação da árvore e das distâncias
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Consumo de tempo Complexidade de tempo
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Alguns lemas Prova do Lema 2
Note que d[v ] nunca muda após v ser inserido na fila. Logo, o
invariante vale.
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
d[v ] = dist(s, v ) para todo v ∈ V [G]. Hipótese de indução: Suponha então que d[u] = dist(s, u)
para todo vértice u com dist(s, u) < k.
e
Seja v um vértice com dist(s, v ) = k. Considere um caminho
π[ ] define uma Árvore de Busca em Largura. mı́nimo de s a v em G e chame de u o vértice que antecede v
neste caminho. Note que dist(s, u) = k − 1.
Prova:
Considere o instante em que u foi removido da fila Q (linha 11
Note que se dist(s, v ) = ∞ então d[v ] = ∞ pelo Lema 3. de B USCA -E M -L ARGURA). Neste instante, v é branco, cinza ou
Então vamos considerar o caso em que dist(s, v ) < ∞. preto.
Vamos provar por indução em dist(s, v ) que d[v ] = dist(s, v ).
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exercı́cio Busca em profundidade
Exercı́cio. Mostre que um grafo G é bipartido se e somente se A estratégia consiste em pesquisar o grafo o mais
não contém um ciclo de comprimento ı́mpar. “profundamente” sempre que possı́vel.
Aplicável tanto a grafos orientados quanto não-orientados.
Projete um algoritmo linear que dado um grafo G devolve
Possui um número enorme de aplicações:
uma bipartição de G, ou
determinar os componentes de um grafo
um ciclo ı́mpar em G.
ordenação topológica
determinar componentes fortemente conexos
subrotina para outros algoritmos
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Recebe um grafo G = (V , E) (representado por listas de Outra forma de entender Busca em Profundidade é imaginar
adjacências). A busca inicia-se em um vértice qualquer. que os vértices são armazenados em uma pilha à medida que
Busca em profundidade é um método recursivo. A idéia básica são visitados. Compare isto com Busca em Largura onde os
consiste no seguinte: vértices são colocados em uma fila.
Suponha que a busca atingiu um vértice u.
Suponha que a busca atingiu um vértice u.
Escolhe-se um vizinho não visitado v de u para prosseguir
Escolhe-se um vizinho não visitado v de u para prosseguir
a busca.
a busca.
“Recursivamente” a busca em profundidade prossegue a
Empilhe v e repete-se o passo anterior com v .
partir de v .
Se nenhum vértice não visitado foi encontrado, então
Quando esta busca termina, tenta-se prosseguir a busca a
desempilhe um vértice da pilha, digamos u, e volte ao
partir de outro vizinho de u. Se não for possı́vel, ela
primeiro passo.
retorna (backtracking) ao nı́vel anterior da recursão.
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Floresta de Busca em Profundidade Cores dos vértices
A busca em profundidade associa a cada vértice x um A medida que o grafo é percorrido, os vértices visitados vão
predecessor π[x]. sendo coloridos.
O subgrafo induzido pelas arestas Cada vértice tem uma das seguintes cores:
{(π[x], x) : x ∈ V [G] e π[x] 6= NIL} Cor branca = “vértice ainda não visitado”’.
é a Floresta de Busca em Profundidade. Cor cinza = “vértice visitado mas ainda não finalizado”.
Cada componente desta floresta é uma Árvore de Busca Cor preta = “vértice visitado e finalizado”.
em Profundidade.
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Estampas/rótulos Exemplo
y z s t
A busca em profundidade associa a cada vértice x dois rótulos: 1/
d[x]: instante de descoberta de x.
Neste instante x torna-se cinza.
f [x]: instante de finalização de x.
Neste instante x torna-se preto.
x w v u
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
2/ 1/ 3/ 2/ 1/
x w v u x w v u
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/ 2/ 1/ 3/ 2/ 1/
4/ 4/
x w v u x w v u
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/ 2/ 1/ 3/6 2/ 1/
B B
4/5 4/5
x w v u x w v u
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/ 1/ 3/6 2/ 1/
B B
4/5 7/ 4/5 7/
x w v u x C w v u
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/ 1/ 3/6 2/9 1/
B B
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/9 1/ 3/6 2/9 1/10
B F B F
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/9 1/10 11/ 3/6 2/9 1/10 11/
B F B F
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/9 1/10 11/ 3/6 2/9 1/10 11/
B F B F C
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/9 1/10 11/ 3/6 2/9 1/10 11/
B F C B F C
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/9 1/10 11/ 3/6 2/9 1/10 11/
B F C B F C B
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
y z s t y z s t
3/6 2/9 1/10 11/ 3/6 2/9 1/10 11/16
B F C B B F C B
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Algoritmo DFS- VISIT Algoritmo DFS
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
DFS- VISIT(u)
1 cor[u] ← cinza
2 tempo ← tempo + 1 DFS- VISIT(v ) é executado exatamente uma vez para cada
3 d[u] ← tempo v ∈ V.
4 para cada v ∈ Adj[u] faça Em uma execução de DFS- VISIT(v ), o laço das linhas 4-7
5 se cor[v ] = branco é executado |Adj[u]| vezes.
6 então π[v ] ← u Assim, o custo total de todas as chamadas é
7 DFS- VISIT(v ) P
v ∈V |Adj(v )| = Θ(E).
8 cor[u] ← preto
9 f [u] ← tempo ← tempo + 1
Conclusão: A complexidade de tempo de DFS é O(V + E).
Consumo de tempo
linhas 4-7: executado |Adj[u]| vezes.
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Estrutura de parênteses Estrutura de parênteses
y z s t
3/6 2/9 1/10 11/16
Os rótulos d[x], f [x] têm propriedades muito úteis para
serem usadas em outros algoritmos.
Eles refletem a ordem em que a busca em profundidade B F C B
foi executada.
Eles fornecem informação de como é a “cara” (estrutura)
do grafo.
4/5 7/8 12/13 14/15
x C w C v C u
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
s t
Teorema (Teorema dos Parênteses)
Em uma busca em profundidade sobre um grafo G = (V , E),
z v u para quaisquer vértices u e v , ocorre exatamente uma das
situações abaixo:
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Estrutura de parênteses Teorema do Caminho Branco
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Classificação de arestas Grafos não-orientados
s t
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
1/ 1/
2/
y z w y z w
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
B
3/ 1/ 3/ 1/
2/ 2/
y z w y z w
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
B B
3/4 1/ 3/4 1/
2/ 2/ 5/
y z w y z w
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
B B
3/4 1/ 3/4 1/ 7/
2/ 5/ 6/ 2/ 5/ 6/
y z w y z w
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
B B
3/4 1/ 7/ 3/4 1/ 7/8
B B
2/ 5/ 6/ 2/ 5/ 6/
y z w y z w
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
B B
3/4 1/ 7/8 3/4 1/ 7/8
B B
B
2/ 5/ 6/9 2/ 5/ 6/9
y z w y z w
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Exemplo
x s t x s t
B B
3/4 1/ 7/8 3/4 1/ 7/8
B B
B B
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Exemplo Ordenação Topológica
x s t
B Uma ordenação topológica de um grafo orientado G = (V , E) é
3/4 1/12 7/8 um arranjo linear dos vértices de G
v1 v2 v3 . . . vn−2 vn−1 vn
tal que se (vi , vj ) é uma aresta de G, então i < j.
B
B
v1 v2 v3
v4 v5 v6
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
paletó 3/4
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Ordenação Topológica Grafo Orientado Acı́clico
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Complexidade de tempo Corretude
Lema.
Conclusão Um grafo orientado G é acı́clico se e somente se em uma
busca em profundidade de G não aparecem arestas de retorno.
A complexidade de tempo de TOPOLOGICAL -S ORT é O(V + E). Prova:
Suponha que (u, v ) é uma aresta de retorno.
Agora falta mostrar que TOPOLOGICAL -S ORT funciona. Então v é um ancestral de u na Floresta de BP.
Portanto, existe um caminho de v a u que juntamente com
(u, v ) forma um ciclo orientado. Logo, G não é acı́clico.
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Corretude Corretude
v1
Lembre que TOPOLOGICAL -S ORT imprime os vértices em
v2 ordem decrescente de f [ ].
vk
Para mostrar que o algoritmo funciona, basta então mostrar
C v3 que se (u, v ) é uma aresta de G, então f [u] > f [v ].
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Corretude
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Componentes fortemente conexos Grafo transposto
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
a b c d
a b c d
a b c d
13/14 11/16 1/10 8/9
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
a b c d
A idéia por trás de C OMPONENTES -F ORTEMENTE -C ONEXOS
segue de uma propriedade do grafo componente GCFC obtido a
partir de G contraindo-se seus componentes fortemente
conexos.
a b c d
e f g h
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1
Corretude Corretude
Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1 Cid Carvalho de Souza, Cândida Nunes da Silva, Orlando Lee MO417 — Complexidade de Algoritmos – v. 2.1