34
Ciência da Computação GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 08.pdf · Árvore Geradora Mínima Ciência da Computação - GRAFOS Algoritmo de Kruskal

Embed Size (px)

Citation preview

Ciência da Computação

GRAFOS

Aula 08 Árvore Geradora Mínima:

Algoritmos de Kruskal e Prim-Jarnik

Max Pereira

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Árvore Geradora (spanning tree) É um subconjunto de um grafo G que possui todos os vértices cobertos por um número mínimo possível de arestas. Dessa forma, uma árvore geradora nãotem ciclos e não pode ser desconexa. Por essa definição podemos chegar a conclusão de que todos os grafos conexos e não dirigidos têm pelo menos umaárvore geradora.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Árvore Geradora (spanning tree) Um grafo completo não dirigido pode ter no máximo nn-2 árvores geradoras, onde n é o número de vértices.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Árvore Geradora (spanning tree)

Propriedades:

Um grafo conexo G pode ter mais de uma árvore geradora; Todas as árvores possíveis do grafo G têm o mesmo número de arestas e

vértices; A árvore geradora não possui qualquer ciclo (loops); A remoção de uma aresta em uma árvore geradora fará com que o grafo

fique desconexo (a árvore geradora é minimamente conexa); A adição de uma aresta em uma árvore geradora criará um ciclo ou loop (a

árvore geradora é maximamente acíclica).

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Árvore Geradora (spanning tree)

Propriedades matemáticas:

Uma árvore geradora tem n-1 arestas, onde n é o número de vértices;

A partir de um grafo completo, removendo-se o máximo e – n + 1 arestas, podemos construir uma árvore geradora;

Um grafo completo pode ter mo máximo nn-2 árvores geradoras.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Árvore Geradora Mínima (minimum spanning tree) Em um grafo valorado, uma árvore geradora minima é uma árvore geradora quepossui o menor custo entre todas as árvores possíveis no mesmo grafo. O custo de uma árvore geradora é a soma dos pesos de todas as arestas naárvore.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Árvore Geradora Mínima (minimum spanning tree)

Como encontrar a árvore geradora de custo mínimo?

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de KruskalAuthor: Joseph B. KruskalJournal: Proc. Amer. Math. Soc. 7 (1956), 48-50

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal

Procedimento:

1. Ordenar todas as arestas em ordem crescente de valores (pesos)2. Selecionar a menor aresta. Verificar se ela forma um ciclo na árvore

geradora. Se não for formado um ciclo, incluir a aresta. Caso contrário, descartá-la.

3. Repetir o passo 2 até obter (V – 1) arestas na árvore geradora.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal

O grafo contém 9 vértices e 14 arestas. Dessa forma, a árvore geradora mínima terá (9 – 1) = 8 arestas.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal

Depois da ordenação:

Valor Org Dst

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (7, 6): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (8, 2): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (6, 5): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (0, 1): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (2, 5): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (8, 6): Ciclo! Descarta.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (2, 3): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (7, 8): Ciclo! Descarta.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (0, 7): Sem ciclo, inclui.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (1, 2): Ciclo! Descarta.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal Valor Org Dst

Selecione a aresta (3, 4): Sem ciclo, inclui.

Arestas = (V – 1)Para!

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Kruskal

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

On a certain problem of minimization

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Procedimento:

1. Criar um conjunto arvConj para manter os vértices já incluídos na árvoregeradora mínima.

2. Atribuir valores para todos os vértices no grafo. Inicializar todos os valorescomo “infinito”. Atribuir um valor zero para o primeiro vértice.

3. Enquanto o conjunto arvConj não estiver completo (todos os vértices)a) Selecionar um vértice u que não esteja no conjunto e tenha o menor

valor.b) Incluir o vértice u no conjunto arvConjc) Alterar o valor de todos os vértices adjacentes a u. Para cada vértice

adjacente v, se o valor da aresta u-v for menor do que o valor anterior de v, alterar o valor do vértice para o valor da aresta u-v.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

O conjunto arvConj inicialmente está vazio e os valores atribuídos aos vértices são {0, , , ,, ,, }

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Selecione o vértice com o menor valor e inclua no conjunto arvConj. Depois de incluir o vértice altere os valores dos vértices adjacentes 1 e 7. Os valores dos vertices são alterados para 4 e 8 respectivamente.

arvConj = {0}

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Escolha o vértice com o menor valor e que ainda não esteja no conjuntoarvConj. O vértice 1 será escolhido e adicionado ao conjunto. Altere os valoresdos vertices adjacentes ao vértice 1. O valor do vértice 2 torna-se 8.

arvConj = {0, 1}

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Aqui podemos escolher o vértice 7 ou o vértice 2. Vamos escolher o vértice 7. Altere os valores dos vértices adjacentes ao vértice 7. Os valores dos vértices 6 e 8 tornam-se 7 e 1 respectivamente.

arvConj = {0, 1, 7}

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

O vértice 6 será escolhido (menor valor e ainda não está no conjunto arvConj). Altera-se os valores dos adjacentes ao vértice 6. Os valores dos vertices 5 e 8 serão alterados.

arvConj = {0, 1, 7, 6}

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Continuamos repetindo os passos até que todos os vértices estejam incluídos no conjunto arvConj. Finalmente teremos o seguinte grafo.

Árvore Geradora Mínima

Ciência da Computação - GRAFOS

Algoritmo de Prim-Jarnik

Trabalho 3

Ciência da Computação - GRAFOS

Resolução do problema da árvore geradora mínima:

Entrada: Tipo de grafo: não-orientado Valorado - somente arestas Conjunto V Conjunto E

Saída: As arestas do subgrafo (árvore geradora mínima) e o custo.

Implementar os dois algoritmos: Kruskal e Prim-Jarnik