33
Pontes em grafos e aresta-biconexão S 18.6 Algoritmos em Grafos — 1º sem 2012 1 / 72

Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Pontes em grafos e aresta-biconexão

S 18.6

Algoritmos em Grafos — 1º sem 2012 1 / 72

Page 2: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Pontes em grafosUma aresta de um grafo é uma ponte (= bridge =separation edge) se ela é a única aresta que atravessaalgum corte do grafo.

Exemplo:

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 2 / 72

Page 3: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Pontes em grafosUma aresta de um grafo é uma ponte (= bridge =separation edge) se ela é a única aresta que atravessaalgum corte do grafo.

Exemplo: as arestas em vermelho são pontes

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 3 / 72

Page 4: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Procurando pontes

Problema: encontrar as pontes de um grafo dado

Exemplo: as arestas em vermelho são pontes

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 4 / 72

Page 5: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

all_bridges1

Recebe um grafo G e calcula o número bcnt depontes do grafo G e imprime todas as pontes.

void all_bridges1 (Graph G);

Algoritmos em Grafos — 1º sem 2012 5 / 72

Page 6: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Primeiro algoritmovoid all_bridges1 (Graph G) {

Vertex v, w; link p; int ligados;1 for (v = 0; v < G–>V; v++)2 for(p=G–>adj[v];p!=NULL;p=p–>next){3 w = p–>w;4 if (v < w) {5 GRAPHremoveA(G,w,v);6 ligados = DIGRAPHpath(G,w,v);7 GRAPHinsertA(G,w,v);8 if (!ligados) {9 bcnt++;

10 output(v, w);}

}}

}

Algoritmos em Grafos — 1º sem 2012 6 / 72

Page 7: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Consumo de tempo

O consumo de tempo da função all_bridges1é A/2 vezes o consumo de tempo da função

DIGRAPHpath.

O consumo de tempo da função all_bridges1para vetor de listas de adjacência é O(A(V+ A)).

O consumo de tempo da função all_bridges1para matriz de adjacência é O(AV2).

Algoritmos em Grafos — 1º sem 2012 7 / 72

Page 8: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Pontes e busca em profundidade

Em uma floresta DFS, um dos dois arcos de cadaponte será um arco da arborescênciaExemplo: arcos em vermelho são da arborescência

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 8 / 72

Page 9: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Pontes e busca em profundidade

Em uma floresta DFS, um dos dois arcos de cadaponte será um arco da arborescênciaExemplo: arcos em vermelho são da arborescência

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 9 / 72

Page 10: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

PropriedadeUm arco v-w da floresta DFS faz parte (juntamentecom w-v) de uma ponte se e somente se não existearco de retorno que ligue um descendente de w a umancestral de v

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 10 / 72

Page 11: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Numeração em ordem de descoberta(pré-ordem)

v 0 1 2 3 4 5 6 7 8 9 10pre[v] 0 4 1 2 6 8 9 10 3 7 5

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 11 / 72

Page 12: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Lowest Preorder NumberO menor número de pré-ordem que pode seralcançado por v utilizando arcos da arborescência eaté um arco de retorno (“arco-pai” não vale) serádenotado por low[v]

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 12 / 72

Page 13: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10pre[v] 0 4 1 2 6 8 9 10 3 7 5low[v] 0 4 0 0 5 7 7 5 1 7 5

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 13 / 72

Page 14: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Observações

Para todo vértice v,

low[v] ≤ pre[v]

Para todo arco v-w do grafose v-w é um arco de arborescência então

low[v] ≤ low[w];

se v-w é uma arco de retorno, então

low[v] ≤ pre[w].

Algoritmos em Grafos — 1º sem 2012 14 / 72

Page 15: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Observações

Para todo vértice v,

low[v] ≤ pre[v]

Para todo arco v-w do grafose v-w é um arco de arborescência então

low[v] ≤ low[w];

se v-w é uma arco de retorno, então

low[v] ≤ pre[w].

Algoritmos em Grafos — 1º sem 2012 15 / 72

Page 16: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Cálculo de low[v]

Para todo vértice v,

low[v] = min{pre[w]| v-w é um arco de retorno ouv-w é um arco de arborescência}

Algoritmos em Grafos — 1º sem 2012 16 / 72

Page 17: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Algoritmo das pontes

Em qualquer floresta de busca em profundidade deum grafo, um arco de arborescência v-w faz parte deuma ponte se e somente se low[w] == pre[w]

static int cnt, pre[maxV], bcnt, low[maxV];static int parnt[maxV];

