Top Banner
Aula 24: Grafos: algoritmos elementares (II) David D´ eharbe Programa de P´ os-gradua¸c˜ ao em Sistemas e Computa¸c˜ ao Universidade Federal do Rio Grande do Norte Centro de Ciˆ encias Exatas e da Terra Departamento de Inform´ atica e Matem´ atica Aplicada 18 de maio de 2015 1 / 33
59

Algoritmos elementares sobre grafos (II)

Apr 10, 2023

Download

Documents

Letícia Malloy
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Algoritmos elementares sobre grafos (II)

Aula 24: Grafos: algoritmos elementares (II)

David DeharbePrograma de Pos-graduacao em Sistemas e Computacao

Universidade Federal do Rio Grande do NorteCentro de Ciencias Exatas e da Terra

Departamento de Informatica e Matematica Aplicada

18 de maio de 2015

1 / 33

Page 2: Algoritmos elementares sobre grafos (II)

Plano

Ordenacao topologica

Componentes fortemente conectados

Referencia: Cormen, cap 23.

2 / 33

Page 3: Algoritmos elementares sobre grafos (II)

Ordenacao topologica

I Grafos dirigidos acıclicos indicam uma relacao de precedenciaI u ≺ v : u vem antes de v , aresta (u, v)I relacao parcialI exemplos: pre-requisitos entre componentes curriculares, entre

tarefas, etc.

I Ordenacao topologica:I entrada: uma relacao de precedenciaI saıda: um “escalonamento” dos vertices que respeita a

precedencia

I exemplo: grade curricular

3 / 33

Page 4: Algoritmos elementares sobre grafos (II)

Definicao

Definicao (Grafo dirigido acıclico, DAG)

Um grafo dirıgido acıclico, ou DAG1 e um grafo dirigido G tal quese existe uma aresta dirigda de (u, v), entao nao existe caminho dev ate u.

Nao ha cıclo em DAGs.

u vw

x y

ts

r

q

1Do ingles Directed Acyclic Graph.4 / 33

Page 5: Algoritmos elementares sobre grafos (II)

ExemploOrdenacao topologica

u vw

x y

ts

r

q

v u x y w t s r q

5 / 33

Page 6: Algoritmos elementares sobre grafos (II)

AlgoritmoOrdenacao topologica

I Aplicar DFS;

I Retornar a lista dos vertices em ordem decrescente do atributof .

Topological-Sort(G )

aplique DFS a Ginserindo cada v na cabeca de uma lista quando e finalizadoreturn a lista dos vertices

6 / 33

Page 7: Algoritmos elementares sobre grafos (II)

Algoritmo detalhadoOrdenacao topologica

Topological-Sort(G )

for v ∈ G .Vv .visited = False

l = Empty-Listfor v ∈ G .V

if ¬v .visitedTopological-Sort-Visit(v)

return l

Topological-Sort-Visit(v , l)

v .visited = Truefor w ∈ v .adj

if ¬w .visitedTopological-Sort-Visit(v , l)

l = Push-Front(v , l)

7 / 33

Page 8: Algoritmos elementares sobre grafos (II)

AlgoritmoExemplo

u vw

x y

ts

r

q

8 / 33

Page 9: Algoritmos elementares sobre grafos (II)

ComplexidadeOrdenacao topologica

I DFS: Θ(|V |+ |E |)I + Θ(1) cada insercao de vertice ≡ Θ(|V |)I = Θ(|V |+ |E |)

9 / 33

Page 10: Algoritmos elementares sobre grafos (II)

CorrecaoOrdenacao topologica

1. Lema: caracterizacao de DAG por arestas

2. Teorema: correcao do algoritmo proposto

10 / 33

Page 11: Algoritmos elementares sobre grafos (II)

Aciclicidade e arestas

Lema (Arestas e DAG)

Um grafo dirigido G = (V ,E ) e acıclico (um DAG) se e somente sequalquer aplicacao de DFS(G ) encontra nenhuma aresta de volta.

Plano de prova

