Captulo VII Algoritmos para Grafos 7 1 Caminhos

  • Slides: 40
Download presentation
Capítulo VII – Algoritmos para Grafos 7. 1 – Caminhos de menores custos 7.

Capítulo VII – Algoritmos para Grafos 7. 1 – Caminhos de menores custos 7. 2 – Busca em profundidade para digrafos 7. 3 – Teste de aciclicidade 7. 4 – Ordenação topológica 7. 5 – Caminhos críticos em digrafos acíclicos 7. 6 – Componentes fortemente conexos 7. 7 – Árvores de cobertura de custo mínimo 7. 8 – Travessia de grafos não-orientados 7. 9 – Pontos de articulação e componentes biconexos

7. 7 – Árvores de Cobertura de Custo Mínimo 7. 7. 1 – Definições

7. 7 – Árvores de Cobertura de Custo Mínimo 7. 7. 1 – Definições e descrição do problema Seja G = {V, A} um grafo não-orientado conexo, com custos associados arcos Árvore de cobertura de G: árvore livre (sub-grafo) de G contendo todos os seus vértices Custo de uma árvore de cobertura: somatória dos custos associados a todos os arcos da árvore

Exemplo: seja o grafo: Duas de suas árvores de cobertura:

Exemplo: seja o grafo: Duas de suas árvores de cobertura:

Aplicação: cidades ligadas por uma rede de comunicação: A árvore de cobertura de custo

Aplicação: cidades ligadas por uma rede de comunicação: A árvore de cobertura de custo mínimo representa uma rede que conecta todas as cidades, por um custo mínimo

Problema: achar uma árvore de cobertura de um grafo G = {V, A} que

Problema: achar uma árvore de cobertura de um grafo G = {V, A} que seja de custo mínimo (pode haver mais de uma)

7. 7. 2 – Uma solução: algoritmo de Prim O algoritmo de Prim usa

7. 7. 2 – Uma solução: algoritmo de Prim O algoritmo de Prim usa a propriedade fundamental dessa árvore: Seja U um subconjunto próprio de V Seja (u, v) um dos arcos de menor custo tal que u Ue v V-U Então há uma árvore de cobertura de custo mínimo de G que inclui o arco (u, v)

Visualização: um conjunto V de vértices Conjunto U de vértices 35 15 80 22

Visualização: um conjunto V de vértices Conjunto U de vértices 35 15 80 22 Conjunto VU de vértices Todos os arcos que ligam vértices de U com vértices de V-U Arco pertencente a uma árvore de cobertura de custo mínimo Pode haver mais de um arco de U a V-U de menor custo

Exemplo: seja o grafo: 1 6 5 1 2 5 4 5 3 2

Exemplo: seja o grafo: 1 6 5 1 2 5 4 5 3 2 3 4 6 5 6 6

U 1 6 Menor custo 5 1 2 5 4 5 3 2 3

U 1 6 Menor custo 5 1 2 5 4 5 3 2 3 4 6 5 6 6

U 1 6 5 1 2 5 4 5 3 2 3 4 6

U 1 6 5 1 2 5 4 5 3 2 3 4 6 5 6 Menor custo 6

U 1 6 5 1 2 5 4 5 3 2 3 4 6

U 1 6 5 1 2 5 4 5 3 2 3 4 6 5 6 Menor custo 6

U 1 6 5 1 2 5 4 5 3 Menor custo 2 3

U 1 6 5 1 2 5 4 5 3 Menor custo 2 3 4 6 5 6 6

U 1 6 5 1 2 5 4 5 3 Menor custo 2 3

U 1 6 5 1 2 5 4 5 3 Menor custo 2 3 4 6 5 6 6

Árvore de cobertura de custo mínimo 1 Custo = 1+5+3+4+2 = 15 1 2

Árvore de cobertura de custo mínimo 1 Custo = 1+5+3+4+2 = 15 1 2 4 5 3 2 3 4 5 6

Algoritmo de Prim: determina o conjunto de arcos de uma árvore de cobertura de

