5COP096 Teoria da Computação Teoria da Computação

Transcrição

5COP096 Teoria da Computação Teoria da Computação
Sylvio Barbon Jr – [email protected]
1
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
5COP096
Teoria da Computação
Aula 12
Prof. Dr. Sylvio Barbon Junior
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Sumário
- Árvore Geradora Mínima
- Teorema pare reconhecer arestas seguras;
- Algoritmo de Prim;
- Algoritmo de Kruskal;
- Caminhos Mais Curtos
- Algoritmo de Dijkstra
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Árvore Geradora Mínima
- Exemplo tradicional: Rede de comunicação entre diversas cidades, sendo um
grafo não direcionado.
- É um arranjo de n-1 conexões, contando duas localidades cada.
- Desafio é encontrar a menor quantidade de cabos.
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Árvore Geradora Mínima
- Modelagem:
- G = (V, A): Grafo conectado, não direcionado.
- V = cidades.
- A = conjunto de possíveis conexões;
- p(u,v): peso da aresta (u,v) ∈ A e custo total de cabo para conexão.
- Solução:
Encontrar um subconjunto T que conecta todos os vértices de G, cujo peso
total é minimizado como:
p (T ) =
∑ p(u, v)
( u ,v )∈T
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Árvore Geradora Mínima
- Como G’ = (V,T) é acíclico e conecta todos os vértices, T forma uma árvore
geradora de G.
- O “problema” para obtenção da árvore T é chamado de árvore geradora
mínima (AGM)
Exemplo: Árvore geradora mínima T cujo peso total é 12. T não é única, pode-se
substituir a aresta (3, 5) pela aresta (2, 5) obtendo outra árvore geradora de custo
12.
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Árvore Geradora Mínima
- Uma estratégia GULOSA permite obter a AGM adicionando uma
aresta de cada vez, vamos estudar os algoritmos guloso de Prim (1957) e
Kruskal (1956).
- Um algoritmo “Genérico” Guloso para obter a árvore geradora mínima,
pode ser:
1
2
3
4
5
void GenericoAGM
S = 0;
while (S não constitui uma árvore geradora mínima)
(u, v) = seleciona (A) ;
if (aresta (u, v) é segura para S ) S = S + {(u, v)}
return S ;
- Um corte (V’, V − V’) de um grafo não direcionado G = (V,A) é uma
partição de V .
- Uma aresta (u, v) ∈ A cruza o corte (V’, V − V’) se um de seus vértices
pertence a V’ e o outro vértice pertence a V − V’.
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Árvore Geradora Mínima
- Um corte respeita um conjunto S de arestas se não existirem arestas
em S que o cruzem.
- Uma aresta cruzando o corte que tenha custo mínimo sobre todas as
arestas cruzando o corte é uma aresta leve.
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Teorema para Reconhecer Arestas Seguras
• Seja G = (V,A) um grafo conectado, não direcionado, com pesos p
sobre as arestas V .
• Seja S um subconjunto de V que está incluído em alguma AGM para G.
• Seja (V 0, V − V 0) um corte qualquer que respeita S.
• Seja (u, v) uma aresta leve cruzando (V’, V − V’).
• Satisfeitas essas condições, a aresta (u, v) é uma aresta segura para S.
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Algoritmo de Prim
• O algoritmo de Prim para obter uma AGM pode ser derivado do
algoritmo genérico.
• O subconjunto S forma uma única árvore, e a aresta segura adicionada
a S é sempre uma aresta de peso mínimo conectando a árvore a um
vértice que não esteja na árvore.
• A árvore começa por um vértice qualquer (no caso 0) e cresce até que
“gere” todos os vértices em V .
• A cada passo, uma aresta leve é adicionada à árvore S, conectando S a
um vértice de GS = (V, S).
• De acordo com o teorema anterior, quando o algoritmo termina, as
arestas em S formam uma árvore geradora mínima..
• O tempo total para executar o algoritmo de Prim é O (|A| log |V |)
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Algoritmo de Prim
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Algoritmo de Kruskal
• Pode ser derivado do algoritmo genérico.
• S é uma floresta e a aresta segura adicionada a S é sempre uma aresta
de menor peso que conecta dois componentes distintos.
• Considera as arestas ordenadas pelo peso.
• O tempo total para executar o algoritmo de Kruskal é O (|A| log |V |)
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Algoritmo de Kruskal
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Exercício
Encontre a árvore geradora mínima para o seguinte grafo:
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Referências
Ziviani, Nivio. Projeto de algoritmos: com implementações em Java e C.
Thomson Learning, 2007.
Leiserson, Charles E., Ronald L. Rivest, and Clifford Stein. Introduction to
algorithms. Ed. Thomas H. Cormen. The MIT press, 2001.
5COP096 – Teoria da Computação
Aula 12 – Algoritmos em Grafos
Solução do exercício

Documentos relacionados

Problema da Árvore Geradora Mínima

Problema da Árvore Geradora Mínima Prova Seja T uma árvore geradora mínima tal que A pertence T, e assuma que T não contém a aresta leve (u,v). A aresta (u,v) forma um ciclo com as arestas pertencentes ao caminho p de u para v em T....

Leia mais

EMENTA BIBLIOGRAFIA 5. BALAKRISHNAN, V. K. Schaum`s

EMENTA BIBLIOGRAFIA 5. BALAKRISHNAN, V.  K. Schaum`s O aluno que faltar a uma das duas provas terá direito a uma avaliação alternativa, denominada segunda chamada, versando sobre todos os tópicos abordados no curso, e cuja data também é agendada entr...

Leia mais