I (⇐) nenhuma aresta de volta ⇒ nenhum ciclo

I (⇒) nenhum ciclo ⇒ nenhuma aresta de volta

11 / 33

Page 12: Algoritmos elementares sobre grafos (II)

Aciclicidade e arestas

Lema (Arestas e DAG)

Um grafo dirigido G = (V ,E ) e acıclico (um DAG) se e somente sequalquer aplicacao de DFS(G ) encontra nenhuma aresta de volta.

Plano de prova

I (⇐) nenhuma aresta de volta ⇒ nenhum ciclo

I (⇒) nenhum ciclo ⇒ nenhuma aresta de volta

11 / 33

Page 13: Algoritmos elementares sobre grafos (II)

Aciclicidade e arestasDemonstracao

Demonstracao.(⇐) nenhuma aresta de volta ⇒ nenhum ciclo

≡ ciclo ⇒ aresta de volta

I G possui um ciclo c

I seja v o primeiro vertice de c encontrado em uma busca emprofundidade

I seja (u, v) a aresta de c chegando em v

I pelo teorema do caminho branco: na etapa v .d , ha umcaminho branco ate u

I u torna-se um descendente de v na floresta em profundidade

I logo, (u, v) e uma aresta de volta.

12 / 33

Page 14: Algoritmos elementares sobre grafos (II)

Aciclicidade e arestasDemonstracao

Demonstracao.(⇒) nenhum ciclo ⇒ nenhuma aresta de volta

≡aresta de volta ⇒ ciclo

I seja (u, v) uma aresta de volta.

I logo v e um ancestro de u na floresta de profundidade.

I entao ha um caminho de v ate v , passando por u: e um ciclo

12 / 33

Page 15: Algoritmos elementares sobre grafos (II)

Correcao de Topological-Sort

Teorema (Correcao do algoritmo Topological-Sort)

Topological-Sort(G ) produz uma ordenacao topologica de umgrafo dirigido acıclico G .

13 / 33

Page 16: Algoritmos elementares sobre grafos (II)

Correcao de Topological-Sort

Demonstracao.

I Basta mostrar que: em um DAG, se ha uma aresta (u, v),entao v .f < u.f .

I (u, v) nao e uma aresta de voltaI Quando encontrado, v e branco ou preto

I se v for branco, e um descendente de u e v . f < u. fI se v for preto, ja foi finalizado e v . f < u.d < u. f .

14 / 33

Page 17: Algoritmos elementares sobre grafos (II)

Componentes fortemente conectados

I SCC: Strongly connected components

I Decomposicao de um grafo dirigido em grafos menores

I Permite, para alguns problemas de grafos, aplicar estrategiade divisao e conquista.

15 / 33

Page 18: Algoritmos elementares sobre grafos (II)

Definicao

I Notacao: u v existe um caminho de u ate v

Definicao (Componente fortemente contectado)

Um componente fortemente conectado de um grafo G = (V ,E ) eum conjunto maximo de vertices U ⊆ V tal que para qualquer(u, v) ∈ U2, entao u v e v u.

a b c d

e f g h

16 / 33

Page 19: Algoritmos elementares sobre grafos (II)

Matriz transposta

O algoritmo para encontrar os SCC de G utiliza o grafo transpostode G .

Definicao (Grafo transposto)

O grafo transposto de um grafo dirigido G = (V ,E ) e o grafodirigido GT = (V ,ET ), onde ET = {(u, v)|(v , u) ∈ E}.

a d

e f

b c

g h

17 / 33

Page 20: Algoritmos elementares sobre grafos (II)

Matriz transposta

O algoritmo para encontrar os SCC de G utiliza o grafo transpostode G .

Definicao (Grafo transposto)

O grafo transposto de um grafo dirigido G = (V ,E ) e o grafodirigido GT = (V ,ET ), onde ET = {(u, v)|(v , u) ∈ E}.

a d

e f

b c

g h

Complexidade?

17 / 33

Page 21: Algoritmos elementares sobre grafos (II)

Matriz transposta

