32
CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra Juliana de Melo Bezerra

Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

CES-11

Algoritmos e g mEstruturas de Dados

Carlos Alberto Alonso SanchesJuliana de Melo BezerraJuliana de Melo Bezerra

Page 2: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Ideia de Tarjan (1972)Ideia de Tarjan (1972)j ( )j ( )

Durante a exploração em profundidade de um digrafo podemos numerar seus vértices de acordo digrafo, podemos numerar seus vértices de acordo com o início e o término dessa exploração.

As diferentes situações permitem estabelecer uma classificação dos arcos.

Page 3: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

ExemploExemplo

Não visitado

mpmp

expl: número de exploração

Em exploração

Terminado 6

p p ç

comp: número de complementação

FE

A D

6

4 5

1

A D

B

E G1 76 8

BC

E G

2

6 8

B

CG

2

3

84

7C

H F3 H5

2

Page 4: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Classificação dos arcosClassificação dos arcosf çf çClassificação do arco <v,u>:

A D

Árvore (T): u ainda não havia sido explorado, e será filho de v em T (expl[u]=0)

B

D(expl[u]=0)Retorno (B): u é antecessor de v em T, pois começou antes de v e ainda

E G

pestá em exploração (expl[u]<expl[v] e comp[u]=0)Cruzamento (C): u está em outra CCruzamento (C): u está em outra árvore ou sub-árvore, pois começou antes de v e já foi explorado ( )

F H

(expl[u]<expl[v] e comp[u]>0)Avanço (F): u é descendente de v em T pois começou depois de v e já em T, pois começou depois de v e já foi explorado(expl[u]>expl[v] e comp[u]>0)

Page 5: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Algoritmo de TarjanAlgoritmo de TarjanAlgor tmo de TarjanAlgor tmo de TarjanSua implementação deve

Tarjan() {int ce = 0;

DFS(v) {expl[v] = ++ce;

receber as variáveis ce e cc

int ce = 0;int cc = 0;for v ∈ V {

expl[v] = 0;

for <v,u> ∈ E if (expl[u] == 0) {

tipo[<v,u>] = T;expl[v] 0;comp[v] = 0;

}for v ∈ V

DFS(u);}else if (expl[u] > expl[v])

ti [< >] Fif (expl[v] == 0)DFS(v);

}

tipo[<v,u>] = F;else if (comp[u] > 0)

tipo[<v,u>] = C;else tipo[<v u>] = B;else tipo[<v,u>] = B;

comp[v] = ++cc;}

Complexidade de tempo: Θ(n+m)

Page 6: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

ExercícioExercício

Considere um grafo não orientado sem laços e sem Considere um grafo não orientado, sem laços e sem arestas repetidas. Se aplicarmos o algoritmo de Tarjan nesse grafo somente haverá arestas de Tarjan nesse grafo, somente haverá arestas de árvore e de retorno. Por quê?

Page 7: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

CESCES--1111Grafos

Conceitos gerais e representações

Algoritmos em grafosAlgoritmos em grafosExploração sistemática em largura

Caminhos mais curtos

Exploração sistemática em profundidade

Teste de aciclicidade

Ordenação topológicaç p g

Componentes fortemente conexos

Vértices e arestas de corteVértices e arestas de corte

Árvore geradora de custo mínimo

Page 8: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Teste de Teste de aciclicidadeaciclicidade

Certas aplicações como a ordenação topológica Certas aplicações, como a ordenação topológica, exigem que o digrafo seja acíclico.D fi i ã di f í li é h d d DAGDefinição: um digrafo acíclico é chamado de DAG.Portanto, uma tarefa importante é verificar se pum determinado digrafo é um DAG.A exploração em profundidade pode nos dar uma A exploração em profundidade pode nos dar uma boa solução para esse problema. C t t b t i ã d l it Concretamente, basta uma variação do algoritmo de Tarjan: se um arco de retorno for encontrado d t l ã tã di f á í lidurante a exploração, então o digrafo será cíclico.

