algoritmos para Árvore geradora de custo mínimo · problema considere uma rede de computadores...
TRANSCRIPT
Algoritmos para Árvore Geradora de Custo Mínimo
Profa. Sheila Morais de Almeida
DAINF-UTFPR-PG
junho - 2018
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 1 / 113
Este material é preparado usando como referências os textos dos seguinteslivros.
Udi MANBER. Introduction to Algorithms: a creative approach, 1989.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 2 / 113
Problema
Considere uma rede de computadores cujos links têm um custo para setransmitir uma mensagem.
Suponha que o custo de se enviar uma mensagem por um determinado linknão depende da direção.
Queremos transmitir uma mensagem de um computador arbitrário paratodo os computadores dessa rede.
O custo total da transmissão é a soma do custo de todos os links usadosna tarefa.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 3 / 113
Problema
Pergunta:
Quais links devem ser usados para trasmitir a mensagem a todos oscomputadores de forma que o custo total da transmissão seja mínimo?
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 4 / 113
Problema
Um governador decidiu contratar uma empresa para construir uma rede degasodutos entre as cidades do estado.
Ao solicitar um orçamento, a empresa lhe entregou um mapa, com ospossíveis locais para construção da rede e o preço de construção de cadatrecho.
O gobernador quer que todas as cidades seja abastecidas e quer gastar omínimo possível.
O custo total da obra é a soma dos custos dos trechos que serãoefetivamente construídos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 5 / 113
Problema
Pergunta:
Quais trechos de gasoduto devem ser construídos para que todas as cidadessejam abastecidas e o custo total da obra seja mínimo?
100
200
20
100
100
100
200
10 10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 6 / 113
Modelando como um Grafo
Os dois problemas podem ser modelados usando grafos:
Cada computador ou cidade é um vértice.
As conexões são arestas não orientadas com pesos para representar oscustos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 7 / 113
Modelando como um Grafo
Os dois problemas podem ser modelados usando grafos:
Cada computador ou cidade é um vértice.
As conexões são arestas não orientadas com pesos para representar oscustos.
a
lkj
i hg
fe
dc
b
100
100 10
10
50
10
1010
2020
10 10
10 2010 50
5010
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 8 / 113
Modelando como um Grafo
Os dois problemas podem ser modelados usando grafos:
Cada computador ou cidade é um vértice.
As conexões são arestas não orientadas com pesos para representar oscustos.
100
200
20
100
100
100
200
10 10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 9 / 113
Modelando como um Grafo
Os dois problemas podem ser modelados usando grafos:
Cada computador ou cidade é um vértice.
As conexões são arestas não orientadas com pesos para representar oscustos.
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 10 / 113
Modelando como um grafo
Observe que ciclos têm redudância que aumenta o custo total.
Por exemplo, existem dois caminhos entre a e b, entre c e f , entre e e g ,etc.
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Queremos o subgrafo que seja uma árvore cuja soma das arestas é mínima.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 11 / 113
Modelando como um grafo
De�nição
Seja G , um grafo ponderado (com peso nas arestas) e não orientado. Umaárvore geradora de custo mínimo é um subgrafo gerador de G que éuma árvore e cuja soma dos custos das arestas é a menor dentre todas asárvores geradoras de G .
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 12 / 113
Modelando como um grafo
Árvore geradora do grafo da rede de gasodutos:
100
200
20
100
100
200
a c e
b d f
g
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 13 / 113
Modelando como um grafo
Árvore geradora do grafo da rede de gasodutos:
200100
100
200
10 10
a c e
b d f
g
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 14 / 113
Modelando como um grafo
Árvore geradora do grafo da rede de gasodutos:
100 20
100
100
100
200
10
a c e
b d f
g
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 15 / 113
Modelando como um grafo
Árvore geradora do grafo da rede de gasodutos:
200
20
100200
10 10
a c e
b d f
g
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 16 / 113
Modelando como um grafo
Problema da Árvore Geradora de Custo Mínimo
Criar um algoritmo e�ciente que recebe como entrada um grafo ponderadonão orientado e apresenta uma árvore geradora desse grafo que tenha customínimo.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 17 / 113
Algoritmo de Kruskal
Se você fosse o governador e tivesse uma quantia limitada de dinheiro, masquisesse construir a maior quantidade possível de trechos do gasoduto, porquais você começaria?
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 18 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 19 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 19 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 19 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 20 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 21 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 22 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 23 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 24 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 25 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d}; {d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 26 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 27 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 28 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 29 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g}; {b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 30 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g};����{b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 31 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g};����{b, d}; {f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 32 / 113
Algoritmo de Kruskal
Estratégia de Kruskal: Vamos começar pelas mais baratas. (Método deprogramação guloso!)
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Ordenamos as arestas por custo:{a, b}; {e, f }; {c , e}; {a, c}; {c , d};����{d , f }; {e, g};����{b, d};����{f , g}
As arestas são incluídas na árvore geradora nesta ordem, desde que nãoformem ciclos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 33 / 113
Algoritmo de Kruskal
Por que essa árvore geradora tem custo mínimo?
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Suponha que não. Então uma das arestas da árvore deve ser substituídapor alguma que não está na árvore.Ao se incluir qualquer uma das arestas, ela forma um ciclo no grafo. Entãoalguma das arestas desse ciclo deve ser removida.Mas se essa foi a aresta que fechou o ciclo, então foi a última do ciclo quetentamos inserir.Então seu custo é maior ou igual que o das outras arestas do ciclo e atroca não diminui o custo total (permanece igual ou aumenta).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 34 / 113
Algoritmo de Kruskal
Por que essa árvore geradora tem custo mínimo?
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Suponha que não. Então uma das arestas da árvore deve ser substituídapor alguma que não está na árvore.
Ao se incluir qualquer uma das arestas, ela forma um ciclo no grafo. Entãoalguma das arestas desse ciclo deve ser removida.Mas se essa foi a aresta que fechou o ciclo, então foi a última do ciclo quetentamos inserir.Então seu custo é maior ou igual que o das outras arestas do ciclo e atroca não diminui o custo total (permanece igual ou aumenta).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 34 / 113
Algoritmo de Kruskal
Por que essa árvore geradora tem custo mínimo?
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Suponha que não. Então uma das arestas da árvore deve ser substituídapor alguma que não está na árvore.Ao se incluir qualquer uma das arestas, ela forma um ciclo no grafo. Entãoalguma das arestas desse ciclo deve ser removida.
Mas se essa foi a aresta que fechou o ciclo, então foi a última do ciclo quetentamos inserir.Então seu custo é maior ou igual que o das outras arestas do ciclo e atroca não diminui o custo total (permanece igual ou aumenta).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 34 / 113
Algoritmo de Kruskal
Por que essa árvore geradora tem custo mínimo?
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Suponha que não. Então uma das arestas da árvore deve ser substituídapor alguma que não está na árvore.Ao se incluir qualquer uma das arestas, ela forma um ciclo no grafo. Entãoalguma das arestas desse ciclo deve ser removida.Mas se essa foi a aresta que fechou o ciclo, então foi a última do ciclo quetentamos inserir.
Então seu custo é maior ou igual que o das outras arestas do ciclo e atroca não diminui o custo total (permanece igual ou aumenta).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 34 / 113
Algoritmo de Kruskal
Por que essa árvore geradora tem custo mínimo?
100
200
20
100
100
100
200
10 10
a c e
b d f
g
Suponha que não. Então uma das arestas da árvore deve ser substituídapor alguma que não está na árvore.Ao se incluir qualquer uma das arestas, ela forma um ciclo no grafo. Entãoalguma das arestas desse ciclo deve ser removida.Mas se essa foi a aresta que fechou o ciclo, então foi a última do ciclo quetentamos inserir.Então seu custo é maior ou igual que o das outras arestas do ciclo e atroca não diminui o custo total (permanece igual ou aumenta).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 34 / 113
Algoritmo de Kruskal
Como veri�car ciclos?
Ciclos se formam quando tentamos inserir uma aresta entre dois vértices damesma árvore.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 35 / 113
Algoritmo de Kruskal
Como veri�car ciclos?
Ciclos se formam quando tentamos inserir uma aresta entre dois vértices damesma árvore.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 36 / 113
Algoritmo de Kruskal
Como veri�car ciclos?
É su�ciente que:
• exista uma identi�cação das árvores;
• cada vértice saiba a qual árvore pertence.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 37 / 113
Algoritmo de Kruskal
Como veri�car ciclos?
Ciclos se formam quando tentamos inserir uma aresta entre dois vértices damesma árvore.
T1
T2
1 1
1
11
1
1
1
2
222
2
T1
T2
1
11
1
1
1
2
222
2
1
1
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 38 / 113
Algoritmo de Kruskal
Como veri�car ciclos?
Ciclos se formam quando tentamos inserir uma aresta entre dois vértices damesma árvore.
T1
T2
1 1
1
11
1
1
1
2
222
2
T1
T2
1
11
1
1
1
2
222
2
1
1
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 39 / 113
Algoritmo de Kruskal
Como veri�car ciclos?
Ciclos se formam quando tentamos inserir uma aresta entre dois vértices damesma árvore.
T1
T2
1 1
1
11
1
1
1
2
222
2 T1
1
11
1
1
1
1
111
1
1
1
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 40 / 113
Algoritmo de Kruskal
Kruskal(G)Ordene as arestas de G , em ordem crescente de custoc ← 1; T ← { }Para cada vértice v ∈ V (G ) faça:
comp(v)← c ;c ← c + 1;
Para cada aresta {u, v}, na ordem estabelecida faça:Se comp(u) 6= comp(v) então:
T ← T + {u, v};Para cada vértice w ∈ V (G ) faça:
Se comp(w) = comp(v), então:comp(w)← comp(u);
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 41 / 113
Kruskal(G)Ordene as arestas de G , em ordem crescente de custo O(m logm)c ← 1; T ← { } O(1)Para cada vértice v ∈ V (G ) faça: O(n)
comp(v)← c ; O(n)c ← c + 1; O(n)
Para cada aresta {u, v}, na ordem estabelecida faça: O(m)Se comp(u) 6= comp(v) então: O(m)
T ← T + {u, v}; O(n) (linha anterior verdadeira n − 1 vezes)Para cada vértice w ∈ V (G ) faça: O(n2)
Se comp(w) = comp(v), então: O(n2)comp(w)← comp(u); O(n2)
Complexidade do algoritmo: O(n2 +m logm).Como m < n2: logm ∈ O(log n).
Complexidade do algoritmo: O(n2 +m log n).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 42 / 113
Algoritmo de Kruskal
É possível melhorar a etapa de identi�cação de ciclos.
Para melhorar: usamos union-�nd!
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 43 / 113
Union-Find
Problema do Union-�nd
Dado um conjunto de conjuntos de elementos, pode-se realizar dois tiposde operações:
Union: unir dois conjuntos em um único conjunto.
Find: descobrir qual é o conjunto ao qual um determinado elementopertence.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 44 / 113
Union-Find
1conj: 1
4conj: 4 7
conj: 7
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6conj: 6
3conj: 32
conj: 2
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 45 / 113
Union-Find
Union(1, 2):
1, 2conj: 1
4conj: 4 7
conj: 7
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6conj: 6
3conj: 3
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 46 / 113
Union-Find
Union(6, 7):
1, 2conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6, 7conj: 6
3conj: 3
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 47 / 113
Union-Find
Union(1, 3):
1, 2, 3conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6, 7conj: 6
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 48 / 113
Union-Find
Union(1, 6):
1, 2, 3, 6, 7
conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 49 / 113
Union-Find
Find(8):
1, 2, 3, 6, 7
conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 50 / 113
Union-Find
Find(6):
1, 2, 3, 6, 7
conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 51 / 113
Union-Find
Para resolver computacionalmente: um vértice torna-se dono do grupo.
1conj: 1
4conj: 4 7
conj: 7
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6conj: 6
3conj: 32
conj: 2
dono163 9872 54 101
4 5 6 7 8 9 1032
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 52 / 113
Union-Find
Para resolver computacionalmente: ao fazer Union(u, v), o dono doconjunto de u passa a ser dono do conjunto de v .
Union(1, 2):
1,2conj: 1
4conj: 4 7
conj: 7
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6conj: 6
3conj: 3
dono163 9872 54 101
4 5 6 7 8 9 1031
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 53 / 113
Union-Find
Para resolver computacionalmente: ao fazer Union(u, v), o dono doconjunto de u passa a ser dono do conjunto de v .
Union(1, 3):
1,2,3conj: 1
4conj: 4 7
conj: 7
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6conj: 6
dono163 9872 54 101
4 5 6 7 8 9 1011
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 54 / 113
Union-Find
Para resolver computacionalmente: ao fazer Union(u, v), o dono doconjunto de u passa a ser dono do conjunto de v .
Union(6, 7):
1,2,3conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
6, 7conj: 6
dono163 9872 54 101
4 5 6 6 8 9 1011
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 55 / 113
Union-Find
Para resolver computacionalmente: ao fazer Union(u, v), o dono doconjunto de u passa a ser dono do conjunto de v .
Union(1, 6):
1,2,3,6,7
conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
dono163 9872 54 101
4 5 1 6 8 9 1011
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 56 / 113
Union-Find
Para resolver computacionalmente: ao fazer Find(u), percorre-se a lista dedonos a partir de u, até encontrar um vértice dono do próprio conjunto.
Find(7):
1,2,3,6,7
conj: 1
4conj: 4
10conj: 10
9conj: 9
5conj: 5
8conj: 8
dono163 9872 54 101
4 5 1 6 8 9 1011
Conjunto do 7: 1.Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 57 / 113
Union-Find
Complexidade do Find
Se, na operação de Union, sempre o dono do maior conjunto é quem setorna dono da união (empates resolvidos arbritrariamente), então ocaminho de qualquer elemento até o dono do conjuto tem tamanhoO(log n), onde n é a quantidade de elementos.
Portanto, o procedimento de Find percorre no máximo O(log n) elementos.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 58 / 113
Union-Find
Union(u, v , tam[ ], dono[ ])Se tam[u] < tam[v ], então
dono[u]← v ;tam[v ]← tam[v ] + tam[u];
Senãodono[v ]← u;tam[u]← tam[u] + tam[v ];
Complexidade do algoritmo: O(1).
Find(u, dono[ ])Enquanto dono[u] 6= u faça:
u ← dono[u];retorne u;
Complexidade do algoritmo: O(log n).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 59 / 113
Algoritmo de Kruskal com Union-Find
Kruskal(G)Ordene as arestas de G , em ordem crescente de custoT ← { }Para cada vértice v ∈ V (G ) faça:
dono[v ]← v ;tam[v ]← 1;
Para cada aresta {u, v}, na ordem estabelecida faça:pu ← Find(u, dono);pv ← Find(v , dono);Se pu 6= pv então:
T ← T + {u, v};Union(pu, pv , tam, dono);
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 60 / 113
Algoritmo de Kruskal com Union-Find
Kruskal(G)Ordene as arestas de G , em ordem crescente de custo O(m logm)T ← { } O(1)Para cada vértice v ∈ V (G ) faça: O(n)
dono[v ]← v ; O(n)tam[v ]← 1; O(n)
Para cada aresta {u, v}, na ordem estabelecida faça: O(m)pu ← Find(u, dono); O(m)pv ← Find(v , dono); O(m)Se pu 6= pv então: O(m)
T ← T + {u, v}; O(n)Union(u, v , tam, dono); O(n log n)
Complexidade do algoritmo: O(m logm) + O(n log n). Como m ≤ n2,temos: logm ∈ O(log n). Como m ≥ n − 1, log n ∈ O(logm).Complexidade do algoritmo: O(m log n).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 61 / 113
Algoritmo de Prim
Outra forma de evitar ciclos:
Imagine que os vértices estão separados em dois conjuntos:
• os que já fazer parte da árvore;
• e os que ainda não foram conectados.
A cada iteração, um novo vértice é conectado à árvore.
Quem será o escolhido? O que puder ser conectado com o menor custo!
Método de programação guloso!
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 62 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 63 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 64 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 65 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 66 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 67 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 68 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 69 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 70 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 71 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 72 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 73 / 113
Algoritmo de Prim
100
200
20
100
100
100
200
10 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 74 / 113
Algoritmo de Prim
100 20100
10010 10
a c e
b d f
g
T
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 75 / 113
Algoritmo de Prim
Computacionalmente:
1 usamos pesos nos vértices para indicar qual o custo para conectá-los.
2 o vértice inicial tem custo zero;
3 todos os outros começam com custo in�nito;
4 escolhemos o vértice com menor custo para conectar à árvore;
5 quando um vértice é conectado à árvore, atualizamos o custo dos seusvizinhos, caso diminuam;
6 retornamos ao passo 4 até todos os vértices se conectarem à árvore.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 76 / 113
Algoritmo de Prim
Início:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 77 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 78 / 113
Algoritmo de Prim
Atualização do custo dos vizinhos:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 79 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 80 / 113
Algoritmo de Prim
Atualização do custo dos vizinhos:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
200 (b)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 81 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
200 (b)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 82 / 113
Algoritmo de Prim
Atualização do custo dos vizinhos:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 83 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 84 / 113
Algoritmo de Prim
Atualização do custo dos vizinhos:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 85 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 86 / 113
Algoritmo de Prim
Atualização do custo dos vizinhos:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 87 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 88 / 113
Algoritmo de Prim
Atualização do custo dos vizinhos:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 89 / 113
Algoritmo de Prim
Inclusão do vértice de menor custo:
100
200
20
100
100
100
200
10 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 90 / 113
Algoritmo de Prim
Árvore Geradora de Custo Mínimo:
100 20100
10010 10
a c e
b d f
g
0
10 (a)
100 (a)
100 (c)
20 (c)
10 (e)
100 (e)
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 91 / 113
Algoritmo de Prim
Prim(G)T ← { } (conjunto de vértices conectados à árvore.)Para cada vértice v ∈ V (G ) faça:
custo[v ]←∞;pred [v ]← NULL;
Escolha um vértice de origem v0;custo[v0]← 0;Enquanto T 6= V (G ) faça:
v ← vértice de custo mínimo em V (G ) \ T ;T ← T ∪ {v}Para cada vizinho u do vértice v faça:
Se peso[v , u] < custo[u] então:custo[u]← peso[v , u];pred [u]← v ;
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 92 / 113
Prim(G)T ← { } O(1)Para cada vértice v ∈ V (G ) faça: O(n)
custo[v ]←∞; O(n)pred [v ]← NULL; O(n)
Escolha um vértice de origem v0; O(1)custo[v0]← 0; O(1)Enquanto T 6= V (G ) faça: O(n) vértices são inseridos em T uma vez
v ← vértice de custo mínimo em V (G ) \ T ; O(n2) percorre custo[ ]
T ← T ∪ {v} O(n) vértices são inseridos em T uma vez
Para cada vizinho u do vértice v faça: O(m) arestas vistas duas vezes
Se peso[v , u] < custo[u] então: O(m)custo[u]← peso[v , u]; O(m)pred [u]← v ; O(m)
Complexidade do Algoritmo: O(n2).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 93 / 113
Algoritmo de Prim
Pode-se reduzir a complexidade do Algoritmo de Prim:
usar estruturas mais e�cientes para encontrar o vértice com custo mínimo!
Filas de prioridade: heap.
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 94 / 113
Heap
De�nição
Um heap de mínimo é uma lista linear c[1], c[2], c[3] . . . c[n] tal quec[i ] ≥ c[
⌊i2
⌋], para todo valor i no intervalo [2, n].
1 876543220 40 62 85 70 74 81 89
20
40 62
85 70 74 81
89
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 95 / 113
Heap
De�nição
Um heap de mínimo é uma lista linear c[1], c[2], c[3] . . . c[n] tal quec[i ] ≥ c[
⌊i2
⌋], para todo valor i no intervalo [2, n].
1 876543220 40 62 85 70 74 81 89
20
40 62
85 70 74 81
89
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 96 / 113
Heap
De�nição
Um heap de mínimo é uma lista linear c[1], c[2], c[3] . . . c[n] tal quec[i ] ≥ c[
⌊i2
⌋], para todo valor i no intervalo [2, n].
1 876543220 40 62 85 70 74 81 89
20
40 62
85 70 74 81
89
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 97 / 113
Heap
De�nição
Um heap de mínimo é uma lista linear c[1], c[2], c[3] . . . c[n] tal quec[i ] ≥ c[
⌊i2
⌋], para todo valor i no intervalo [2, n].
1 876543220 40 62 85 70 74 81 89
20
40 62
85 70 74 81
89
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 98 / 113
Heap
Operações do heap:
SubirHeap(i)
j ←⌊i2
⌋Se j ≥ 1, então:
Se c[i ] < c[j ], então:tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;SubirHeap(j); 1 8765432
20 40 62 85 70 74 81 89
20
40 62
85 70 74 81
89
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 99 / 113
Heap
Operações do heap:
SubirHeap(i)
j ←⌊i2
⌋Se j ≥ 1, então:
Se c[i ] < c[j ], então:tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;SubirHeap(j); 1 8765432
20 40 62 85 70 74 81 10
20
40 62
85 70 74 81
10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 100 / 113
Heap
Operações do heap:
SubirHeap(i)
j ←⌊i2
⌋Se j ≥ 1, então:
Se c[i ] < c[j ], então:tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;SubirHeap(j); 1 8765432
20 40 62 8570 74 8110
20
40 62
85
70 74 8110
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 101 / 113
Heap
Operações do heap:
SubirHeap(i)
j ←⌊i2
⌋Se j ≥ 1, então:
Se c[i ] < c[j ], então:tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;SubirHeap(j); 1 8765432
20 10 62 8570 74 8140
20
40
62
85
70 74 81
10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 102 / 113
Heap
Operações do heap:
SubirHeap(i)
j ←⌊i2
⌋Se j ≥ 1, então:
Se c[i ] < c[j ], então:tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;SubirHeap(j); 1 8765432
2010 62 8570 74 8140
20
40
62
85
70 74 81
10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 103 / 113
Heap
Operações do heap:
SubirHeap(i)
j ←⌊i2
⌋Se j ≥ 1, então:
Se c[i ] < c[j ], então:tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;SubirHeap(j);
Complexidade: número de trocas naaltura de árvore binária completa:O(log n).
1 87654322010 62 8570 74 8140
20
40
62
85
70 74 81
10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 104 / 113
Heap
Operações do heap:
DescerHeap(i , n)j ← 2 ∗ i ;Se j ≤ n, então:
Se j < n, então:Se j + 1 ≤ n e c[j ] > c[j + 1],então:
j ← j + 1;Se c[i ] > c[j ], então:
tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;DescerHeap(j , n);
1 87654322010 62 8570 74 8140
20
40
62
85
70 74 81
10
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 105 / 113
Heap
Operações do heap:
DescerHeap(i , n)j ← 2 ∗ i ;Se j ≤ n, então:
Se j < n, então:Se j + 1 ≤ n e c[j ] > c[j + 1],então:
j ← j + 1;Se c[i ] > c[j ], então:
tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;DescerHeap(j , n);
1 87654322090 62 8570 74 8140
20
40
62
85
70 74 81
90
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 106 / 113
Heap
Operações do heap:
DescerHeap(i , n)j ← 2 ∗ i ;Se j ≤ n, então:
Se j < n, então:Se j + 1 ≤ n e c[j ] > c[j + 1],então:
j ← j + 1;Se c[i ] > c[j ], então:
tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;DescerHeap(j , n);
1 876543220 90 62 8570 74 8140
20
40
62
85
70 74 81
90
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 107 / 113
Heap
Operações do heap:
DescerHeap(i , n)j ← 2 ∗ i ;Se j ≤ n, então:
Se j < n, então:Se j + 1 ≤ n e c[j ] > c[j + 1],então:
j ← j + 1;Se c[i ] > c[j ], então:
tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;DescerHeap(j , n);
1 876543220 9062 8570 74 8140
20
40 62
85
70 74 8190
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 108 / 113
Heap
Operações do heap:
DescerHeap(i , n)j ← 2 ∗ i ;Se j ≤ n, então:
Se j < n, então:Se j + 1 ≤ n e c[j ] > c[j + 1],então:
j ← j + 1;Se c[i ] > c[j ], então:
tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;DescerHeap(j , n);
1 876543220 9062 85 70 74 8140
20
40 62
85 70 74 81
90
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 109 / 113
Heap
Operações do heap:
DescerHeap(i , n)j ← 2 ∗ i ;Se j ≤ n, então:
Se j < n, então:Se j + 1 ≤ n e c[j ] > c[j + 1],então:
j ← j + 1;Se c[i ] > c[j ], então:
tmp ← c[i ];c[i ]← c[j ];c[j ]← tmp;DescerHeap(j , n);
1 876543220 9062 85 70 74 8140
20
40 62
85 70 74 81
90
Complexidade: número de trocas naaltura de árvore binária completa:O(log n).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 110 / 113
Heap
Operações do heap:
• Inserir: insere em c[n + 1] e executa SubirHeap(n + 1).Complexidade: O(log n).
• Remover: c[1]← c[n] e executa DescerHeap(1, n − 1).Complexidade: O(log n).
• Construção do heap: para i de⌊n2
⌋até 1, executa DescerHeap(i , n).
Complexidade: O(n log n).1
1É possível garantir a construção do heap em O(n).Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 111 / 113
Algoritmo de Prim com Heap
Prim(G)Para cada vértice v ∈ V (G ) faça:
custo[v ]←∞;pred [v ]← NULL;
Escolha um vértice de origem v0;custo[v0]← 0;Construa um Heap H com o vetor custo[ ];Enquanto H 6= ∅ faça:
v ← RemoverHeap(H);Para cada vizinho u do vértice v faça:
Se u ∈ H e peso[v , u] < custo[u] então:custo[u]← peso[v , u];pred [u]← v ;SubirHeap(H, u);
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 112 / 113
Algoritmo de Prim com Heap
Prim(G)Para cada vértice v ∈ V (G ) faça: O(n)
custo[v ]←∞; O(n)pred [v ]← NULL; O(n)
Escolha um vértice de origem v0; O(1)custo[v0]← 0; O(1)Construa um Heap H com o vetor custo[ ]; O(n log n)Enquanto H 6= ∅ faça:
v ← RemoverHeap(H); O(log n)Para cada vizinho u do vértice v faça: O(m)
Se u ∈ H e peso[v , u] < custo[u] então: O(m)custo[u]← peso[v , u]; O(m)pred [u]← v ; O(m)SubirHeap(H, u); O(m log n)
Complexidade do algoritmo: O(m log n).
Sheila Almeida (DAINF-UTFPR-PG) Árvore Geradora de Custo Mínimo junho - 2018 113 / 113