SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Projeto e Análise de Algoritmos
Algoritmos Gulosos
e Grafos
Universidade Federal do Amazonas
Departamento de Ciência da Computação
2
Algoritmos Gulosos
n  Utilizam o mesmo conceito de
subestrutura ótima usado na prog.
Dinâmica.
n  Fazem escolhas com base em dados
locais para encontrar boas soluções
n  Técnica pode ser usada para obter
resultados aproximados em alguns casos
3
Árvore Espalhada
n  Uma árvore espalhada de um grafo G é
um subgrafo de G que
n  é uma árvore
n  Contém todos os vértices de G
Árvore espalhada de G
4
Árvore espalhada mínima
n  Seja G = (V,E) um grafo
conexo e não dirigido
n  Seja uma função de custo W:
E → R que atribui um custo
a cada aresta de G
( , )
( ) ( , )
u v T
w T w u v
∈
= ∑
n  Árvore Espalhada: Uma árvore que conecta todos
os vértices
n  Árvores Espalhada Mínima: árvore espalhada que
minimiza:
5
Sub-estrutura ótima
n  AEM T
n  A remoção de algum arco (u,v) particiona T em
T1 e T2
n  Como
n  T1 é uma AEM de G1=(V1,E1)
n  T2 é uma AEM de G2=(V2,E2)
1 2( ) ( , ) ( ) ( )w T w u v w T w T= + +
T1
T2
6
Escolha Gulosa
n  Propriedade:
n  Escolhas localmente ótimas ou gulosas
(greedy) levam á uma solução global ótima
n  Teorema
n  Seja G=(V, E), e seja S ⊆ V
n  Seja (u,v) a aresta de menor custo em G que
conecta S a V – S
n  Então (u,v) ∈ a alguma AEM de G
7
Escolha Gulosa (2)
u v
x
y
S
V-S
8
Escolha Gulosa (3)
n  Prova
n  Suponha (u,v) ∉ T
n  Mesmo assim, u e v devem estar em T e deve haver
um caminho de u até v emT
n  Seja qualquer aresta (x, y) neste caminho que cruza
de S paraV – S
n  Como (u,v) tem o menor custo, então w(u,v) ≤ w(x,y)
n  Assim, a árvore que inclui (x,y) não pode ter o custo
menor que árvore que inclui (u,v) e portanto ela não
é mínima.
9
Algoritmo Genérico para AEM
AEM(G,w)
1 A←∅ // Conterá os arcos da AEM
2 enquanto A não formar uma AEM faça
3 Encontre um arco (u,v) seguro para A
4 A←A∪{(u,v)}
5 retorne A
Arco seguro – arco que garante que A:
n  forma uma árvore
n  inclui os arcos mínimos
10
Alg. Genérico para AEM (2)
AEM2(G, w)
1 A←∅ // Conterá as arestas da AEM
2 enquanto A não for uma árvore espalhada faça
3.1 Faça um corte(S, V-S) em G que respeita A
3.2 Seja (u,v) a aresta mínima entre S e V-S
4 A←A∪{(u,v)}
5 retorne A
11
Algoritmo de Prim
n  Algoritmo baseado em vértices
n  Constrói uma árvore T, com um vértice de cada
vez.
n  Utiliza um conjunto de vértices que corresponde
a porção de T que já foi computada
n  Rotula os vertices que estão fora deste
conjunto com
n  key[v] – arco de menor custo que conecta v a um
vértice no conjunto
n  key[v] = ∞, se não existe tal arco
12
Algoritmo de Prim (2)
Prim(G,w,r)
01 Q ← V[G] // Q – vertices que formarão T
02 para cada u ∈ Q
03 key[u] ← ∞	

04 key[r] ← 0
05 π[r] ← NIL
06 enquanto Q ≠ ∅ faça	

07 u ← ExtráiMin(Q)
08 para cada v ∈ Adj[u] do
09 se v ∈ Q e w(u,v) < key[v] então
10 π[v] ← u
11 key[v] ← w(u,v)
13
Prim(G,w,r)
01 Q ← V[G] // Q – vertices que formarão T
02 para cada u ∈ Q
03 key[u] ← ∞	

04 key[r] ← 0
05 π[r] ← NIL
06 enquanto Q ≠ ∅ faça	

07 u ← ExtráiMin(Q)
08 para cada v ∈ Adj[u] do
09 se v ∈ Q e w(u,v) < key[v] então
10 π[v] ← u
11 key[v] ← w(u,v)
Algoritmo de Prim (3)
Atualiza
key[v]
14
O(V) vezes
O(E) arestas
O(log V)
Algoritmo de Prim (4)
O(V)
O(log V)
O(1)
Prim(G,w,r)
01 Q ← V[G] // Q – vertices que formarão T
02 para cada u ∈ Q
03 key[u] ← ∞	

04 key[r] ← 0
05 π[r] ← NIL
06 enquanto Q ≠ ∅ faça	