Algoritmo de Prim: determina o conjunto de arcos de uma árvore de cobertura de custo mínimo para o grafo G = {V, A} conjuntoarcos Prim (grafo G) { conjuntovértices U; vertice u, v; conjuntoarcos T; T = ; U = {1}; enquanto (U G. V) { (u, v) = arco de custo mínimo | u U e v G. V U; T = T {( u, v )}; U = U {v}; } retornar T;

Capítulo VII – Algoritmos para Grafos 7. 1 – Caminhos de menores custos 7.

Capítulo VII – Algoritmos para Grafos 7. 1 – Caminhos de menores custos 7. 2 – Busca em profundidade para digrafos 7. 3 – Teste de aciclicidade 7. 4 – Ordenação topológica 7. 5 – Caminhos críticos em digrafos acíclicos 7. 6 – Componentes fortemente conexos 7. 7 – Árvores de cobertura de custo mínimo 7. 8 – Travessia de grafos não-orientados 7. 9 – Pontos de articulação e componentes biconexos

7. 8 – Travessia de Grafos Não-Orientados Visitar todos os nós de um grafo

7. 8 – Travessia de Grafos Não-Orientados Visitar todos os nós de um grafo não-orientado, de uma maneira sistemática 7. 8. 1 – Método da busca em profundidade Usa o mesmo algoritmo da busca em profundidade para digrafos

 Exemplo: Arcos de árvores são os mesmos; alguns arcos de volta coincidem com

Exemplo: Arcos de árvores são os mesmos; alguns arcos de volta coincidem com eles e são só arcos de árvore Arcos para frente coincidem com arcos de volta e são só arcos de volta Arcos cruzantes não existem Um grafo Um esquema de visitação

7. 8. 2 – Método da busca em largura Generalização do caminhamento por ordem

7. 8. 2 – Método da busca em largura Generalização do caminhamento por ordem de nível em árvores Em vez de caminhar na direção dos filhos, caminha na direção dos irmãos

void Busca. Largura (Grafo *G) { filavertices F; vertice x, y; Assinalar todos os

void Busca. Largura (Grafo *G) { filavertices F; vertice x, y; Assinalar todos os vértices de G como não visitados; enquanto (houver vértices não visitados) { F = ; Seja v um vértice qualquer, não visitado; Marcar v como visitado; Entrar. Fila. Vertices (v, F); enquanto (Vazia (F) == FALSE) { x = Frente. Fila (F); Deletar. Fila (F); para (cada vértice y adjacente a x) se (y não está visitado ) { Marcar y como visitado; Entrar. Fila (y, F); } }

Capítulo VII – Algoritmos para Grafos 7. 1 – Caminhos de menores custos 7.

Capítulo VII – Algoritmos para Grafos 7. 1 – Caminhos de menores custos 7. 2 – Busca em profundidade para digrafos 7. 3 – Teste de aciclicidade 7. 4 – Ordenação topológica 7. 5 – Caminhos críticos em digrafos acíclicos 7. 6 – Componentes fortemente conexos 7. 7 – Árvores de cobertura de custo mínimo 7. 8 – Travessia de grafos não-orientados 7. 9 – Pontos de articulação e componentes biconexos

7. 9 – Pontos de Articulação e Componentes Bi-conexos 7. 9. 1 – Conceitos

7. 9 – Pontos de Articulação e Componentes Bi-conexos 7. 9. 1 – Conceitos Ponto de articulação (p-artic): Vértice v de um grafo G tal que, se for removido de G junto com todos os arcos incidentes sobre ele, um componente conexo de G é particionado em dois ou mais componentes conexos Componente bi-conexo: componente conexo de um grafo G, sem p-artic’s

Exemplo: seja o seguinte grafo: Verificando se a é p-artic a b d c

Exemplo: seja o seguinte grafo: Verificando se a é p-artic a b d c e f Sim, a é partic g

Exemplo: seja o seguinte grafo: Verificando se c é p-artic a b d c

Exemplo: seja o seguinte grafo: Verificando se c é p-artic a b d c e f Sim, c é partic g

Exemplo: seja o seguinte grafo: Não há outro partic neste grafo a b d

Exemplo: seja o seguinte grafo: Não há outro partic neste grafo a b d c e f g

Exemplo: um grafo bi-conexo: Aplicação: em redes de comunicação, um p-artic é um elemento

Exemplo: um grafo bi-conexo: Aplicação: em redes de comunicação, um p-artic é um elemento da rede que não pode falhar: Pares de elementos podem ficar incomunicáveis Grafo bi-conexo: rede protegida contra a falha de, c no máximo, um elemento a b d e f g

7. 9. 2 – Determinação dos p-artic’s de um grafo Um método simples, porém

7. 9. 2 – Determinação dos p-artic’s de um grafo Um método simples, porém ineficiente: - Percorrer o grafo em profundidade tantas vezes quanto for o número de seus vértices - Em cada uma desses percursos, começar por um vértice diferente - A raiz da árvore de uma busca é um p-artic se tiver mais de um filho

Exemplo: busca em profundidade começando pelo vértice a do grafo a seguir O vértice

Exemplo: busca em profundidade começando pelo vértice a do grafo a seguir O vértice a é p-artic, pois tem dois filhos na árvore de busca Um grafo Busca em profundidade começando por a

 Em grafos não-orientados, não há arcos cruzantes Com a remoção da raiz a,

Em grafos não-orientados, não há arcos cruzantes Com a remoção da raiz a, suas duas sub-árvores ficam sem comunicação removendo

Um método mais eficiente: 1. Percorrer o grafo em profundidade, numerando os vértices na

Um método mais eficiente: 1. Percorrer o grafo em profundidade, numerando os vértices na ordem em que forem visitados (nbp) Conclui-se inicialmente que a raiz a é p-artic

2. Visitar os vértices dessa árvore em pós-ordem; para cada vértice v visitado, computar

2. Visitar os vértices dessa árvore em pós-ordem; para cada vértice v visitado, computar menor[v] Fórmula do menor[v]: menor[v] = min (nbp[v], nbp[w’s]) w’s são todos os vértices que se ligam com v ou com os descendentes próprios de v por arcos de volta descenden te de v

Desenvolvendo a fórmula anterior: menor[v] = min (nbp[v], nbp[y’s], menor[x’s]) y’s: todos os vértices

Desenvolvendo a fórmula anterior: menor[v] = min (nbp[v], nbp[y’s], menor[x’s]) y’s: todos os vértices que se ligam com v por arcos de volta x’s: todos os filhos de v y Arco de volta v A seguir, um estudo da utilidade do conceito de menor de um vértice Arco de árvore x

Seja a seguinte árvore de busca em profundidade (no de busca ao lado de

Seja a seguinte árvore de busca em profundidade (no de busca ao lado de cada vértice): 1 2 b 10 12 3 x 11 13 4 v 5 6 a Sem arcos de volta, o grafo é uma árvore livre 7 8 9 Com a exceção das folhas e de raízes com um só filho, todos os vértices são partic’s

Se algum descendente de v (pode ser o próprio v) se ligar a b

Se algum descendente de v (pode ser o próprio v) se ligar a b ou a por arco de volta: 1 Seja x removido 2 b 10 12 3 x 11 13 4 v 5 6 a v e seus descendentes não ficam sem comunicação com o resto do grafo 7 8 9 x, por causa de v e seus descendentes, não é p-

Se, de algum filho de v, não se consegue voltar a x, b ou

Se, de algum filho de v, não se consegue voltar a x, b ou a sem passar por v: 1 É o caso do nó 7 2 b 10 12 3 x 11 13 4 v 5 6 a O nó 7 e seus descendentes ficam sem comunicação com o resto do grafo 7 8 Seja v removido 9 v é p-artic

Menor[v]: ponto mais alto da árvore (nbp) que se chega de v, sem voltar

Menor[v]: ponto mais alto da árvore (nbp) que se chega de v, sem voltar por seus ancestrais 1 b 2 x 3 5 6 10 4 v w 7 8 11 a 12 13 Neste esquema, menor[v] = 1 De v se chega a b, x, a Pela fórmula dada: z menor[v] = = min (nbp[v], nbp[b], menor[w], menor[z]) = min (4, 2, 3, 1) = 1 9

Se menor [algum filho de v] ≥ nbp(v), v é p-artic 1 a 2

Se menor [algum filho de v] ≥ nbp(v), v é p-artic 1 a 2 b 10 12 3 x 11 13 Neste esquema, menor[w] = 3 menor[z] = 1 nbp[v] = 4 v não é p-artic v 4 5 6 w 7 8 z 9 Seja v removido w, z e seus descendentes se comunicam com o resto do grafo

Se menor [algum filho de v] ≥ nbp(v), v é p-artic 1 a 2

Se menor [algum filho de v] ≥ nbp(v), v é p-artic 1 a 2 b 10 12 3 x 11 13 Neste esquema, menor[w] = 3 menor[z] = 4 nbp[v] = 4 v é p-artic v 4 5 6 w 7 8 z 9 Seja v removido z e seus descendentes ficam sem comunicação com o resto do grafo

Conclusões sobre a detecção de pontos de articulação: O vértice raiz é p-artic se

Conclusões sobre a detecção de pontos de articulação: O vértice raiz é p-artic se e somente se tiver 2 ou mais filhos Um vértice v raiz é p-artic se e somente se x filho de v tal que menor [x] nbp [v]

Exemplo: no grafo ilustrativo menor [e] = min (nbp [e], nbp [b], nbp [a])

Exemplo: no grafo ilustrativo menor [e] = min (nbp [e], nbp [b], nbp [a]) = min (4, 2, 1) = 1 menor [d] = min (nbp [d], nbp [a], menor [e]) = min (3, 1, 1) = 1 menor [b] = min (nbp [b], nbp [e], menor [d]) = min (2, 4, 1) =1 menor [g] = min (nbp [g], nbp [c]) = min (7, 5) = 5 menor [f] = min (nbp [f], menor [g]) = min ( 6, 5 ) = 5 menor [c] = min (nbp [c], nbp [g], menor [f] ) = min (5, 7, 5) = 5 a : é a raiz e tem 2 filhos: é ponto de articulação