Celso C. Ribeiro Caroline T. Rocha Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha
PARTE 5: Árvore Geradora de Peso Mínimo Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Dados: G = (V,E) grafo não-orientado, com |V|=n e |E|=m peso c(e), e E Problema Obter F E tal que: o grafo G’=(V,F) é acíclico e conexo (G’ é gerador de G) c(F) = eEc(e) é mínimo Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Exemplo: 4 A D A E B C F D A B C E F B 9 4 5 8 3 E F 2 7 2 D C 9 4 4 4 5 4 8 3 3 2 2 árvore geradora peso = 24 árvore geradora peso = 15 Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Algoritmo de Kruskal Princípio: a aresta de menor peso sempre pertence à árvore geradora de peso mínimo. Prova: Suponha que a aresta de peso mínimo não pertença à solução ótima. Inserindo-se a aresta de peso mínimo nesta solução ótima, obtém-se um ciclo. Pode-se obter uma nova árvore geradora removendo-se a aresta de maior peso. Esta nova árvore geradora teria peso menor do que a anterior, portanto aquela solução não poderia ser ótima. L+ e L-: não é ao contrário?? Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Algoritmo de Kruskal Criar uma lista L com as arestas ordenadas em ordem crescente de pesos. Criar |V| subárvores contendo cada uma um nó isolado. F contador 0 Enquanto contador < |V|-1 e L faça Seja (u,v) o próximo arco de L. L L – {(u,v)} Se u e v não estão na mesma subárvore então F F {(u,v)} Unir as subárvores que contêm u e v. contador contador + 1 fim-se fim-enquanto Algoritmos em Grafos
Árvore Geradora de Peso Mínimo 4 Exemplo: A B Lista L 9 e c(e) (C,F) 2 (E,F) (A,D) 3 (C,E) (A,B) 4 (A,E) (B,F) 5 (D,F) 7 (B,C) 8 (B,E) 9 (C,D) 4 5 3 E F 8 2 2 7 3 D C X 9 c(F) = 2 c(F) = 4 c(F) = 7 c(F) = 11 c(F) = 15 Subárvores { A, B, C, D, E, F } { A } { B } { C } { D } { E } { F } { A } { B } { C, F } { D } { E } { A, B, D } { C, E, F } { A } { B } { C, E, F } { D } { A, D } { B } { C, E, F } Algoritmos em Grafos
Árvore Geradora de Peso Mínimo 4 Exemplo: C B 3 Lista L 4 6 D e c(e) (D,E) 1 (D,L) 2 (F,J) (G,J) (C,D) 3 (E,F) (H,I) (A,B) 4 (B,C) … 7 A 8 2 1 M L E 5 4 4 I J 3 6 3 2 2 H G F 7 c(F) = 13 c(F) = 10 c(F) = 16 c(F) = 24 c(F) = 7 c(F) = 20 c(F) = 5 c(F) = 1 c(F) = 3 Subárvores { A } { B } { C } { D } { E } { F } { G } { H } { I } { J } { L } { M } { A, B, C, D, E, F, G, J, L } { H, I } { M } { A, B } { C, D, E, L, F, G, J } { H, I } { M } { A } { B } { C, D, E, L, F, G, J } { H, I } { M } { A } { B } { C, D, E, L, F, G, J } { H } { I } { M } { A } { B } { C } { D, E, L } { F, G, J } { H } { I } { M } { A } { B } { C } { D, E, L } { F } { G } { H } { I } { J } { M } { A } { B } { C, D, E, L } { F, G, J } { H } { I } { M } { A } { B } { C } { D, E } { F } { G } { H } { I } { J } { L } { M } { A } { B } { C } { D, E, L } { F, J } { G } { H } { I } { M } Algoritmos em Grafos
Árvore Geradora de Peso Mínimo 4 Exemplo: C B 3 Lista L 4 6 D e c(e) ... (A,I) 4 (J,L) (G,M) 5 (C,M) 6 (I,J) (A,M) 7 (G,H) (B,L) 8 7 A 8 2 1 M L E 5 4 4 X I J 3 6 3 2 2 H G F 7 c(F) = 28 c(F) = 24 c(F) = 33 Subárvores { A, B, C, D, E, F, G, H, I, J, L, M } { A, B, C, D, E, F, G, J, L } { H, I } { M } { A, B, C, D, E, F, G, H, I, J, L } { M } Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Algoritmo de Prim Começar com uma árvore formada apenas por um nó qualquer do grafo, ou pela aresta de peso mínimo. A cada iteração, adicionar a aresta de menor peso que conecta um nó já conectado a um nó não-conectado. L+ e L-: não é ao contrário?? Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Algoritmo de Prim Seja (u,v) a aresta de menor peso. F {(u,v)} Para i = 1,...,n faça Se c(i,u) < c(i,v) então prox(i) u Senão prox(i) v fim-para prox(u), prox(v) 0, contador 0 Enquanto contador < n-2 faça Seja j tal que prox(j)0 e c(j,prox(j)) é mínimo. F F {(j,prox(j))} prox(j) 0 Se prox(i) 0 e c(i,prox(i)) > c(i,j) então prox(i) j contador contador + 1 fim-enquanto Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Exemplo: 4 A B 9 4 5 8 3 E F 2 2 7 3 D C 9 c(F) = 7 c(F) = 2 c(F) = 4 c(F) = 15 c(F) = 11 Algoritmos em Grafos
Árvore Geradora de Peso Mínimo Exemplo: 4 C B 3 4 6 D 7 A 8 2 1 M L E 5 4 4 I J 3 6 3 2 2 H G F 7 c(F) = 21 c(F) = 17 c(F) = 25 c(F) = 28 c(F) = 33 c(F) = 13 c(F) = 1 c(F) = 3 c(F) = 11 c(F) = 6 c(F) = 9 Algoritmos em Grafos