07 u ← ExtráiMin(Q)
08 para cada v ∈ Adj[u] do
09 se v ∈ Q e w(u,v) < key[v] então
10 π[v] ← u
11 key[v] ← w(u,v)
15
Prim: exemplo
16
Prim: exemplo (2)
17
Prim: exemplo (3)
18
Filas de Prioridade
n  Uma fila de prioridades (FP) é uma ED que
mantém um conjunto S de elementos, cada um
associado a uma chave (key).
n  Uma FP deve suportar as seguintes operações:
n  ConstróiFP(S): Carrega a FP com os elementos de S
n  ExtráiMin(S): retorna e remove o elemento de S que
tem a menor chave
n  Atualiza(S,x,novachave): muda a chave do elemento
x
n  Um heap binário pode ser usado
n  ConstróiFP – O(n)
n  ExtraíMin e Atualiza – O(lg n)
19
Prim: Tempo de Execução
n  |V |.T (ExtráiMin) + O (E ).T (Atualiza)
n  O (V lgV + E lgV) = O (E lgV )
Fila T(ExtráiMin) T(Atualiza) Total
array O (V ) O (1) O(V 2)
Heap binário O (lg V) O(lg V) O(E lgV )
Heap de Fibonacci O(lg V) O(1) O(V lgV +E )
20
Algoritmo de Kruskal
n  Algoritmo baseado em arcos
n  Adiciona um arco de cada vez na ordem
crescente dos custos
n  Mantém uma floresta A.
n  Um arco é incluído se ele conecta vértices
de árvores distintas de A.
21
Algoritmo de Kruskal (2)
Kruskal(G,w) /* G=(V,E) */
01 A ← ∅
02 para cada vértice v ∈ V[G] do
03 Constrói-Conjunto({v})	

04 Ordenar as arestas de acordo com o custo w
05 para cada arco (u,v) nesta ordem faça
06 se Conjunto_de(u) ≠ Conjunto_de(v) então
07 A ← A ∪ {(u,v)}
08 União(Conjunto_de(u),Conjunto_de(v))
09 retorne A
22
Exemplo – Kruskal
23
Exemplo – Kruskal (2)
24
Exemplo – Kruskal (3)
25
Exemplo – Kruskal (4)
26
Implementação de Conjuntos
n  Para implementar Kruskall é necessário
utilizar uma lista de dados para manter
conjuntos disjuntos de vértices
n  Operações
n  Constrói_Conjunto(x): S ← {x}
n  União(Si,Sj): S ← S – {Si,Sj} ∪ {Si ∪ Sj}
n  Conjunto_de(x): retorna Si, tal que x ∈ Si
27
Conjuntos disjuntos como listas
n  Cada conjunto – lista de elementos identificados pelo
primeiro elemento.
n  Todos os elementos na lista apontam para o primeiro
elemento
n  União – adiciona a lista menor à lista maior
n  Conjunto-de: O(1), União(u,v): O(min{|C(u)|, C(v)})
1 2 3 A B C
∅	

4
∅	

1 2 3 A B C
∅	

4
28
Kruskal: Tempo de Execução
n  Inicialização: O(V)
n  Θ(E lg E) ~ Θ(E lg V)
n  O(E) chamadas para Conjunto_De
n  Custo de uniões
n  Seja t(v) o número de vezes em que um vértice v é
movido para um novo conjunto maior
n  Cada vez que é um vértice é movido, o novo
conjunto tem seu tamanho pelo menos dobrado: t(v)
≤ log V
n  Tempo total de união
n  Tempo total: O(E lg V)
( ) log
v V
t v V V
∈
≤∑
29
Caminhos Mínimos
30
Caminho Mínimo
n  Seja um digrafo (grafo dirigido) G = (V,E) com
uma função de custo W: E → R
n  O custo do caminho p = v1 → v2 → … → vk é
n  Caminho mínimo: caminho de menor custo
1
1
1
( ) ( , )
k
i i
i
w p w v v
−
+
=
= ∑
31
Caminhos Mínimos
n  Problemas de caminho mínimo
n  Fonte Única (Destino Único). Encontrar o
caminho mínimo de um dado vértice (fonte) para
todos os outros vértices.
n  Par Único. Dados dois vértices, achar o menor
caminho entre eles. A solução para o problema de
fonte única serve para este problema.
n  Todos os Pares. Encontrar o caminho mínimo entre
todos os pares de vértices do grafo. Aplica-se
programação dinâmica.
32
Sub-estrutura ótima
n  Teorema: os sub-caminhos de um
caminho mínimo são caminhos mínimos
n  Prova (cut and paste)
n  Se algum sub-caminho não fosse mínimo, ele
poderia ser substituído por um menor que
levaria ao caminho mínimo total.
33
Inequação de triângulos
n  Definição
n  δ(u,v) ≡ custo cam. min. entre u-v
n  Teorema
n  δ(u,v) ≤ δ(u,x) + δ(x,v) para qq x
n  Prova
n  o cam. min. entre u-v não pode ser maior que
nenhum outro caminho entre u-v, em particular o
caminho que concatena os caminhos mínimos entre
u-x e x-v
34
Pesos negativos e ciclos
n  Em geral, caminhos mínimos não podem ter
ciclos, pois se tivessem os custo poderia ser
reduzido removendo o ciclo.
n  Qualquer caminho mínimo em um grafo não
pode ter mais que n – 1 arestas, onde n é o nr.
de vértices
n  Arestas com pesos negativos podem ser
consideradas no caminho mínimo, no entanto,
neste caso, ciclos poderiam levar a caminhos de
custo arbitrariamente menores
35
Relaxamento
n  Para cada vértice no grafo, é mantido um valor
d[v], uma estimativa do peso total do camin.
Este valor é inicializado como ∞
n  Relaxar um arco (u,v) consiste em testar se é
possível melhorar o caminho corrente para v
passando por u
5	

u v
vu
2
2
9	

5	

 7	

Relax(u,v)
5	

u v
vu
2
2
6	

5	

 6	