O algoritmo para encontrar os SCC de G utiliza o grafo transpostode G .

Definicao (Grafo transposto)

O grafo transposto de um grafo dirigido G = (V ,E ) e o grafodirigido GT = (V ,ET ), onde ET = {(u, v)|(v , u) ∈ E}.

a d

e f

b c

g h

Complexidade?Theta(|V |+ |E |)17 / 33

Page 22: Algoritmos elementares sobre grafos (II)

AlgoritmoAs etapas principais

Graph-SCC(G )

1 DFS(G )2 GT = Graph-Transpose(G )3 DFS(GT ) t. q. laco principal processa vertices por f decrescente4 cada arvore da floresta de profundidade resultado e um SCC

18 / 33

Page 23: Algoritmos elementares sobre grafos (II)

IlustracaoAlgoritmo

a b c d

e f g h

19 / 33

Page 24: Algoritmos elementares sobre grafos (II)

IlustracaoAlgoritmo

a b c d

e f g h

a13/14 b

11/16

c

1/10

d 8/9

e12/15 f3/4

g

2/7

h5/6

19 / 33

Page 25: Algoritmos elementares sobre grafos (II)

IlustracaoAlgoritmo

a13/14 b

11/16

c

1/10

d 8/9

e12/15 f3/4

g

2/7

h5/6

a d

e f

b c

g h

19 / 33

Page 26: Algoritmos elementares sobre grafos (II)

IlustracaoAlgoritmo

a13/14 b

11/16

c

1/10

d 8/9

e12/15 f3/4

g

2/7

h5/6

a d

e f

b c

g h

19 / 33

Page 27: Algoritmos elementares sobre grafos (II)

ComplexidadeAlgoritmo

Graph-SCC(G )

1 DFS(G ) // Θ(|V |+ |E |)2 GT = Graph-Transpose(G ) // Θ(|V |+ |E |)3 DFS(GT ) // Θ(|V |+ |ET |) = Θ(|V |+ |E |)

Θ(|V |+ |E |)

20 / 33

Page 28: Algoritmos elementares sobre grafos (II)

ComplexidadeAlgoritmo

Graph-SCC(G )

1 DFS(G ) // Θ(|V |+ |E |)2 GT = Graph-Transpose(G ) // Θ(|V |+ |E |)3 DFS(GT ) // Θ(|V |+ |ET |) = Θ(|V |+ |E |)

Θ(|V |+ |E |)

20 / 33

Page 29: Algoritmos elementares sobre grafos (II)

Correcao (roteiro)Algoritmo

1. propriedade dos caminhos entre vertices de um mesmo SCC

2. propriedade sobre busca em profundidade e vertices de umSCC

3. nocao de antepassado de um vertice em uma busca emprofundidade

4. relacao entre antepassado na busca e ancestro no grafo

5. propriedade sobre antepassado e SCC

6. propriedade sobre antepassados dos vertices de um mesmoSCC

7. correcao do algoritmo

21 / 33

Page 30: Algoritmos elementares sobre grafos (II)

Caminhos entre vertices de um mesmo SCCCorrecao

Lema (Caminhos entre vertices de um mesmo SCC)

Seja u e v dois vertices quaisqueres de um mesmo SCC. Entaotodos os vertices nos caminhos entre u e v estao neste mesmoSCC.

Demonstracao.

Seja w um vertice no caminho de u ate v . Logo u w .Precisamos verificar que w u.

I Como w esta no camino de u ate v , entao w v .

I Como u e v estao no mesmo SCC, v u.

Logo w u.

22 / 33

Page 31: Algoritmos elementares sobre grafos (II)

Caminhos entre vertices de um mesmo SCCCorrecao

Lema (Caminhos entre vertices de um mesmo SCC)

Seja u e v dois vertices quaisqueres de um mesmo SCC. Entaotodos os vertices nos caminhos entre u e v estao neste mesmoSCC.

Demonstracao.

Seja w um vertice no caminho de u ate v . Logo u w .Precisamos verificar que w u.

