31
Teoria dos Grafos Edson Prestes

Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Embed Size (px)

Citation preview

Page 1: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos Grafos

Edson Prestes

Page 2: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

O processo associado à enumeração de caminhos de um grafo/dígrafo é semelhante ao processo de contagem com a diferença de que usaremos uma matriz de adjacência modificada, chamada matriz latina.

Matriz de Adjacência

Matriz Latina

Note que a Matriz Latina contém todos os passeios de comprimento 1

Page 3: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Vimos que a quantidade de caminhos de comprimento 2 era obtida através de M2=M.M, onde M é a matriz de adjacência de G. Aqui calcularemos L2 através de L.L', onde L é a matriz latina e L' é uma matriz latina modificada construida da seguinte maneira. Matriz Latina L

Matriz L’

Remoção 1o. elemento de cada entrada

Page 4: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Cada elemento (i,j) de L2 é igual a

onde n=V(G) e a operação é uma operação binária não comutativa que obedece as seguintes regras:

L(i,j) L'(j,m)=pp'.

Se L(i,j) ou L'(j,m) forem iguais ao conjunto vazio,então L(i,j) L'(j,m)=

Se L(i,j)=p e L'(j,m)=p' são dois subcaminhos, então

Page 5: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Se quisermos enumerar todos os caminhos de comprimento 3 em um grafo G basta calcularmos

Generalizando, os caminhos de comprimento n são determinados por

Page 6: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Enumere os caminhos de comprimento 2 e 3 do dígrafo abaixo

Matriz de Latina L Matriz L’

Matriz Latina L2

Se o preenchimento de L' fosse igual ao de L, teriamos algumas distorções. Por exemplo, se L(i,j)=ab e L'(j,m)=bc, teriamos L(i,j) L’(j,m)=abbc, o que na verdade corresponde ao caminho abc.

Matriz Latina L3

Page 7: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Para determinar todos os passeios/caminhos que não passam por um vértice v, basta gerar as matrizes latinas L e L', sem considerar a linha e a coluna associada ao vértice v. Quais são os caminhos de comprimento 3 que não possuem o vértice d?

Matriz de Latina L Matriz L’

Page 8: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Matriz de Latina L Matriz de Latina L’

Matriz de Latina L2 Matriz de Latina L3

Page 9: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosGrafos– Enumeração de Passeios/Caminhos

Para determinar todos os passeios/caminhos que não passam por um determinado arco/aresta (x,y), basta gerar as matrizes latinas L e L‘ deixando vazia a entrada (x,y). Por exemplo, se quisermos calcular os caminhos de comprimento 3 que não passam pelo arco (b,c) devemos usar as seguintes matrizes

Matriz de Latina L Matriz L’

Matriz de Latina Original

Page 10: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

Uma folha é um vértice de grau 1.

Uma floresta é um grafo que não contém ciclos.

Uma árvore é uma floresta conexa.

Todo componente de uma floresta é uma árvore.

Uma árvore é um grafo conexo aciclico, ou seja, um grafo conexo sem ciclos.

Page 11: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

Teorema: Para um grafo G=(V,A) de n-vértices (n>0), as seguintes afirmações são

verdadeiras (e caracterizam uma árvore com n vértices).

a) G é conexo e não possui ciclos

b) G é conexo e tem n-1 arestas

c) G tem n-1 arestas e nenhum ciclo

d) Para dois vértices u,v tem exatamente um caminho entre u e v.

Trazer a prova na próxima aula

Page 12: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

Cada aresta de uma árvore é uma aresta de corte.

A adição de uma aresta em uma árvore forma exatamente um ciclo.

Cada grafo conexo que é árvore contém exatamente uma spanning tree.

Uma spanning tree de um Grafo é um subgrafo que é árvore e que contém todos os nós de G.

Uma spanning forest é obtida quando o grafo não é conexo. Ela consiste em uma floresta de spanning tree.

Spanning Tree de GGrafo G

Page 13: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

O diâmetro de uma árvore é calculado de forma similar ao de um grafo que não é árvore. Ele corresponde a maior distância entre qualquer par de vértices, ou seja,

A excentricidade de um vértice u é a maior distância entre u e qualquer vértice de G, ou seja,

O raio de um Grafo G é denotado por

Page 14: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

O centro de um grafo G é o subgrafo induzido pelos vértices de excentricidade mínima. O centro de uma árvore é um vértice ou uma aresta.

Encontre a excentricidade de cada vértice, o raio e o centro do grafo abaixo.

Raio(G) =

Page 15: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

Sabemos que com um ou dois vértices apenas uma árvore pode ser formada.

Entretanto com três vértices podemos formar três árvores.

Com quatro vértices temos quatro estrelas e doze caminhos (eliminando os automorfismos) totalizando 16 árvores.

Se tivermos cinco vértices temos 125 árvores.

Cayley demonstrou que para um conjunto de n vértices distintos existem

nn-2 árvores associadas.

Cada uma das árvores pode ser codificada por uma lista de comprimento n-2, chamada Código Prüfer.

Esta lista permite-nos determinar de forma unívoca a árvore em questão.

Page 16: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Código Prüfer

Este algoritmo recebe como entrada uma árvore T com um conjunto S de n vértices.

A cada passo, o algoritmo remove a folha bi com menor rótulo e armazena o seu vizinho, ai.

Isto é feito até restar apenas uma única aresta.

Ao final do processo, teremos uma (n-2)-upla com os nós não folhas de T.

A partir desta tupla e do conjunto S é possível recuperar a árvore T.

Calcule o código Prüfer da árvore abaixo

Page 17: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Código Prüfer

O código Prüfer da árvore acima é (7,4,4,1,7,1)

A cada passo, o algoritmo remove a folha bi com menor rótulo e armazena o seu vizinho, ai