Relax(u,v)
Relax (u,v,w)
if d[v]>d[u]+w(u,v)then
d[v] ← d[u]+w(u,v)
π[v] ← u
36
Algoritmo de Dijkstra
n  Arestas com pesos não negativos
n  Algoritmo guloso similar à busca em largura
n  Usa uma fila de prioridade Q usando d [v] como
chave
n  Idéia básica
n  Mantêm um conjunto S de vértices já processados
n  A cada passo, seleciona o vértice u mais próximo,
inclui o vértice u, adiciona-o a S e relaxa todos os
arcos que saem de u.
37
Dijkstra(G,w,s)
01 para cada v ∈ V
02 d[v] ← ∞
03 d[s]← 0	

04 S ← ∅
05 Q ← V
06 enquanto Q ≠ ∅ faça 	

07 u ← ExtráiMin(Q)
08 S ← S ∪ {u}
09 para cada v ∈ Adj[u] faça
10 se d[v] > d[u]+w(u,v) então
11 d[v] ← d[u]+w(u,v)
Dijkstra Q : Fila de Prioridade que contém
os vértices e tem d[v] como chave
Q = {(v1,d[v1]), (v2,d[v2]),..., (vV,d[vV])}
Retira o u de menor d[u] de Q
Conjunto de vértices já processados
Relaxamento
38
Dijkstra: Exemplo
∞	

 ∞	

∞	

 ∞	

0	

s
u v
yx
10
5
1
2 3
9
4 6
7
2
10	

 ∞	

5	

 ∞	

0	

s
u v
yx
10
5
1
2 3
9
4 6
7
2
u v
8	

 14	

5	

 7	

0	

s
yx
10
5
1
2 3
9
4 6
7
2
8	

 13	

5	

 7	

0	

s
u v
yx
10
5
1
2 3
9
4 6
7
2
39
Dijkstra: Exemplo
8	

 9	

5	

 7	

0	

u v
yx
10
5
1
2 3
9
4 6
7
2
8	

 9	

5	

 7	

0	

u v
yx
10
5
1
2 3
9
4 6
7
2
40
Dijkstra: Corretude
n  Provar que sempre que u é adicionado a S
temos d [u] = δ(s,u), ou seja, d é mínimo, e
que isto se mantêm daí em diante
n  Prova
n  Temos que: ∀v, d [v] ≥ δ(s,v)
n  Seja u o primeiro vértice escolhido tal que existe um
caminho mais curto até u ou seja d[u] > δ(s,u)
n  Mostraremos que isso leva a uma contradição
41
Dijkstra: Corretude (2)
n  Seja y o primeiro vértice em V – S que pertence
ao caminho mínimo verdadeiro de s até u.
n  Então d [y] = δ(s,y), pois:
n  Para o predecessor x de y, onde x ∈S , d [x] é
mínimo, já que u é o primeiro vértice incorreto
n  Além disso, quando x é inserido em S, a aresta (x,y)
foi relaxada, assinalando a d[y] o valor correto.
42
Dijkstra: Corretude (3)
Primeiro vértice
escolhido tal que
d[u] não é mínimo
Vértice que está no
caminho mínimo
“real” até u
Vértice
corretamente
escolhido
43
Dijkstra: Corretude (4)
n  Assim:
n  d[u] > δ(s,u) * Hipótese inicial
n  > δ(s,y)+δ(y,u) * Sub-estrutura ótima
n  > d [y]+δ(y,u) * Corretude de d [y]
n  d[u] > d [y] * Pesos não negativos
n  Mas se d [u] > d [y] o algoritmo teria escolhido
y ao invés de u da fila Q ⇒ contradição
n  Portanto d[u] = δ(s,u) no momento da inserção
de u em S.
44
Dijkstra: Tempo de Execução
O(V)
O(V)
O(E) arestas
O(V) vezes
O(log V)
O(log V)
Dijkstra(G,w,s)
01 para cada v ∈ V
02 d[v] ← ∞
03 d[s]← 0	

04 S ← ∅
05 Q ← V
06 enquanto Q ≠ ∅ faça 	

07 u ← ExtráiMin(Q)
08 S ← S ∪ {u}
09 para cada v ∈ Adj[u] faça
10 se d[v] > d[u]+w(u,v) então
11 d[v] ← d[u]+w(u,v)
45
Dijkstra: Tempo de Execução
n  Extract-Min: tempo |V |
n  Decrementos de chaves: tempo |E |
n  Time = |V | TExtract-Min + |E | Tdecrementa-chave
n  Depende da implementação
Q T(Extract-Min) T(Decrease-Key)
array Ο(V) Ο(1) Ο(V 2)
binary heap Ο(lg V) Ο(lg V) Ο(E lg V)
Fibonacci
heap
Ο(lg V) Ο(1) Ο(V lgV + E)
46
Algoritmo de Bellman-Ford
n  Dijkstra não funciona com arestas
negativas
n  Não se pode assumir que o custo dos
caminhos só podem aumentar.
n  O Algortimo de Bellman-Ford detecta
ciclos negativos ou retorna os caminhos
mínimos.
47
Bellman-Ford
Bellman-Ford(G,w,s)
01 para cada v ∈ V[G]
02 d[v] ← ∞	

03 d[s] ← 0
04 π[r] ← NIL
05 para i ← 1 até |V[G]|-1 faça	

06 para cada aresta (u,v) ∈ E[G] faça
07 Relax (u,v,w)
08 para cada vértice (u,v) ∈ E[G] faça
09 se d[v] > d[u] + w(u,v) então retorne falso
10 retorne verdadeiro
48
Bellman-Ford: Exemplo
5
∞	

 ∞	

∞	

 ∞	

0	

s
zy
6
7
8
-3
7
2
9
-2
xt
-4
6	

 ∞	

7	

 ∞	

0	

s
zy
6
7
8
-3
7
2
9
-2
xt
-4
6	

 4	