Page 9: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Ideia do algoritmoIdeia do algoritmog mg mIdeia:

Manter uma pilha com os ancestrais do vértice que está sendo visitado, incluindo ele próprio.

Quando terminar a exploração dos seus vértices adjacentes, ele deverá ser retirado dessa pilha.

Se um arco de retorno for encontrado, o ciclo estará nessa pilha (desde o topo até o vértice atingido pelo arco).

8 4444

8Arco de retorno Não é arco de retorno!

5

7

611

22

33 11

22

335

7

6

Cíclico Acíclico

Page 10: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Um exemploUm exemplom mpm mp

Considere a exploração do Considere a exploração do digrafo ao lado, começada no vértice 1.

Ao explorar o vértice 5, estarão na pilha seus pancestrais 1, 3, 8 e 2, além dele mesmo.

Na tentativa de explorar o vértice 8, encontra-se um ,arco de retorno.

Logo esse digrafo é Logo, esse digrafo é cíclico.

Page 11: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

AlgoritmoAlgoritmog mg m

DFS(v) { Sua implementação deve

Aciclicidade() {pilha P;

DFS(v) {expl[v] = ++ce;push(P,v);for <v u> ∈ E

p çreceber as variáveis ce, cc, P e aciclico

inicPilha(P);bool aciclico = true;int ce = 0;int cc = 0;

for <v,u> ∈ Eif (expl[u] == 0)

DFS(u);elseint cc = 0;

for v ∈ V {expl[v] = 0;comp[v] = 0;

else if (expl[u]<expl[v] && comp[u]==0)

aciclico = false; // ciclo está em Pcomp[v] 0;

}for v ∈ V if (expl[v] == 0)

//// desde o topo até u

pop(P);comp[v] = ++cc;

DFS(v);if (!aciclico)

escrever (“Grafo é cíclico”);

}

elseescrever (“Grafo é acíclico”);

}

Page 12: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Uma observaçãoUma observaçãom çm çComo todo ciclo possui ao menos uma aresta de retorno, o l i i ifi i ê i ã d i l algoritmo anterior verifica a existência ou não de ciclos em

um digrafo.

No entanto, ele não é capaz de identificar todos os ciclos...

No exemplo abaixo aplicando o algoritmo a partir de A em No exemplo abaixo, aplicando o algoritmo a partir de A em ordem alfabética, podem ser encontrados os ciclos ABC e ABD. B AB A

D CD C

No entanto, o ciclo ABDC não será identificado. Isso se d f d l é há d deve ao fato de que, neste ciclo, também há uma aresta de cruzamento.

Page 13: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

CESCES--1111Grafos

Conceitos gerais e representações

Algoritmos em grafosAlgoritmos em grafosExploração sistemática em largura

Caminhos mais curtos

Exploração sistemática em profundidade

Teste de aciclicidade

Ordenação topológicaç p g

Componentes fortemente conexos

Vértices e arestas de corteVértices e arestas de corte

Árvore geradora de custo mínimo

Page 14: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Ordenação topológicaOrdenação topológicaç p gç p g

Como vimos, ordenação topológica é o processo de se ordenar Como vimos, ordenação topológica é o processo de se ordenar os vértices de um DAG: se houver um arco do vértice i para o vértice j, então i aparecerá antes de j na ordenação.

Aplicação muito comum: encontrar um escalonamento de tarefas. f

De modo geral, grandes projetos são formados por tarefas, entre as quais existe uma relação de dependência temporal entre as quais existe uma relação de dependência temporal.

Através da ordenação topológica, obtém-se uma sequência álid d ã d ss s t f s Iss é íti d válida de execução dessas tarefas. Isso é crítico quando

poucas tarefas podem ser executadas simultaneamente.

Page 15: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Uma aplicaçãoUma aplicaçãom p çm p çA ordenação topológica poderia ser aplicada, por exemplo,

ód l i á i di i li em um curso com módulos semestrais, com várias disciplinas por módulos.

O DAG representaria o sistema de pré-requisitos entre as disciplinas do curso, e cada ordenação topológica

d i í l ê i corresponderia a uma possível sequência em que as disciplinas poderiam ser cursadas.

Exemplo: disciplinas D1, D2, D3, D4 e D5.(D1, D2, D3, D4, D5) e (D2, D4, D1, D3, D5) são ordenações topológicas do DAG abaixo.

Page 16: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Exemplo de ordenação topológicaExemplo de ordenação topológicamp ç p gmp ç p g

Considere o DAG abaixo: Sequência de término Considere o DAG abaixo: Sequência de término de exploração

Vamos fazer sua Vamos fazer sua exploração em profundidade dando prioridade dando prioridade sempre aos vértices de

lmenor valor.

Page 17: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Uma soluçãoUma soluçãom çm ç

A ordenação topológica pode ser resolvida com uma simples p g p pvariante da exploração em profundidade: basta utilizar o vetor de complementação em ordem inversa.

OrdemTopol(s) {int ce = 0;int cc = 0;

DFS(v) {expl[v] = ++ce;for <v,u> ∈ E

for v ∈ V {expl[v] = 0;comp[v] = 0;

for <v,u> ∈ Eif (expl[u] == 0)

DFS(u);comp[v] = ++cc;

}DFS(s);for v ∈ V

if ( l[ ] 0)

p[ ] ;}

Complexidade de tempo: O(n+m)if (expl[v] == 0)

DFS(v);for v ∈ V

escrever (v |V| comp[v]+1);

Usando uma pilha, seria possível imprimir os

p p ( )

escrever (v, |V|-comp[v]+1); }

p pvértices já na ordem

topológica. Como?

Page 18: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

CESCES--1111Grafos

Conceitos gerais e representações

Algoritmos em grafosAlgoritmos em grafosExploração sistemática em largura

Caminhos mais curtos

Exploração sistemática em profundidade

Teste de aciclicidade

Ordenação topológicaç p g

Componentes fortemente conexos

Vértices e arestas de corteVértices e arestas de corte

Árvore geradora de custo mínimo

Page 19: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Componentes fortemente conexos (CFC)Componentes fortemente conexos (CFC)mp f m ( )mp f m ( )Em um digrafo, os componentes fortemente conexos (CFC) são subconjuntos maximais de vértices conectados entre si, isto é, dados dois vértices vi e vj em um mesmo CFC, há um caminho de v a v e de v a vcaminho de vi a vj e de vj a vi.

Di rafo CFC d di f Di rafo reduzidoDigrafo CFCs do digrafo Digrafo reduzido(é um DAG)

Importante:Importante:{1,2,3} não é um CFC, pois não é maximal

Page 20: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Componentes fortemente conexos (CFC)Componentes fortemente conexos (CFC)mp f m ( )mp f m ( )

Para que servem? Para que servem?

Por exemplo, para subdividir problemas em digrafos( b bl lh d CFC)(um subproblema semelhante para cada CFC)

Exemplos:Exemplos:Estudo de privacidade em sistemas de comunicação

Análise de circuitos eletrônicos: classes de equivalência

Análise do fluxo de controle para a validação de Análise do fluxo de controle para a validação de programas

Facilitar a paralelização de laços sequenciais

Page 21: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Componentes fortemente conexos (CFC)Componentes fortemente conexos (CFC)mp f m ( )mp f m ( )

Exemplo: decomposição de laços sequenciais Exemplo: decomposição de laços sequenciais

for (i = 1; i <= n; i++) { ÉC1: A[i] = B[i] + C[i];

C2: D[i] = E[i] + F[i];C3: E[i+1] = A[i] + G[i]; C4 H[i] F[i] B[i]

É possível representar em um digrafo as

dependências temporais C4: H[i] = F[i] + B[i];C5: B[i+1] = E[i+1] + M[i];C6: F[i+1] = D[i] + N[i];

}

p pentre esses comandos

}