I Como w esta no camino de u ate v , entao w v .

I Como u e v estao no mesmo SCC, v u.

Logo w u.

22 / 33

Page 32: Algoritmos elementares sobre grafos (II)

Busca em profundidade e vertices de um SCCCorrecao

Teorema (Busca em profundidade e vertices de um SCC)

Em qualquer busca em profundidade, todos os vertices em um SCCencontram-se em uma mesma arvore da busca em profundidade.

Demonstracao.

Seja u o primeiro vertice do SCC encontrado na busca emprofundidade, e v qualquer outro vertice do SCC .

I na etapa u.d , todos os demais vertices do SCC estao brancos

I pelo teorema do caminho branco, v e um descendente de u nafloresta de profundidade

Logo, u e v estao na mesma arvore de profundidade.

23 / 33

Page 33: Algoritmos elementares sobre grafos (II)

Busca em profundidade e vertices de um SCCCorrecao

Teorema (Busca em profundidade e vertices de um SCC)

Em qualquer busca em profundidade, todos os vertices em um SCCencontram-se em uma mesma arvore da busca em profundidade.

Demonstracao.

Seja u o primeiro vertice do SCC encontrado na busca emprofundidade, e v qualquer outro vertice do SCC .

I na etapa u.d , todos os demais vertices do SCC estao brancos

I pelo teorema do caminho branco, v e um descendente de u nafloresta de profundidade

Logo, u e v estao na mesma arvore de profundidade.

23 / 33

Page 34: Algoritmos elementares sobre grafos (II)

Antepassado na busca em profundidadeCorrecao

I v .d e v .f sao os valores obtidos em DFS(G )

Definicao (Antepassado em uma busca em profundidade)

Em uma busca em profundidade, para qualquer vertice u, oantepassado de u, denotado φ(u), e o vertice v tal que u v como maior valor de f .

24 / 33

Page 35: Algoritmos elementares sobre grafos (II)

Antepassado na busca em profundidadeCorrecao

I v .d e v .f sao os valores obtidos em DFS(G )

Definicao (Antepassado em uma busca em profundidade)

Em uma busca em profundidade, para qualquer vertice u, oantepassado de u, denotado φ(u), e o vertice v tal que u v como maior valor de f .

I um antepassado por SCC (≈ representante do componente)

I primeiro vertice do SCC descoberto na busca em profundidadede G

I ultimo a ser finalizado

I e a raiz da arvore de profundidade na busca em profundidadede GT

24 / 33

Page 36: Algoritmos elementares sobre grafos (II)

Antepassado na busca em profundidadeCorrecao

I v .d e v .f sao os valores obtidos em DFS(G )

Definicao (Antepassado em uma busca em profundidade)

Em uma busca em profundidade, para qualquer vertice u, oantepassado de u, denotado φ(u), e o vertice v tal que u v como maior valor de f .

Temos:

1. u.f ≤ φ(u).f

2. u v ⇒ φ(v).f ≤ φ(u).f

3. φ(φ(u)) = φ(u)

24 / 33

Page 37: Algoritmos elementares sobre grafos (II)

Antepassado na busca em profundidadeCorrecao

u.f ≤ φ(u).f

I Pois u u, e ∀v |u v · v .f ≤ φ(u).f

u v ⇒ φ(v).f ≤ φ(u).f

I Pois {w · v w} ⊆ {w · u w}

φ(φ(u)) = φ(u)

I Pois φ(u).f ≤ φ(φ(u)).f ,

I e, como u φ(u), entao φ(φ(u)).f ≤ φ(u).f ,

I temos φ(u).f = φ(φ(u)).f , e

I cada vertice tem um valor de f diferente.

25 / 33

Page 38: Algoritmos elementares sobre grafos (II)

Antepassados e ancestrosCorrecao

Teorema (Antepassado e ancestro)

Em um grafo dirigido G = (V ,E ), o antepassado φ(u) de qualqueru ∈ V em qualquer busca em profundidadede G , sempre e umancestro de u.