Page 18: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

Inicialmente são criadas uma seqüência e um conjunto de vértices: a seqüência S que representa o código Prüfer e o conjunto V dos vértices que não aparecem no código Prüfer.

Em seguida contruimos uma floresta com todos os vértices da árvore em questão. A cada passo, pegamos o primeiro elemento, a1, de S e o menor elemento m de V e criamos a aresta (a1,m).

Removemos tanto a1 quanto m de seus locais de origem. Se após este processo a1 não aparecer mais em S, então o incluimos em V. O processo é repetido até que S seja o conjunto vazio. Quando S for o conjunto vazio unimos os dois vértices que sobraram em V.

Recupere a árvore associada ao código Prüfer (7,4,4,1,7,1)

A recuperação da árvore a partir do código prüfer é como segue.

Page 19: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores

Page 20: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Código Prüfer

Dado um conjunto de inteiros positivos d1,d2,... ,dn totalizando 2n-2 (2n-2, deve-se ao fato de que uma árvore com n vértices possui exatamente n-1 arestas.Logo, a soma dos graus de cada vértice é igual a 2(n-1)) então existem

árvores com um conjunto de n vértices tal que o grau do vértice i é di

Prova: Observe que cada vértice não folha x é registrado exatamente dx-1 vezes no código prüfer, pois ele tem dx vértices vizinhos e após a remoção de seus dx-1 vizinhos "folha", ele será folha de seu último vizinho. Logo ele aparecerá dx-1 vezes.

O código prüfer possui n-2 elementos e pode ter (n-2)! permutações, entretanto devido a repetição de alguns vértices, teremos várias permutações iguais. Para cada vértice x que aparece no código, teremos (dx-1)! permutações iguais. Logo a retirada destes elementos iguais é dada por

(n! 2)!!ni=1(di ! 1)!

(n! 2)!!ni=1(di ! 1)!

Page 21: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Código Prüfer

Considere o seguinte conjunto de vértices S={1,2,3,4,5,6,7} e os graus em ordem de cada elemento de S {3,1,2,1,3,1,1}.

Quantas árvores podemos gerar a partir deste conjunto ?

Considerando que temos como vértices não folha os vértices {1,3,5} teremos

Árvores. Alguns exemplos podem ser vistos abaixo

Page 22: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Spanning Tree

Teorema: O número de árvores enraizadas com vértices não distintos é definido pela seguinte função geradora

Onde Tr é o número de árvores enraizadas com r vértices

Teorema: O número de árvores não enraizadas com vértices não distintos é definido por

Trabalho : calcular a quantidade de árvores enraizadas e não enraizadas com vértices não distintos usando 2,3,4,5 e 6 vértices

Page 23: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Spanning Tree

Teorema: Dado um grafo G simples com um conjunto de vértices V={v1, v2 ,...,vn} faça ai,j ser o número de arestas entre os vértices vi e vj. Construa uma matriz Q quadrada de ordem n de forma que a entrada Q(i,j) seja igual a

-ai,j se e igual a d(vi) se i=j. Se Q* é a matriz obtida removendo a linha s e coluna t de Q, então o número de spanning trees de G é igual a

(-1)s+t | Q* |

Determine o número de spanning trees do grafo abaixo

Page 24: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Spanning Tree

Grau dos vérticesQuantidade de arestas

Removendo linha e coluna c

Page 25: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Spanning Tree

Liste as 8 spanning trees do grafo.

Page 26: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Algoritmo de Kruskal

O algoritmo de Kruskal permite determinar a spanning tree de custo mínimo. Este custo corresponde à soma dos pesos (distância, tempo, qualidade, ...) associados a cada aresta do grafo.

O algoritmo recebe como entrada um grafo G conexo com pesos e monta um grafo desconexo G’, o qual corresponde a uma floresta de árvores composta unicamente pelos vértices de G.

Em seguida, ele ordena as arestas de G em ordem crescente e seleciona a cada instante a de menor peso. A aresta selecionada é marcada, para não ser analisada mais tarde, e verificada se pode ser adicionada ao grafo G' de forma a não gerar ciclos.

O processo termina quando G' estiver conexo.

Page 27: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Algoritmo de Kruskal

Determine a spanning tree de custo mínimo no grafo abaixo usando o algoritmo de Kruskal

Page 28: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Algoritmo de Kruskal

Page 29: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Algoritmo de Kruskal

Page 30: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Algoritmo de Dijkstra

O algoritmo de Dijkstra é usado para determinar a menor rota entre duas posições em um grafo. Ele assume que o caminho entre dois vértices, u e v, é composto sempre dos menores caminhos entre dois vértices quaisquer componentes do caminho.

O algoritmo considera um grafo G (ou dígrafo) com arestas de pesos positivos e um vértice inicial u. O peso da aresta formada pelos vértices u e v é w(u,v). Se u e v não são adjacentes então w(u,v)=

Ele considera que existe um conjunto S de vértices tal que o menor caminho a partir de u até cada vértice de S é conhecido.

Page 31: Teoria dos Grafos - Instituto de Informática - UFRGSprestes/Slides/GrafosA9.pdf · na verdade corresponde ao caminho abc. Matriz Latina L3. Teoria dos Grafos Grafos– Enumeração

Teoria dos GrafosÁrvores – Algoritmo de Dijkstra

Inicialmente, S={u}, t(u)=0, t(z)=w(u,z) para z u.

A cada iteração seleciona-se um vértice e adiciona-o a S.

Em seguida, as arestas a partir de v, (v,z), são exploradas e para cada z S, a nova distância aproximada t(z) é atualizada com

min{t(z), t(v)+w(v,z)}.

O processo continua até S=V(G) ou até t(z)= para todo z S.