Digrafo dos CFC

Page 22: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Componentes fortemente conexos (CFC)Componentes fortemente conexos (CFC)mp f m ( )mp f m ( )

L s d m st s d d m s CFC:Laços decompostos de acordo com os CFC:

f (i 1 i < i++) {for (i = 1; i <= n; i++) {C1: A[i] = B[i] + C[i];C3: E[i+1] = A[i] + G[i]; C5: B[i+1] = E[i+1] + M[i];C5: B[i+1] = E[i+1] + M[i];

}

for (i = 1; i <= n; i++) {for (i = 1; i <= n; i++) {C2: D[i] = E[i] + F[i];C6: F[i+1] = D[i] + N[i];

}

Geralmente, é mais fácil aplicar técnicas de paralelização em }

for (i = 1; i <= n; i++) {C4: H[i] = F[i] + B[i];

p çlaços menores

[ ] [ ] [ ];}

Page 23: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Componentes fortemente conexos (CFC)Componentes fortemente conexos (CFC)mp f m ( )mp f m ( )

É possível encontrar os componentes fortemente conexos de p pum digrafo através de uma variante do algoritmo de Tarjan.

Ideia: Ideia: Considere a árvore T de exploração em profundidade e a numeração expl[v] para cada v ∈ Vexpl[v] para cada v ∈ V.

Os vértices que estão em exploração são empilhados (permanecerão na pilha até que seja encontrado o seu componente conexo).p q j p )