Demonstracao.

Por caso sobre a cor de φ(u) na etapa d .u

26 / 33

Page 39: Algoritmos elementares sobre grafos (II)

Antepassados e ancestrosCorrecao

Teorema (Antepassado e ancestro)

Em um grafo dirigido G = (V ,E ), o antepassado φ(u) de qualqueru ∈ V em qualquer busca em profundidadede G , sempre e umancestro de u.

Demonstracao.

Por caso sobre a cor de φ(u) na etapa d .u

26 / 33

Page 40: Algoritmos elementares sobre grafos (II)

Antepassados e ancestrosCorrecao

Teorema (Antepassado e ancestro)

Em um grafo dirigido G = (V ,E ), o antepassado φ(u) de qualqueru ∈ V em qualquer busca em profundidadede G , sempre e umancestro de u.

Demonstracao.

Por caso sobre a cor de φ(u) na etapa d .u

I Se for Gray, entao φ(u) e ancestro de u.

26 / 33

Page 41: Algoritmos elementares sobre grafos (II)

Antepassados e ancestrosCorrecao

Teorema (Antepassado e ancestro)

Em um grafo dirigido G = (V ,E ), o antepassado φ(u) de qualqueru ∈ V em qualquer busca em profundidadede G , sempre e umancestro de u.

Demonstracao.

Por caso sobre a cor de φ(u) na etapa d .u

I Se for Black, entao foi finalizado, e φ(u).f < u.f .Contradiz u.f ≤ φ(u).f .

26 / 33

Page 42: Algoritmos elementares sobre grafos (II)

Antepassados e ancestrosCorrecao

Teorema (Antepassado e ancestro)

Em um grafo dirigido G = (V ,E ), o antepassado φ(u) de qualqueru ∈ V em qualquer busca em profundidadede G , sempre e umancestro de u.

Demonstracao.

Por caso sobre a cor de φ(u) na etapa d .uI Se for White, consideramos a cor dos vertices no caminho de

u ate φ(u)I todos sao brancos, logo φ(u) e descendente de u,φ(u). f < u. f : contradicao

I senao, seja t o ultimo vertice nao branco do caminho:I t nao pode ser preto, pois tem um sucessor brancoI entao ha um caminho branco de t ate φ(u), eI φ(u) e descendente de t (teorema do caminho branco)I logo t. f > φ(u). fI contradicao por definicao de φ(u) e u t.

26 / 33

Page 43: Algoritmos elementares sobre grafos (II)

Antepassado e SCCCorrecao

Corolario (Antepassado e SCC)

Em qualquer busca em profundidade de um grafo dirigidoG = (V ,E ), para qualquer u ∈ V , ambos u e φ(u) pertencem aomesmo SCC.

Demonstracao.

I Por definicao de φ, temos u φ(u).

I Pelo teorema “antepassado e ancestro”, φ(u) u.

27 / 33

Page 44: Algoritmos elementares sobre grafos (II)

Antepassado e SCCCorrecao

Corolario (Antepassado e SCC)

Em qualquer busca em profundidade de um grafo dirigidoG = (V ,E ), para qualquer u ∈ V , ambos u e φ(u) pertencem aomesmo SCC.

Demonstracao.

I Por definicao de φ, temos u φ(u).

I Pelo teorema “antepassado e ancestro”, φ(u) u.

27 / 33

Page 45: Algoritmos elementares sobre grafos (II)

Antepassados dos vertices de um SCCCorrecao

Teorema (Antepassados dos vertices de um SCC)

Em um grafo dirigido G = (V ,E ), os vertices u e v pertencem aomesmo SCC se, e somente se, possuem o mesmo antepassado nabusca em profundidade de G .

Demonstracao.

I (⇒)

I (⇐)

28 / 33

Page 46: Algoritmos elementares sobre grafos (II)

Antepassados dos vertices de um SCCCorrecao

Teorema (Antepassados dos vertices de um SCC)

Em um grafo dirigido G = (V ,E ), os vertices u e v pertencem aomesmo SCC se, e somente se, possuem o mesmo antepassado nabusca em profundidade de G .

