S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de...

44

Transcript of S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de...

Page 1: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Componentes fortemente conexas

S 19.8CLRS 22.5

Algoritmos em Grafos � 1º sem 2014 1 / 1

Page 2: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafos fortemente conexos

Um digrafo é fortemente conexo se e somente separa cada par {s,t} de seus vértices, existemcaminhos de s a t e de t a s

Exemplo: um digrafo fortemente conexo

0

5

1

6 7 8

4

9 10

2

3

11 12

Algoritmos em Grafos � 1º sem 2014 2 / 1

Page 3: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Componentes fortemente conexas

Uma componente fortemente conexa (= strongly

connected) é um conjunto maximal de vértices W talque digrafo induzido por W é fortemente conexo

Exemplo: 4 componentes fortemente conexas

0

5

1

6 7 8

4

9 10

2

3

11 12

Algoritmos em Grafos � 1º sem 2014 3 / 1

Page 4: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Componentes fortemente conexas

Uma componente fortemente conexa (= strongly

connected) é um conjunto maximal de vértices W talque digrafo induzido por W é fortemente conexo

Exemplo: 4 componentes fortemente conexas

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 4 / 1

Page 5: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Relações de equivalência

Dada uma relação binária ⇒ no conjunto C, seja ⇒∗seu fecho re�exivo e transitivo. De�na, para a, b ∈ C

a⇔ b sse a⇒∗ b e b ⇒∗ aclaro que ⇔ é um relação de equivalência.Caso típico: ⇒ é alguma transformação de dados.

Problema: Determinar as classes de equivalência.

Mesma coisa que achar as componentes fortementeconexas dografo com vértices C e arcos dados por ⇒.

Algoritmos em Grafos � 1º sem 2014 5 / 1

Page 6: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Relações de equivalência

Dada uma relação binária ⇒ no conjunto C, seja ⇒∗seu fecho re�exivo e transitivo. De�na, para a, b ∈ C

a⇔ b sse a⇒∗ b e b ⇒∗ aclaro que ⇔ é um relação de equivalência.Caso típico: ⇒ é alguma transformação de dados.

Problema: Determinar as classes de equivalência.

Mesma coisa que achar as componentes fortementeconexas dografo com vértices C e arcos dados por ⇒.

Algoritmos em Grafos � 1º sem 2014 6 / 1

Page 7: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Relações de equivalência

Dada uma relação binária ⇒ no conjunto C, seja ⇒∗seu fecho re�exivo e transitivo. De�na, para a, b ∈ C

a⇔ b sse a⇒∗ b e b ⇒∗ aclaro que ⇔ é um relação de equivalência.Caso típico: ⇒ é alguma transformação de dados.

Problema: Determinar as classes de equivalência.

Mesma coisa que achar as componentes fortementeconexas dografo com vértices C e arcos dados por ⇒.

Algoritmos em Grafos � 1º sem 2014 7 / 1

Page 8: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Relações de equivalência

Dada uma relação binária ⇒ no conjunto C, seja ⇒∗seu fecho re�exivo e transitivo. De�na, para a, b ∈ C

a⇔ b sse a⇒∗ b e b ⇒∗ aclaro que ⇔ é um relação de equivalência.Caso típico: ⇒ é alguma transformação de dados.

Problema: Determinar as classes de equivalência.

Mesma coisa que achar as componentes fortementeconexas dografo com vértices C e arcos dados por ⇒.

Algoritmos em Grafos � 1º sem 2014 8 / 1

Page 9: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Determinando componentes f.c.

Problema: determinar as componentes fortementeconexas

Exemplo: 4 componentes fortemente conexas

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 9 / 1

Page 10: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10 11 12

sc[v] 2 1 2 2 2 2 2 3 3 0 0 0 0

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 10 / 1

Page 11: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10 11 12

sc[v] 2 1 2 2 2 2 2 3 3 0 0 0 0

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 11 / 1

Page 12: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

strongreach

int

strongreach(Digraph G,Vertex s,Vertex t)

{

return sc[s]==sc[t];

}

Algoritmos em Grafos � 1º sem 2014 12 / 1

Page 13: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Força Bruta

int DIGRAPHsc1 (Digraph G) {

Vertex v , w ; int n ;

Graph H = GRAPHinit(G�>V);1 for (v = 0; v < G->V; v++)

2 for (v = w+1; v < G->V; v++)

3 if (DIGRAPHpath(G,v,w)==1&& DIGRAPHpath(G,w,v)==1)

4 GRAPHinsertE(H,v,w);5 n = GRAPHcc(H);6 for (v = 0; v < G->V; v++)

7 sc[v]=cc[v];

8 return n ;

}Algoritmos em Grafos � 1º sem 2014 13 / 1

Page 14: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Consumo de tempo

O consumo de tempo da função DIGRAPHsc1

para vetor de listas de adjacência é O(V2(V+ A)).

O consumo de tempo da função DIGRAPHsc1

para matriz de adjacência é O(V4).

Algoritmos em Grafos � 1º sem 2014 14 / 1

Page 15: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Propriedade

Os vértices de uma componente fortemente conexainduzem uma subarborescência em uma �orestaDFS

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 15 / 1

Page 16: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo das componentes

O digrafo das componentes de G tem um vérticepara cada componente fortemente conexa e um arcoU-W se G possui um arco com ponta inicial em U eponta �nal em W

Digrafo das componente é um DAG