Cada vértice v guardará CFC[v], que é o menor número de exploração entre os vértices na pilha que atingir durante sua exploração. Desse

ámodo, ficará automaticamente associado a um componente conexo.

Quando a exploração do vértice v terminar, se expl[v] = CFC[v] então t d s s é ti s ilh (d sd t té ) t m m todos os vértices na pilha (desde o topo até v) pertencem a um mesmo componente, e podem ser desempilhados.

Page 24: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

ExemploExemplompmp

DAEBH

FE

6

4

DAEBH

426

1 7 GC

A D1 7

F1 7

B

G

2

82

87

Importante: nem todos os vértices de um mesmo componente terminam com o

CG

H

3

5 35 2

87 componente terminam com o mesmo valor.

Exemplo: acrescente um arco C A di f <C,A> nesse mesmo digrafo, e

visite <C,F> antes.

Page 25: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

AlgoritmoAlgoritmoAlgoritmoAlgoritmoDFSCFC(v) {

l[ ] d TarjanCFC() {pilha P;

expl[v] = ++ce;push(P,v);CFC[v] = expl[v];f < > E

Arco de árvore

p ;inicPilha(P);int ce = 0;for v ∈ V

for <v,u> ∈ Eif (expl[u] == 0) {

DFSCFC(u); CFC[v] = min{CFC[v] CFC[u]};

expl[v] = 0;for v ∈ V

if (expl[v] == 0)

CFC[v] = min{CFC[v],CFC[u]};}else if (u ∈ P)

CFC[v] = min{CFC[v] expl[u]};DFSCFC(v);

}

CFC[v] = min{CFC[v],expl[u]};if (CFC[v] == expl[v])

do {x = top(P); Vé i x top(P); pop(P);

} while (x != v);}

Vértices sem componente

definido}

Complexidade de tempo: O(n+m)

Page 26: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

CESCES--1111Grafos

Conceitos gerais e representações

Algoritmos em grafosAlgoritmos em grafosExploração sistemática em largura

Caminhos mais curtos

Exploração sistemática em profundidade

Teste de aciclicidade

Ordenação topológicaç p g

Componentes fortemente conexos

Vértices e arestas de corteVértices e arestas de corte

Árvore geradora de custo mínimo

Page 27: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Vértices de corteVértices de corteUma variante do algoritmo de Tarjan pode encontrar os é i d ( d i l ã ) d f vértices de corte (ou pontos de articulação) de um grafo

G=(V,E) conexo não-orientado, sem laços ou arestas repetidas.

Desse modo, se fizéssemos uma exploração em profundidade a partir de cada vértice do grafo, poderíamos identificar todos os vértices de corte (no entanto, há outra solução mais eficiente)