A função abaixo calcula o número bcnt de pontes dografo G e imprime todas as pontes

void all_bridges (Graph G);

Algoritmos em Grafos — 1º sem 2012 17 / 72

Page 18: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

all_bridges

void all_bridges (Graph G) {Vertex v;

1 cnt = bcnt = 0;2 for (v = 0; v < G->V; v++)3 pre[v] = -1;4 for (v = 0; v < G->V; v++)5 if (pre[v] == -1) {6 parnt[v] = v;7 bridgeR(G, v);

}}

Algoritmos em Grafos — 1º sem 2012 18 / 72

Page 19: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

bridgeRvoid bridgeR (Graph G, Vertex v) {link p; Vertex w;

1 pre[v] = cnt++;2 low[v] = pre[v];3 for (p=G->adj[v];p!=NULL;p=p->next)4 if (pre[w=p->w] == -1) {5 parnt[w] = v;6 bridgeR(G, w);7 if (low[v] > low[w]) low[v]=low[w];9 if (low[w] == pre[w]) {

10 bcnt++;11 printf("%d-%d\n", v, w);

}}

12 else if (w!=parnt[v] && low[v]>pre[w])13 low[v] = pre[w];

}Algoritmos em Grafos — 1º sem 2012 19 / 72

Page 20: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Consumo de tempo

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

Algoritmos em Grafos — 1º sem 2012 20 / 72

Page 21: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Aresta-biconexão

Um grafo é aresta-biconexo (=2-edge-connected) ou 2-aresta-conexo se forconexo e não tiver pontes.

Fato básico importante:

Um grafo é aresta-biconexo se e somente se, paracada par (s,t) de seus vértices, existem (pelomenos) dois caminhos de s a t sem arestas emcomum.

Algoritmos em Grafos — 1º sem 2012 21 / 72

Page 22: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Exemplo

É preciso remover pelo menos duas arestas de umgrafo aresta-biconexo para que ele deixe de ser conexo

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 22 / 72

Page 23: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Articulações e biconexão

S 18.6

Algoritmos em Grafos — 1º sem 2012 23 / 72

Page 24: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Articulações em grafosUma articulação (= articulation point) ou vérticede corte (= cut vertex) de um grafo é um vérticecuja remoção aumenta o número de componentes

Exemplo:

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 24 / 72

Page 25: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Articulações em grafosUma articulação (= articulation point) ou vérticede corte (= cut vertex) de um grafo é um vérticecuja remoção aumenta o número de componentes

Exemplo: os vértices em vermelho são articulações

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 25 / 72

Page 26: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Procurando articulações

Problema: encontrar as articulações de um grafo

Exemplo: os vértices em vermelho são articulações

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 26 / 72

Page 27: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Articulações e busca em profundidade

É possível encontrar todas as articulações de umgrafo através de uma variante da função bridgeR

Exemplo: os vértices em vermelho são articulações

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 27 / 72

Page 28: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Biconexão

Um grafo é biconexo (= biconnected) ou2-conexo se é conexo e não tem articulações

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 28 / 72

Page 29: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Fato básicoUm grafo é biconexo se e somente se, para cada par(s,t) de vértices, existem (pelo menos) doiscaminhos de s a t sem vértices internos em comum

0

12

3

8

10

4

5

6

7

9

Algoritmos em Grafos — 1º sem 2012 29 / 72

Page 30: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Componentes fortemente conexos

S 19.8CLRS 22.5

Algoritmos em Grafos — 1º sem 2012 30 / 72

Page 31: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Digrafos fortemente conexosUm 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 2012 31 / 72

Page 32: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Componentes fortemente conexosUm componente fortemente conexo (= stronglyconnected) é um conjunto maximal de vértices W talque digrafo induzido por W é fortemente conexo

Exemplo: 4 componentes fortemente conexos

0

5

1

6 7 8

4

9 10

2

3

11 12

Algoritmos em Grafos — 1º sem 2012 32 / 72

Page 33: Pontes em grafos e aresta-biconexão - IME-USPam/328-12/aulas/aula-0327.pdfObservações Paratodovérticev, low[v] pre[v] Paratodoarcov-w dografo sev-w éumarcodearborescência então

Componentes fortemente conexosUm componente fortemente conexo (= stronglyconnected) é um conjunto maximal de vértices W talque digrafo induzido por W é fortemente conexo

Exemplo: 4 componentes fortemente conexos

11 12

1

0

5

3

2

6 7 8

4

9 10

Algoritmos em Grafos — 1º sem 2012 33 / 72