7	

 2	

0	

s
zy
6
7
8
-3
7
2
9
-2
xt
-4
2	

 4	

7	

 2	

0	

s
zy
6
7
8
-3
7
2
9
-2
xt
-4
5
5 5
49
Bellman-Ford: Exemplo
2	

 4	

7	

 -2	

0	

s
zy
6
7
8
-3
7
2
9
-2
xt
-4
5
50
Bellman-Ford: Tempo
Bellman-Ford(G,w,s)
01 para cada v ∈ V[G]
02 d[v] ← ∞	

03 d[s] ← 0
04 π[r] ← NIL
05 para i ← 1 até |V[G]|-1 faça	

06 para cada aresta (u,v) ∈ E[G] faça
07 Relax (u,v,w)
08 para cada vértice (u,v) ∈ E[G] faça
09 se d[v] > d[u] + w(u,v) então retorne falso
10 retorne verdadeiro
(|V|-1)|E| + |E| = Θ(VE)
51
Bellman-Ford: Corretude
n  Provar que se o menor caminho entre s e
u tem i arestas, então depois do i-ésimo
passo do algoritmo teremos o menor
caminho, ou seja, d[u]=δ(s,u)
n  Seja δi(s,u) o custo do caminho de s até u
que é o mínimo entre todos os caminhos
que contém no máximo i arestas
52
Bellman-Ford: Corretude (2)
n  Provar por indução que d[u]= δi(s,u)
depois da i-ésima iteração
n  Base da indução. Inicio do algoritmo
n  Hipótese da indução: d[u] = δi-1(s,u)
n  Passo indutivo
n  Caso 1: δi(s,u) = δi-1(s,u) => d[u]= δi(s,u)
n  Caso 2: δi(s,u) = δi-1(s,z) + w(z,u)
n  Na iteração cada arco é relaxado, inclusive (z,u), então
d[u] = δi(s,u)
53
Belman-Ford: Corretude (3)
n  Se |V|=n, temos que depois de n-1 iterações:
d[u] = δn-1(s,u), para cada vértice u.
n  Se ainda existe alguma aresta a relaxar no grafo
então ainda existe um vértice u tal que δn(s,u) <
δn-1(s,u).
n  Mas só existem n vértices. Portanto deve haver
um ciclo, ele deve ser negativo.
n  Caso contrário, d[u]= δn-1(s,u) = δ(s,u), para
todo u, uma vez que qualquer caminho mínimo
terá nó máximo n-1 arestas.

Mais conteúdo relacionado

Mais procurados

Complexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallComplexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallLucas Vinícius
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5Jose Augusto Cintra
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Marcos Castro
 
Representar a solução na recta graduada
Representar a solução na recta graduadaRepresentar a solução na recta graduada
Representar a solução na recta graduadaJeremias Manhica
 
Aula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema BinárioAula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema BinárioSuzana Viana Mota
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesMauricio Volkweis Astiazara
 
Arquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadores
Arquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadoresArquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadores
Arquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadoresCleber Fonseca
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e bináriasSérgio Souza Costa
 
Sentenças abertas, implicações e equivalências lógicas
Sentenças abertas, implicações e equivalências lógicasSentenças abertas, implicações e equivalências lógicas
Sentenças abertas, implicações e equivalências lógicasSérgio de Castro
 
Aula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicaçãoAula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicaçãoCarlos Veiga
 

Mais procurados (20)

Complexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallComplexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd Warshall
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Comandos CMD
Comandos CMDComandos CMD
Comandos CMD
 
Representar a solução na recta graduada
Representar a solução na recta graduadaRepresentar a solução na recta graduada
Representar a solução na recta graduada
 
Aula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema BinárioAula 10 - Adição no Sistema Binário
Aula 10 - Adição no Sistema Binário
 
Kruskal
KruskalKruskal
Kruskal
 
Aula 07 - lista linear
Aula 07 - lista linearAula 07 - lista linear
Aula 07 - lista linear
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
Arquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadores
Arquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadoresArquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadores
Arquiteturas Paralelas e Distribuídas - Aula 2 - Arquiteturas de computadores
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Aula Grafos
Aula GrafosAula Grafos
Aula Grafos
 
Sentenças abertas, implicações e equivalências lógicas
Sentenças abertas, implicações e equivalências lógicasSentenças abertas, implicações e equivalências lógicas
Sentenças abertas, implicações e equivalências lógicas
 
Aula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicaçãoAula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicação
 

Destaque

Análise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosAnálise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosDelacyr Ferreira
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Ricardo Terra
 

Destaque (6)

Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
Análise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosAnálise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-Completos
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
06 Requisitos
06 Requisitos06 Requisitos
06 Requisitos
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)
 

Semelhante a Aulas 11-guloso Algoritmos

Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Murilo Adriano Vasconcelos
 
09 problemas de grafos np-completos
09 problemas de grafos np-completos09 problemas de grafos np-completos
09 problemas de grafos np-completosYuri Passos
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraMarcos Castro
 
Algebra Linear cap 02
Algebra Linear cap 02Algebra Linear cap 02
Algebra Linear cap 02Andrei Bastos
 
Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018Arthur Lima
 
Classes de complexidades de problemas
Classes de complexidades de problemasClasses de complexidades de problemas
Classes de complexidades de problemasDavid Achahui Perez
 
Exercícios resolvidos de máximo e mínimo de função
Exercícios resolvidos de máximo e mínimo de funçãoExercícios resolvidos de máximo e mínimo de função
Exercícios resolvidos de máximo e mínimo de funçãoDiego Oliveira
 