Ideia:Considere a árvore T de exploração em profundidade e a numeração

l[ ] d Vexpl[v] para cada v ∈ V.Raiz: será vértice de corte se tiver pelo menos dois filhos em T.Demais vértices: Demais vértices:

v será vértice de corte se tiver algum filho sem retorno para nenhum dos ancestrais de v.É l l d [ ] í { l[ ] l[ ] } d é é ti ( d É calculado m[v] = mín{ expl[v], expl[x] }, onde x é um vértice que v (ou um de seus descendentes) atinge em T através de uma única aresta de retorno. Portanto, v será vértice de corte se tiver algum filho u tal que m[u] ≥ expl[v].

Page 28: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

ExemploExemplo

6

mpmp

11

DF

6

44 61 11A

B 2

A H1 7

1 1

1B 2

3H

2

1 73 1

64

C

B

G

2

3

82

38

11 5D E F

7

54

1

CE

5 35

13H

7

8

C e H são vértices de corte 8G8

Page 29: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

AlgoritmoAlgoritmoAlgor tmoAlgor tmoTarjanVC(r) {// válido se for conexo e

DFSVC(v) {expl[v] = ++ce;// válido se for conexo e

// não tiver laços ou// arestas repetidasint ce = 0;

expl[v] = ++ce;m[v] = expl[v];for <v,u> ∈ E if (expl[u] == 0) {;

for v ∈ V {expl[v] = 0;pai[v] = null;

if (expl[u] == 0) {pai[u] = v;nfilhos[v]++;DFSVC(u);

Trata as arestas de retorno,

id nfilhos[v] = 0;VC[v] = false;

}

DFSVC(u);m[v] = min{m[v],m[u]};

}else // arestas de retorno

tanto na ida como na volta

DFSVC(r);VC[r] = (nfilhos[r] > 1);for v ∈ V-{r} {

//if(u != pai[v]) m[v] = min{m[v],expl[u]};

} p = pai[v];VC[p] = VC[p] || (m[v]>=expl[p]);

} f V

Complexidade de tempo: O(n+m)for v ∈ V

if (VC[v]) v é vértice de corte}

p p ( )

Page 30: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

Arestas de corteArestas de corte

A identificação das arestas de corte (ou pontes) é A identificação das arestas de corte (ou pontes) é realizada de maneira semelhante:

áEncontrar uma árvore de exploração T, calculando as mesmas numerações expl e m para os vértices.

É fácil constatar que nenhuma aresta de retorno dessa exploração pode ser de corte.

Uma aresta <v,u> є T será de corte se m[u] = expl[u].

Page 31: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

No exemplo anteriorNo exemplo anterior

6

mpmp

11

DF

6

44 61 11A

B 2

A H1 7

1 1

1B 2

3H

2

1 73 1

64

C

B

G

2

3

82

38

11 5D E F

7

54

1

CE

5 35

13H

7

8

<C,E> e <H,G> são arestas de corte 8G8

Page 32: Alggmoritmos e Estruturas de Dadosalonso/ensino/CES11/ces11-cap09c.pdf · Através da ordenação topológica, obtém-se uma sequência vdi d lá ã dss ts fs Iss é ití d álida

AlgoritmoAlgoritmoAlgoritmoAlgoritmo

DFSAC(v) {

TarjanAC(r) {// válido se for conexo e// ã ti l

DFSAC(v) {expl[v] = ++ce;m[v] = expl[v];for <v,u> ∈ E// não tiver laços ou

// arestas repetidasint ce = 0;for v ∈ V {

o ,uif (expl[u] == 0) {pai[u] = v;DFSAC(u);

for v ∈ V {expl[v] = 0;pai[v] = null;

}

m[v] = min{m[v],m[u]};if (m[u] == expl[u])

<v,u> é aresta de corte}DFSAC(r);

}

}else // arestas de retornoif(u != pai[v]) m[v] = min{m[v],expl[u]};

}

Complexidade de tempo: O(n+m)