Demonstracao.

I (⇒)

I (⇐)

28 / 33

Page 47: Algoritmos elementares sobre grafos (II)

Antepassados dos vertices de um SCCCorrecao

Teorema (Antepassados dos vertices de um SCC)

Em um grafo dirigido G = (V ,E ), os vertices u e v pertencem aomesmo SCC se, e somente se, possuem o mesmo antepassado nabusca em profundidade de G .

Demonstracao.

I (⇒) u e v pertencem ao mesmo SCC:I logo {w · u w} = {w · v w}.I por definicao de φ, φ(u) = φ(v).

I (⇐)

28 / 33

Page 48: Algoritmos elementares sobre grafos (II)

Antepassados dos vertices de um SCCCorrecao

Teorema (Antepassados dos vertices de um SCC)

Em um grafo dirigido G = (V ,E ), os vertices u e v pertencem aomesmo SCC se, e somente se, possuem o mesmo antepassado nabusca em profundidade de G .

Demonstracao.

I (⇒)I (⇐) φ(u) = φ(v):

I pelo corolario “Antepassado e SCC” u e φ(u) estao no mesmoSCC

I v e φ(v) estao no mesmo SCC,I logo u e v estao no mesmo SCC.

28 / 33

Page 49: Algoritmos elementares sobre grafos (II)

Intuicao do algoritmo

I DFS(G ) marca os antepassados com o maior valor de f (e omenor valor de d) de cada SCC.

I DFS(GT )I comeca com um vertice v1 de maior f , que e um antepassadoI visita todos os vertices do SCC de v1I continua com um vertice v2 de maior f entre os nao visitados,

tambem e um antepassadoI visita todos os vertices do SCC de v2I e assim sucessivamente

29 / 33

Page 50: Algoritmos elementares sobre grafos (II)

Teorema da correcaoCorrecao

Teorema (Correcao de Graph-SCC)

Seja G um grafo dirigido qualquer, Graph-SCC(G ) calculacorretamente os componentes fortemente conectados de G .

Roteiro da demonstracao:

I inducao

I numero de arvores de profundidade encontrados emDFS(GT ).

I mostramos que, assumindo que as arvores anteriores sao SCC,cada nova arvore formada e um SCC

I trivial para a primeira arvore (nao existe arvores anteriores)

30 / 33

Page 51: Algoritmos elementares sobre grafos (II)

Teorema da correcaoCorrecao

Teorema (Correcao de Graph-SCC)

Seja G um grafo dirigido qualquer, Graph-SCC(G ) calculacorretamente os componentes fortemente conectados de G .

Roteiro da demonstracao:

I inducao

I numero de arvores de profundidade encontrados emDFS(GT ).

I mostramos que, assumindo que as arvores anteriores sao SCC,cada nova arvore formada e um SCC

I trivial para a primeira arvore (nao existe arvores anteriores)

30 / 33

Page 52: Algoritmos elementares sobre grafos (II)

Prova do teorema da correcaoCorrecao

Demonstracao.

I Seja T uma arvore de profundidade de raiz r produzida porDFS(GT ).

I Seja C (r) = {w · φ(w) = r} (e um SCC)I Mostramos que u e incluıdo em T se e somente se u ∈ C (r)

I (⇐)I (⇒)

31 / 33

Page 53: Algoritmos elementares sobre grafos (II)

Prova do teorema da correcaoCorrecao

Demonstracao.

I Seja T uma arvore de profundidade de raiz r produzida porDFS(GT ).

I Seja C (r) = {w · φ(w) = r} (e um SCC)I Mostramos que u e incluıdo em T se e somente se u ∈ C (r)

I (⇐)I teorema “busca em profundidade e vertices de um SCC”I cada vertice em C(r) termina em uma mesma arvore de

profundidadeI como r ∈ C(r), e r e a raiz de T , entao cada elemento de

C(r) termina precisamente em T .

I (⇒)

31 / 33