GEOMETRIA ANALÍTICA cap 07
GEOMETRIA ANALÍTICA cap  07GEOMETRIA ANALÍTICA cap  07
GEOMETRIA ANALÍTICA cap 07Andrei Bastos
 
Gacap07 130507191031-phpapp02
Gacap07 130507191031-phpapp02Gacap07 130507191031-phpapp02
Gacap07 130507191031-phpapp02Carlos Andrade
 
Professor helanderson sousa
Professor helanderson sousaProfessor helanderson sousa
Professor helanderson sousaDayanne Sousa
 
Introdução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosIntrodução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosssusera0fc94
 
Apreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaApreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaWilson Freitas
 
As equações do segundo grau são abordadas na história da matemática desde a é...
As equações do segundo grau são abordadas na história da matemática desde a é...As equações do segundo grau são abordadas na história da matemática desde a é...
As equações do segundo grau são abordadas na história da matemática desde a é...leosilveira
 

Semelhante a Aulas 11-guloso Algoritmos (20)

Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
 
09 problemas de grafos np-completos
09 problemas de grafos np-completos09 problemas de grafos np-completos
09 problemas de grafos np-completos
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de Dijkstra
 
Algebra Linear cap 02
Algebra Linear cap 02Algebra Linear cap 02
Algebra Linear cap 02
 
Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018
 
Classes de complexidades de problemas
Classes de complexidades de problemasClasses de complexidades de problemas
Classes de complexidades de problemas
 
Exercícios resolvidos de máximo e mínimo de função
Exercícios resolvidos de máximo e mínimo de funçãoExercícios resolvidos de máximo e mínimo de função
Exercícios resolvidos de máximo e mínimo de função
 
Lecture01.pptx
Lecture01.pptxLecture01.pptx
Lecture01.pptx
 
Grafos.ppt
Grafos.pptGrafos.ppt
Grafos.ppt
 
áLgebra linear
áLgebra linearáLgebra linear
áLgebra linear
 
Funcoesvetorias
FuncoesvetoriasFuncoesvetorias
Funcoesvetorias
 
GEOMETRIA ANALÍTICA cap 07
GEOMETRIA ANALÍTICA cap  07GEOMETRIA ANALÍTICA cap  07
GEOMETRIA ANALÍTICA cap 07
 
Gacap07 130507191031-phpapp02
Gacap07 130507191031-phpapp02Gacap07 130507191031-phpapp02
Gacap07 130507191031-phpapp02
 
Professor helanderson sousa
Professor helanderson sousaProfessor helanderson sousa
Professor helanderson sousa
 
Introdução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosIntrodução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitos
 
Grafos_1.pptx
Grafos_1.pptxGrafos_1.pptx
Grafos_1.pptx
 
Apreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaApreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função Característica
 
As equações do segundo grau são abordadas na história da matemática desde a é...
As equações do segundo grau são abordadas na história da matemática desde a é...As equações do segundo grau são abordadas na história da matemática desde a é...
As equações do segundo grau são abordadas na história da matemática desde a é...
 
Integral de linha
Integral de linhaIntegral de linha
Integral de linha
 
Exercicios trigonometria
Exercicios trigonometriaExercicios trigonometria
Exercicios trigonometria
 

Último

GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Cabiamar
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptxMarlene Cunhada
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
Slides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exerciciosSlides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exerciciosGentil Eronides
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...azulassessoria9
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...SileideDaSilvaNascim
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)Centro Jacques Delors
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 

Último (20)

GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Novena de Pentecostes com textos de São João Eudes
Novena de Pentecostes com textos de São João EudesNovena de Pentecostes com textos de São João Eudes
Novena de Pentecostes com textos de São João Eudes
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Slides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exerciciosSlides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exercicios
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 

