119

Algoritmos para Árvore Geradora de Custo Mínimo · Problema Considere uma rede de computadores cujos links têm um custo para se transmitir uma mensagem. Suponha que o custo de

Embed Size (px)

Citation preview

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