Algoritmos em Grafos � 1º sem 2014 16 / 1

Page 17: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo das componentes

O digrafo das componentes de G tem um vérticepara cada componente fortemente conexa e um arcoU-W se G possui um arco com ponta inicial em U eponta �nal em W

Digrafo das componente é um DAG

Algoritmos em Grafos � 1º sem 2014 17 / 1

Page 18: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Idéia . . . G e DFS

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 18 / 1

Page 19: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Idéia . . . G e DFS

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 19 / 1

Page 20: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Idéia . . . G e DFS

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 20 / 1

Page 21: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Idéia . . . G e DFS

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 21 / 1

Page 22: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Idéia . . . G e DFS

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 22 / 1

Page 23: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Numeração pós-ordem (�nalização)

pos[v] = numeração pós-ordem de vsop[i] = vértice de numeração pós-ordem i

pos[W] = maior numeração pós-ordem de um vérticeem W

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 23 / 1

Page 24: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10 11 12

pos[v] 6 5 7 8 9 4 10 11 12 3 1 2 0

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 24 / 1

Page 25: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Exemplo

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 12 10 11 9 5 1 0 2 3 4 6 7 8

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 25 / 1

Page 26: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Exemplopos[{7,8}] = 12pos[{0, 2, 3, 4, 5,6}] = 10pos[{1}] = 5pos[{9, 10, 11, 12}] = 3

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 26 / 1

Page 27: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Numeração pós-ordem e componentes f.c.

Se U e W são componentes f.c. e existe arco componta inicial em U e ponta �nal em W, então

pos[U] > pos[W]

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 27 / 1

Page 28: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Propriedade

Um digrafo G e seu digrafo reverso R têm as mesmascomponentes fortemente conexas

Exemplo: Digrafo G

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 28 / 1

Page 29: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Propriedade

Um digrafo G e seu digrafo reverso R têm as mesmascomponentes fortemente conexas

Exemplo: Digrafo reverso R de G

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 29 / 1

Page 30: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo reverso R

v 0 1 2 3 4 5 6 7 8 9 10 11 12

sc[v] 2 1 2 2 2 2 2 3 3 0 0 0 0

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 30 / 1

Page 31: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo reverso R e DFS

v 0 1 2 3 4 5 6 7 8 9 10 11 12

pos[v] 7 8 6 5 4 3 2 1 0 12 9 10 11

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 31 / 1

Page 32: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo reverso R e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 32 / 1

Page 33: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo reverso R e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 33 / 1

Page 34: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 34 / 1

Page 35: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 35 / 1

Page 36: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 36 / 1

Page 37: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 37 / 1

Page 38: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

sop[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos � 1º sem 2014 38 / 1

Page 39: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Algoritmo de Kosaraju

A função devolve o número de componentesfortemente conexas do digrafo G

static int sc[maxV];

static Vertex sop[maxV], sopR[maxV];static int cnt, id;

Além disso, ela armazena no vetor sc o número dacomponente a que o vértice pertence: se o vértice vpertence à k-ésima componente então sc[v] ==

k-1

int DIGRAPHsc (Graph G)

Algoritmos em Grafos � 1º sem 2014 39 / 1

Page 40: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

DIGRAPHsc

int DIGRAPHsc (Digraph G) {

Vertex v ;

int id, i;

1 Digraph R = DIGRAPHreverse(G);

2 cnt = 0;

3 for (v = 0; v < R->V; v++) sc[v]=-1;

4 for (v = 0; v < R->V; v++)

5 if (sc[v] == -1)

6 dfsRsc(R, v, 0);

Algoritmos em Grafos � 1º sem 2014 40 / 1

Page 41: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

DIGRAPHsc

7 for (i = 0; i < G->V; i++)

8 sopR[i] = sop[i];

9 cnt = id = 0;

10 for (v = 0; v < G->V; v++) sc[v]=-1;

11 for (i = G->V-1; i > 0; i--)

12 if (sc[sopR[i]] == -1)

13 dfsRsc(G, sopR[i], id++);

14 DIGRAPHdestroy(R);

15 return id;

}

Algoritmos em Grafos � 1º sem 2014 41 / 1

Page 42: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

dfsRsc

void dfsRsc(Digraph G,Vertex v,int id){

link p;

1 sc[v] = id;

2 for (p =G->adj[v]; p; p = p->next)

3 if (sc[p->w] == -1)

4 dfsRsc(G, p->w, id);

5 pos[v] = cnt; /* não precisa */

6 sop[cnt++] = v;

}

Algoritmos em Grafos � 1º sem 2014 42 / 1

Page 43: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

DIGRAPHreverse

Digraph DIGRAPHreverse (Digraph G) {

1 Vertex v; link p;

2 Digraph R = DIGRAPHinit(G->V);

3 for (v =0; v < G->V; v++)

4 for (p =G->adj[v]; p; p = p->next)

5 DIGRAPHinsertA(G,p->w,v);

6 return R;}

Algoritmos em Grafos � 1º sem 2014 43 / 1

Page 44: S 19.8 CLRS 22am/328/aulas/aula-0327.pdf · Algoritmos em Grafos 1 º sem 2014 7/1. Relações de equivalência Dada uma relação binária )no conjunto C, seja ) seu fecho re exivo

Consumo de tempo

O consumo de tempo da função DIGRAPHsc éO(V+ A).

Algoritmos em Grafos � 1º sem 2014 44 / 1