Aulas 11-guloso Algoritmos

  • 1. Projeto e Análise de Algoritmos Algoritmos Gulosos e Grafos Universidade Federal do Amazonas Departamento de Ciência da Computação
  • 2. 2 Algoritmos Gulosos n  Utilizam o mesmo conceito de subestrutura ótima usado na prog. Dinâmica. n  Fazem escolhas com base em dados locais para encontrar boas soluções n  Técnica pode ser usada para obter resultados aproximados em alguns casos
  • 3. 3 Árvore Espalhada n  Uma árvore espalhada de um grafo G é um subgrafo de G que n  é uma árvore n  Contém todos os vértices de G Árvore espalhada de G
  • 4. 4 Árvore espalhada mínima n  Seja G = (V,E) um grafo conexo e não dirigido n  Seja uma função de custo W: E → R que atribui um custo a cada aresta de G ( , ) ( ) ( , ) u v T w T w u v ∈ = ∑ n  Árvore Espalhada: Uma árvore que conecta todos os vértices n  Árvores Espalhada Mínima: árvore espalhada que minimiza:
  • 5. 5 Sub-estrutura ótima n  AEM T n  A remoção de algum arco (u,v) particiona T em T1 e T2 n  Como n  T1 é uma AEM de G1=(V1,E1) n  T2 é uma AEM de G2=(V2,E2) 1 2( ) ( , ) ( ) ( )w T w u v w T w T= + + T1 T2
  • 6. 6 Escolha Gulosa n  Propriedade: n  Escolhas localmente ótimas ou gulosas (greedy) levam á uma solução global ótima n  Teorema n  Seja G=(V, E), e seja S ⊆ V n  Seja (u,v) a aresta de menor custo em G que conecta S a V – S n  Então (u,v) ∈ a alguma AEM de G
  • 8. 8 Escolha Gulosa (3) n  Prova n  Suponha (u,v) ∉ T n  Mesmo assim, u e v devem estar em T e deve haver um caminho de u até v emT n  Seja qualquer aresta (x, y) neste caminho que cruza de S paraV – S n  Como (u,v) tem o menor custo, então w(u,v) ≤ w(x,y) n  Assim, a árvore que inclui (x,y) não pode ter o custo menor que árvore que inclui (u,v) e portanto ela não é mínima.
  • 9. 9 Algoritmo Genérico para AEM AEM(G,w) 1 A←∅ // Conterá os arcos da AEM 2 enquanto A não formar uma AEM faça 3 Encontre um arco (u,v) seguro para A 4 A←A∪{(u,v)} 5 retorne A Arco seguro – arco que garante que A: n  forma uma árvore n  inclui os arcos mínimos
  • 10. 10 Alg. Genérico para AEM (2) AEM2(G, w) 1 A←∅ // Conterá as arestas da AEM 2 enquanto A não for uma árvore espalhada faça 3.1 Faça um corte(S, V-S) em G que respeita A 3.2 Seja (u,v) a aresta mínima entre S e V-S 4 A←A∪{(u,v)} 5 retorne A
  • 11. 11 Algoritmo de Prim n  Algoritmo baseado em vértices n  Constrói uma árvore T, com um vértice de cada vez. n  Utiliza um conjunto de vértices que corresponde a porção de T que já foi computada n  Rotula os vertices que estão fora deste conjunto com n  key[v] – arco de menor custo que conecta v a um vértice no conjunto n  key[v] = ∞, se não existe tal arco
  • 12. 12 Algoritmo de Prim (2) Prim(G,w,r) 01 Q ← V[G] // Q – vertices que formarão T 02 para cada u ∈ Q 03 key[u] ← ∞ 04 key[r] ← 0 05 π[r] ← NIL 06 enquanto Q ≠ ∅ faça 07 u ← ExtráiMin(Q) 08 para cada v ∈ Adj[u] do 09 se v ∈ Q e w(u,v) < key[v] então 10 π[v] ← u 11 key[v] ← w(u,v)
  • 13. 13 Prim(G,w,r) 01 Q ← V[G] // Q – vertices que formarão T 02 para cada u ∈ Q 03 key[u] ← ∞ 04 key[r] ← 0 05 π[r] ← NIL 06 enquanto Q ≠ ∅ faça 07 u ← ExtráiMin(Q) 08 para cada v ∈ Adj[u] do 09 se v ∈ Q e w(u,v) < key[v] então 10 π[v] ← u 11 key[v] ← w(u,v) Algoritmo de Prim (3) Atualiza key[v]
  • 14. 14 O(V) vezes O(E) arestas O(log V) Algoritmo de Prim (4) O(V) O(log V) O(1) Prim(G,w,r) 01 Q ← V[G] // Q – vertices que formarão T 02 para cada u ∈ Q 03 key[u] ← ∞ 04 key[r] ← 0 05 π[r] ← NIL 06 enquanto Q ≠ ∅ faça 07 u ← ExtráiMin(Q) 08 para cada v ∈ Adj[u] do 09 se v ∈ Q e w(u,v) < key[v] então 10 π[v] ← u 11 key[v] ← w(u,v)
  • 18. 18 Filas de Prioridade n  Uma fila de prioridades (FP) é uma ED que mantém um conjunto S de elementos, cada um associado a uma chave (key). n  Uma FP deve suportar as seguintes operações: n  ConstróiFP(S): Carrega a FP com os elementos de S n  ExtráiMin(S): retorna e remove o elemento de S que tem a menor chave n  Atualiza(S,x,novachave): muda a chave do elemento x n  Um heap binário pode ser usado n  ConstróiFP – O(n) n  ExtraíMin e Atualiza – O(lg n)
  • 19. 19 Prim: Tempo de Execução n  |V |.T (ExtráiMin) + O (E ).T (Atualiza) n  O (V lgV + E lgV) = O (E lgV ) Fila T(ExtráiMin) T(Atualiza) Total array O (V ) O (1) O(V 2) Heap binário O (lg V) O(lg V) O(E lgV ) Heap de Fibonacci O(lg V) O(1) O(V lgV +E )
  • 20. 20 Algoritmo de Kruskal n  Algoritmo baseado em arcos n  Adiciona um arco de cada vez na ordem crescente dos custos n  Mantém uma floresta A. n  Um arco é incluído se ele conecta vértices de árvores distintas de A.
  • 21. 21 Algoritmo de Kruskal (2) Kruskal(G,w) /* G=(V,E) */ 01 A ← ∅ 02 para cada vértice v ∈ V[G] do 03 Constrói-Conjunto({v}) 04 Ordenar as arestas de acordo com o custo w 05 para cada arco (u,v) nesta ordem faça 06 se Conjunto_de(u) ≠ Conjunto_de(v) então 07 A ← A ∪ {(u,v)} 08 União(Conjunto_de(u),Conjunto_de(v)) 09 retorne A
  • 26. 26 Implementação de Conjuntos n  Para implementar Kruskall é necessário utilizar uma lista de dados para manter conjuntos disjuntos de vértices n  Operações n  Constrói_Conjunto(x): S ← {x} n  União(Si,Sj): S ← S – {Si,Sj} ∪ {Si ∪ Sj} n  Conjunto_de(x): retorna Si, tal que x ∈ Si
  • 27. 27 Conjuntos disjuntos como listas n  Cada conjunto – lista de elementos identificados pelo primeiro elemento. n  Todos os elementos na lista apontam para o primeiro elemento n  União – adiciona a lista menor à lista maior n  Conjunto-de: O(1), União(u,v): O(min{|C(u)|, C(v)}) 1 2 3 A B C ∅ 4 ∅ 1 2 3 A B C ∅ 4
  • 28. 28 Kruskal: Tempo de Execução n  Inicialização: O(V) n  Θ(E lg E) ~ Θ(E lg V) n  O(E) chamadas para Conjunto_De n  Custo de uniões n  Seja t(v) o número de vezes em que um vértice v é movido para um novo conjunto maior n  Cada vez que é um vértice é movido, o novo conjunto tem seu tamanho pelo menos dobrado: t(v) ≤ log V n  Tempo total de união n  Tempo total: O(E lg V) ( ) log v V t v V V ∈ ≤∑
  • 30. 30 Caminho Mínimo n  Seja um digrafo (grafo dirigido) G = (V,E) com uma função de custo W: E → R n  O custo do caminho p = v1 → v2 → … → vk é n  Caminho mínimo: caminho de menor custo 1 1 1 ( ) ( , ) k i i i w p w v v − + = = ∑
  • 31. 31 Caminhos Mínimos n  Problemas de caminho mínimo n  Fonte Única (Destino Único). Encontrar o caminho mínimo de um dado vértice (fonte) para todos os outros vértices. n  Par Único. Dados dois vértices, achar o menor caminho entre eles. A solução para o problema de fonte única serve para este problema. n  Todos os Pares. Encontrar o caminho mínimo entre todos os pares de vértices do grafo. Aplica-se programação dinâmica.
  • 32. 32 Sub-estrutura ótima n  Teorema: os sub-caminhos de um caminho mínimo são caminhos mínimos n  Prova (cut and paste) n  Se algum sub-caminho não fosse mínimo, ele poderia ser substituído por um menor que levaria ao caminho mínimo total.
  • 33. 33 Inequação de triângulos n  Definição n  δ(u,v) ≡ custo cam. min. entre u-v n  Teorema n  δ(u,v) ≤ δ(u,x) + δ(x,v) para qq x n  Prova n  o cam. min. entre u-v não pode ser maior que nenhum outro caminho entre u-v, em particular o caminho que concatena os caminhos mínimos entre u-x e x-v
  • 34. 34 Pesos negativos e ciclos n  Em geral, caminhos mínimos não podem ter ciclos, pois se tivessem os custo poderia ser reduzido removendo o ciclo. n  Qualquer caminho mínimo em um grafo não pode ter mais que n – 1 arestas, onde n é o nr. de vértices n  Arestas com pesos negativos podem ser consideradas no caminho mínimo, no entanto, neste caso, ciclos poderiam levar a caminhos de custo arbitrariamente menores
  • 35. 35 Relaxamento n  Para cada vértice no grafo, é mantido um valor d[v], uma estimativa do peso total do camin. Este valor é inicializado como ∞ n  Relaxar um arco (u,v) consiste em testar se é possível melhorar o caminho corrente para v passando por u 5 u v vu 2 2 9 5 7 Relax(u,v) 5 u v vu 2 2 6 5 6 Relax(u,v) Relax (u,v,w) if d[v]>d[u]+w(u,v)then d[v] ← d[u]+w(u,v) π[v] ← u
  • 36. 36 Algoritmo de Dijkstra n  Arestas com pesos não negativos n  Algoritmo guloso similar à busca em largura n  Usa uma fila de prioridade Q usando d [v] como chave n  Idéia básica n  Mantêm um conjunto S de vértices já processados n  A cada passo, seleciona o vértice u mais próximo, inclui o vértice u, adiciona-o a S e relaxa todos os arcos que saem de u.
  • 37. 37 Dijkstra(G,w,s) 01 para cada v ∈ V 02 d[v] ← ∞ 03 d[s]← 0 04 S ← ∅ 05 Q ← V 06 enquanto Q ≠ ∅ faça 07 u ← ExtráiMin(Q) 08 S ← S ∪ {u} 09 para cada v ∈ Adj[u] faça 10 se d[v] > d[u]+w(u,v) então 11 d[v] ← d[u]+w(u,v) Dijkstra Q : Fila de Prioridade que contém os vértices e tem d[v] como chave Q = {(v1,d[v1]), (v2,d[v2]),..., (vV,d[vV])} Retira o u de menor d[u] de Q Conjunto de vértices já processados Relaxamento
  • 38. 38 Dijkstra: Exemplo ∞ ∞ ∞ ∞ 0 s u v yx 10 5 1 2 3 9 4 6 7 2 10 ∞ 5 ∞ 0 s u v yx 10 5 1 2 3 9 4 6 7 2 u v 8 14 5 7 0 s yx 10 5 1 2 3 9 4 6 7 2 8 13 5 7 0 s u v yx 10 5 1 2 3 9 4 6 7 2
  • 39. 39 Dijkstra: Exemplo 8 9 5 7 0 u v yx 10 5 1 2 3 9 4 6 7 2 8 9 5 7 0 u v yx 10 5 1 2 3 9 4 6 7 2
  • 40. 40 Dijkstra: Corretude n  Provar que sempre que u é adicionado a S temos d [u] = δ(s,u), ou seja, d é mínimo, e que isto se mantêm daí em diante n  Prova n  Temos que: ∀v, d [v] ≥ δ(s,v) n  Seja u o primeiro vértice escolhido tal que existe um caminho mais curto até u ou seja d[u] > δ(s,u) n  Mostraremos que isso leva a uma contradição
  • 41. 41 Dijkstra: Corretude (2) n  Seja y o primeiro vértice em V – S que pertence ao caminho mínimo verdadeiro de s até u. n  Então d [y] = δ(s,y), pois: n  Para o predecessor x de y, onde x ∈S , d [x] é mínimo, já que u é o primeiro vértice incorreto n  Além disso, quando x é inserido em S, a aresta (x,y) foi relaxada, assinalando a d[y] o valor correto.
  • 42. 42 Dijkstra: Corretude (3) Primeiro vértice escolhido tal que d[u] não é mínimo Vértice que está no caminho mínimo “real” até u Vértice corretamente escolhido
  • 43. 43 Dijkstra: Corretude (4) n  Assim: n  d[u] > δ(s,u) * Hipótese inicial n  > δ(s,y)+δ(y,u) * Sub-estrutura ótima n  > d [y]+δ(y,u) * Corretude de d [y] n  d[u] > d [y] * Pesos não negativos n  Mas se d [u] > d [y] o algoritmo teria escolhido y ao invés de u da fila Q ⇒ contradição n  Portanto d[u] = δ(s,u) no momento da inserção de u em S.
  • 44. 44 Dijkstra: Tempo de Execução O(V) O(V) O(E) arestas O(V) vezes O(log V) O(log V) Dijkstra(G,w,s) 01 para cada v ∈ V 02 d[v] ← ∞ 03 d[s]← 0 04 S ← ∅ 05 Q ← V 06 enquanto Q ≠ ∅ faça 07 u ← ExtráiMin(Q) 08 S ← S ∪ {u} 09 para cada v ∈ Adj[u] faça 10 se d[v] > d[u]+w(u,v) então 11 d[v] ← d[u]+w(u,v)
  • 45. 45 Dijkstra: Tempo de Execução n  Extract-Min: tempo |V | n  Decrementos de chaves: tempo |E | n  Time = |V | TExtract-Min + |E | Tdecrementa-chave n  Depende da implementação Q T(Extract-Min) T(Decrease-Key) array Ο(V) Ο(1) Ο(V 2) binary heap Ο(lg V) Ο(lg V) Ο(E lg V) Fibonacci heap Ο(lg V) Ο(1) Ο(V lgV + E)
  • 46. 46 Algoritmo de Bellman-Ford n  Dijkstra não funciona com arestas negativas n  Não se pode assumir que o custo dos caminhos só podem aumentar. n  O Algortimo de Bellman-Ford detecta ciclos negativos ou retorna os caminhos mínimos.
  • 47. 47 Bellman-Ford Bellman-Ford(G,w,s) 01 para cada v ∈ V[G] 02 d[v] ← ∞ 03 d[s] ← 0 04 π[r] ← NIL 05 para i ← 1 até |V[G]|-1 faça 06 para cada aresta (u,v) ∈ E[G] faça 07 Relax (u,v,w) 08 para cada vértice (u,v) ∈ E[G] faça 09 se d[v] > d[u] + w(u,v) então retorne falso 10 retorne verdadeiro
  • 48. 48 Bellman-Ford: Exemplo 5 ∞ ∞ ∞ ∞ 0 s zy 6 7 8 -3 7 2 9 -2 xt -4 6 ∞ 7 ∞ 0 s zy 6 7 8 -3 7 2 9 -2 xt -4 6 4 7 2 0 s zy 6 7 8 -3 7 2 9 -2 xt -4 2 4 7 2 0 s zy 6 7 8 -3 7 2 9 -2 xt -4 5 5 5
  • 49. 49 Bellman-Ford: Exemplo 2 4 7 -2 0 s zy 6 7 8 -3 7 2 9 -2 xt -4 5
  • 50. 50 Bellman-Ford: Tempo Bellman-Ford(G,w,s) 01 para cada v ∈ V[G] 02 d[v] ← ∞ 03 d[s] ← 0 04 π[r] ← NIL 05 para i ← 1 até |V[G]|-1 faça 06 para cada aresta (u,v) ∈ E[G] faça 07 Relax (u,v,w) 08 para cada vértice (u,v) ∈ E[G] faça 09 se d[v] > d[u] + w(u,v) então retorne falso 10 retorne verdadeiro (|V|-1)|E| + |E| = Θ(VE)
  • 51. 51 Bellman-Ford: Corretude n  Provar que se o menor caminho entre s e u tem i arestas, então depois do i-ésimo passo do algoritmo teremos o menor caminho, ou seja, d[u]=δ(s,u) n  Seja δi(s,u) o custo do caminho de s até u que é o mínimo entre todos os caminhos que contém no máximo i arestas
  • 52. 52 Bellman-Ford: Corretude (2) n  Provar por indução que d[u]= δi(s,u) depois da i-ésima iteração n  Base da indução. Inicio do algoritmo n  Hipótese da indução: d[u] = δi-1(s,u) n  Passo indutivo n  Caso 1: δi(s,u) = δi-1(s,u) => d[u]= δi(s,u) n  Caso 2: δi(s,u) = δi-1(s,z) + w(z,u) n  Na iteração cada arco é relaxado, inclusive (z,u), então d[u] = δi(s,u)
  • 53. 53 Belman-Ford: Corretude (3) n  Se |V|=n, temos que depois de n-1 iterações: d[u] = δn-1(s,u), para cada vértice u. n  Se ainda existe alguma aresta a relaxar no grafo então ainda existe um vértice u tal que δn(s,u) < δn-1(s,u). n  Mas só existem n vértices. Portanto deve haver um ciclo, ele deve ser negativo. n  Caso contrário, d[u]= δn-1(s,u) = δ(s,u), para todo u, uma vez que qualquer caminho mínimo terá nó máximo n-1 arestas.