Page 54: Algoritmos elementares sobre grafos (II)

Prova do teorema da correcaoCorrecao

Demonstracao.

I Seja T uma arvore de profundidade de raiz r produzida porDFS(GT ).

I Seja C (r) = {w · φ(w) = r} (e um SCC)I Mostramos que u e incluıdo em T se e somente se u ∈ C (r)

I (⇐)I (⇒) Mostramos que, para um vertice w , se φ(w). f < r . f , ouφ(w). f > r . f , w nao pertence a T

31 / 33

Page 55: Algoritmos elementares sobre grafos (II)

Prova do teorema da correcaoCorrecao

Demonstracao.

I Seja T uma arvore de profundidade de raiz r produzida porDFS(GT ).

I Seja C (r) = {w · φ(w) = r} (e um SCC)I Mostramos que u e incluıdo em T se e somente se u ∈ C (r)

I (⇐)I (⇒) Mostramos que, para um vertice w , se φ(w). f < r . f , ouφ(w). f > r . f , w nao pertence a T

I φ(w). f < r . fI se w for colocado em T , entao w rI logo, φ(w). f ≤ φ(r). f = r . fI contradicao

31 / 33

Page 56: Algoritmos elementares sobre grafos (II)

Prova do teorema da correcaoCorrecao

Demonstracao.

I Seja T uma arvore de profundidade de raiz r produzida porDFS(GT ).

I Seja C (r) = {w · φ(w) = r} (e um SCC)I Mostramos que u e incluıdo em T se e somente se u ∈ C (r)

I (⇐)I (⇒) Mostramos que, para um vertice w , se φ(w). f < r . f , ouφ(w). f > r . f , w nao pertence a T

I φ(w). f > r . fI por hipotese de inducao, quando r for selecionado em

DFS(GT ), w . f tera sido inserido na arvore de raiz φ(w).I um vertice e inserido exatamente em uma arvore.

31 / 33

Page 57: Algoritmos elementares sobre grafos (II)

Teorema da correcaoCorrecao

Teorema (Correcao de Graph-SCC)

Seja G um grafo dirigido qualquer, Graph-SCC(G ) calculacorretamente os componentes fortemente conectados de G .

Demonstracao.

I inducao

I numero de arvores de profundidade encontrados emDFS(GT ).

I mostramos que, assumindo que as arvores anteriores sao SCC,cada nova arvore formada e um SCC

I trivial para a primeira arvore (nao existe arvores anteriores)

32 / 33

Page 58: Algoritmos elementares sobre grafos (II)

Teorema da correcaoCorrecao

Teorema (Correcao de Graph-SCC)

Seja G um grafo dirigido qualquer, Graph-SCC(G ) calculacorretamente os componentes fortemente conectados de G .

Demonstracao.

I inducao

I numero de arvores de profundidade encontrados emDFS(GT ).

I mostramos que, assumindo que as arvores anteriores sao SCC,cada nova arvore formada e um SCC

I trivial para a primeira arvore (nao existe arvores anteriores)

32 / 33

Page 59: Algoritmos elementares sobre grafos (II)

Exercıcios

1. Como pode evoluir a quantidade de SCC em um grafo quandouma aresta e adicionada? removida?

2. Seja G um grafo dirigido. O grafo dos componentes de G e ografo GSCC = (V SCC ,ESCC ), tal que V SCC contem umvertice por SCC de G , e ESCC contem a aresta (u, v) se existeuma aresta entre um vertice de u e um vertice de v no grafoG .Mostre que o grafo dos componentes conectados de G e umDAG.

3. Escreva um algoritmo que calcula o grafo dos componentes deG = (V ,E ), com complexidade O(|V |+ |E |).Nota: o grafo resultado deve ter, ao maximo, uma arestaentre cada par de vertices.

4. Um grafo e semi-conectado se, para qualquer par de vertices(u, v), ou u v ou v u.Escreva um algoritmo eficiente que testa se um grafo esemi-conectado. Mostre que seu algoritmo e correto.

33 / 33