O slideshow foi denunciado.
Algoritmos Aproximativos
Fernando Simeone
Mestrado em Ciência da Computação
Universidade Federal de Lavras
!
Projeto e Aná...
Tópicos
• Introdução
• Conceitos
• O problema de cobertura de vértices
• O problema do caixeiro viajante
• O problema da s...
Introdução
Introdução
Introdução
• Problemas com alto custo computacional;
Introdução
• Problemas com alto custo computacional;
• Problemas da classe NP-difícil;
Introdução
• Problemas com alto custo computacional;
• Problemas da classe NP-difícil;
• Problemas de grande relevância pr...
Introdução
Introdução
• Requisitos dos problemas da classe NP-difícil:
Introdução
• Requisitos dos problemas da classe NP-difícil:
1. Encontrar a solução ótima
Introdução
• Requisitos dos problemas da classe NP-difícil:
1. Encontrar a solução ótima
2. Em tempo polinomial
Introdução
• Requisitos dos problemas da classe NP-difícil:
1. Encontrar a solução ótima
2. Em tempo polinomial
3. Para to...
Conceitos
Problemas de Otimização
Problemas de
MAXIMIZAÇÃO
Problemas de
MINIMIZAÇÃOX
Fator de aproximação
ρ(n)C C*
Algoritmo
ρ(n)-aproximativo
Problemas de Minimização
Problemas de Minimização
0 < C* ≤ C
Problemas de Minimização
0 < C* ≤ C
ρ(n) ≥ C
C*
Problemas de Maximização
Problemas de Maximização
0 < C ≤ C*
Problemas de Maximização
0 < C ≤ C*
ρ(n) ≥ C*
C
Problemas de Otimização
ρ(n) ≥ max C* , C
C C*
Esquema Aproximativo
𝟄 > 0
algoritmo (1 + 𝟄)-aproximativo
O problema de
cobertura de vértices
O problema de cobertura de
vértices
b dc
e f
a
g h
O problema de cobertura de
vértices
b dc
e f
a
g h
Algoritmo Aproximativo
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolh...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
Algoritmo Aproximativo
b dc
e f
a
g h
Solução Encontrada
b dc
e f
a
g h
C = {b, d, e, f}
Solução Ótima
C = {a, b, c, d, e,...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
COBERTURA-VÉRTICES-APROXIMADO (G)	

1	

 C = ∅	

2	

 E' = G.E	

3	

 enquanto E' ≠ ∅	

4	

 escolha uma aresta (u, v) ∈ E...
O problema do
caixeiro viajante
O problema do caixeiro
viajante
b
d
c
e f
a g
12
O problema do caixeiro
viajante
b
d
c
e f
a g
Inequalidade Triangular
b
c
a
dist(a, b) + dist(b, c) ≥ dist(a, c)
Algoritmo Aproximativo
𝜣(V2)
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
Algoritmo Aproximativo
b
d
c
e f
a g
b
d
c
e f
a g
b
d
c
e f
a g
b
d
c
e f
a g
1
5
3
4
6
7
2
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
Algoritmo Aproximativo
b
d
c
e f
a g
W
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
Algoritmo Aproximativo
b
d
c
e f
a g
W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
H = {a, b, d, e, f, g, c, a}
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
CAIXEIRO-VIAJANTE-APROXIMADO (G, c)	

1	

 seleciona vértice r ∈ G.E para ser a raiz	

2	

 T = PRIM(G, c, r)	

3	

 H = v...
O problema da soma
de subconjuntos
O problema da soma de
subconjuntos
S = {1, 3, 5, 15, 18, 26}	

!
t = 41
Algoritmo Exato
S = {1, 3, 5, 15, 18, 26} t = 41
Algoritmo Exato
S = {1, 3, 5, 15, 18, 26}
L0
= {0}
t = 41
Algoritmo Exato
S = {1, 3, 5, 15, 18, 26}
L0
= {0}
L1
= L0
∪ L0
+ 1 = {0} ∪ {1} = {0,1}
t = 41
Algoritmo Exato
S = {1, 3, 5, 15, 18, 26}
L0
= {0}
L1
= L0
∪ L0
+ 1 = {0} ∪ {1} = {0,1}
L2
= L1
∪ L1
+ 3 = {0,1} ∪ {3, 4} ...
Algoritmo Exato
S = {1, 3, 5, 15, 18, 26}
L0
= {0}
L1
= L0
∪ L0
+ 1 = {0} ∪ {1} = {0,1}
L2
= L1
∪ L1
+ 3 = {0,1} ∪ {3, 4} ...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Exato
SOMA-SUBCONJUNTOS (S, t)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 Li = MERGE-LIST(Li-...
Algoritmo Aproximativo
Estratégia: desconsiderar alguns elementos de Li
Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
Algoritmo Aproximativo
Estratégia: desconsiderar alguns elementos de Li
Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
Algoritmo Aproximativo
Estratégia: desconsiderar alguns elementos de Li
Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
TR...
Algoritmo Aproximativo
Estratégia: desconsiderar alguns elementos de Li
Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
TR...
Algoritmo Aproximativo
Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
y ≤ z ≤ y
1 + δ
Algoritmo Aproximativo
Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
y ≤ z ≤ y
1 + δ
z y
Se y ≤ z(1 + δ), remover y
Esquema Aproximativo
TRIM (L, δ)	

1	

 m = |L|	

2	

 L'= ⟨yi⟩	

3	

 z = yi	

4	

 para i = 2 até m	

5	

 se yi > z(1 +...
Esquema Aproximativo
SOMA-SUBCONJUNTOS-APROXIMADO (S, t, ϵ)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 ...
Esquema Aproximativo
SOMA-SUBCONJUNTOS-APROXIMADO (S, t, ϵ)	

1	

 n = |S|	

2	

 L0 = ⟨0⟩	

3	

 para i = 1 até n	

4	

 ...
Considerações Finais
Considerações Finais
Considerações Finais
• Algoritmos aproximativos são aplicáveis para problemas
de otimização da classe NP-difícil;
Considerações Finais
• Algoritmos aproximativos são aplicáveis para problemas
de otimização da classe NP-difícil;
• Conhec...
Considerações Finais
• Algoritmos aproximativos são aplicáveis para problemas
de otimização da classe NP-difícil;
• Conhec...
Considerações Finais
• Algoritmos aproximativos são aplicáveis para problemas
de otimização da classe NP-difícil;
• Conhec...
Referências
Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C.
(2009). Introduction to Algorithms, Third Editio...
Obrigado
Dúvidas?
Próximos SlideShares
Carregando em…5
×

Algoritmos aproximativos

515 visualizações

Publicada em

Apresentação sobre Algoritmos Aproximativos, apresentada no 2º semestre de 2014, como um dos requisitos da disciplina de Projeto e Análise de Algoritmos, no Mestrado em Ciência da Computação, pela Universidade Federal de Lavras (UFLA). Disciplina ministrada pelo professor Dr. Sanderson L. Gonzaga de Oliveira.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Algoritmos aproximativos

  1. 1. Algoritmos Aproximativos Fernando Simeone Mestrado em Ciência da Computação Universidade Federal de Lavras ! Projeto e Análise de Algoritmos (2014/2)
  2. 2. Tópicos • Introdução • Conceitos • O problema de cobertura de vértices • O problema do caixeiro viajante • O problema da soma de subconjuntos • Considerações finais • Referências
  3. 3. Introdução
  4. 4. Introdução
  5. 5. Introdução • Problemas com alto custo computacional;
  6. 6. Introdução • Problemas com alto custo computacional; • Problemas da classe NP-difícil;
  7. 7. Introdução • Problemas com alto custo computacional; • Problemas da classe NP-difícil; • Problemas de grande relevância prática.
  8. 8. Introdução
  9. 9. Introdução • Requisitos dos problemas da classe NP-difícil:
  10. 10. Introdução • Requisitos dos problemas da classe NP-difícil: 1. Encontrar a solução ótima
  11. 11. Introdução • Requisitos dos problemas da classe NP-difícil: 1. Encontrar a solução ótima 2. Em tempo polinomial
  12. 12. Introdução • Requisitos dos problemas da classe NP-difícil: 1. Encontrar a solução ótima 2. Em tempo polinomial 3. Para todas as instâncias
  13. 13. Conceitos
  14. 14. Problemas de Otimização Problemas de MAXIMIZAÇÃO Problemas de MINIMIZAÇÃOX
  15. 15. Fator de aproximação ρ(n)C C* Algoritmo ρ(n)-aproximativo
  16. 16. Problemas de Minimização
  17. 17. Problemas de Minimização 0 < C* ≤ C
  18. 18. Problemas de Minimização 0 < C* ≤ C ρ(n) ≥ C C*
  19. 19. Problemas de Maximização
  20. 20. Problemas de Maximização 0 < C ≤ C*
  21. 21. Problemas de Maximização 0 < C ≤ C* ρ(n) ≥ C* C
  22. 22. Problemas de Otimização ρ(n) ≥ max C* , C C C*
  23. 23. Esquema Aproximativo 𝟄 > 0 algoritmo (1 + 𝟄)-aproximativo
  24. 24. O problema de cobertura de vértices
  25. 25. O problema de cobertura de vértices b dc e f a g h
  26. 26. O problema de cobertura de vértices b dc e f a g h
  27. 27. Algoritmo Aproximativo COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C O(V + E)
  28. 28. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Algoritmo Aproximativo b dc e f a g h C = {} ! E' = {(a,b), (a,e), (b,c), (b,g), (c,d), (d,g), (d,h), (e,f), (f,g)}
  29. 29. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Algoritmo Aproximativo b dc e f a g h C = {a, b} ! E' = {(c,d), (d,g), (d,h), (e,f), (f,g)}
  30. 30. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Algoritmo Aproximativo b dc e f a g h C = {a, b, c, d} ! E' = {(e,f), (f,g)}
  31. 31. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Algoritmo Aproximativo b dc e f a g h C = {a, b, c, d, e, f} ! E' = {}
  32. 32. Algoritmo Aproximativo b dc e f a g h Solução Encontrada b dc e f a g h C = {b, d, e, f} Solução Ótima C = {a, b, c, d, e, f}
  33. 33. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Fator de Aproximação b dc e f a g h A = { (a, b), (c, d), (e, f) } A
  34. 34. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Fator de Aproximação b dc e f a g h A = { (a, b), (c, d), (e, f) } A |A| ≤ |C*|
  35. 35. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Fator de Aproximação b dc e f a g h A = { (a, b), (c, d), (e, f) } A |A| ≤ |C*| |C| = 2|A|
  36. 36. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Fator de Aproximação b dc e f a g h A = { (a, b), (c, d), (e, f) } A |A| ≤ |C*| |C| = 2|A| |C| ≤ 2|C*|
  37. 37. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Fator de Aproximação b dc e f a g h A = { (a, b), (c, d), (e, f) } A |A| ≤ |C*| |C| = 2|A| |C| ≤ 2|C*| ρ(n) = 2
  38. 38. COBERTURA-VÉRTICES-APROXIMADO (G) 1 C = ∅ 2 E' = G.E 3 enquanto E' ≠ ∅ 4 escolha uma aresta (u, v) ∈ E' 5 C = C ∪ {u, v} 6 remover de E' todas as arestas incidentes em u ou v 7 retorna C Fator de Aproximação b dc e f a g h A = { (a, b), (c, d), (e, f) } A |A| ≤ |C*| |C| = 2|A| |C| ≤ 2|C*| ρ(n) = 2 Algoritmo 2-aproximativo de tempo polinomial
  39. 39. O problema do caixeiro viajante
  40. 40. O problema do caixeiro viajante b d c e f a g 12
  41. 41. O problema do caixeiro viajante b d c e f a g
  42. 42. Inequalidade Triangular b c a dist(a, b) + dist(b, c) ≥ dist(a, c)
  43. 43. Algoritmo Aproximativo 𝜣(V2) CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H
  44. 44. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Algoritmo Aproximativo b d c e f a g
  45. 45. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Algoritmo Aproximativo b d c e f a g
  46. 46. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Algoritmo Aproximativo b d c e f a g 1 5 3 4 6 7 2 H = {a, b, d, e, f, g, c, a}
  47. 47. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Algoritmo Aproximativo H = {a, b, d, e, f, g, c, a} b d c e f a g
  48. 48. Algoritmo Aproximativo b d c e f a g b d c e f a g b d c e f a g b d c e f a g 1 5 3 4 6 7 2
  49. 49. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação
  50. 50. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*)
  51. 51. Algoritmo Aproximativo b d c e f a g W W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
  52. 52. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*)
  53. 53. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T)
  54. 54. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T) c(W) ≤ 2c(H*)
  55. 55. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  56. 56. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  57. 57. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  58. 58. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  59. 59. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  60. 60. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  61. 61. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  62. 62. Algoritmo Aproximativo b d c e f a g W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  63. 63. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T) c(W) ≤ 2c(H*)
  64. 64. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T) c(W) ≤ 2c(H*) c(H) ≤ c(W)
  65. 65. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T) c(W) ≤ 2c(H*) c(H) ≤ c(W) c(H) ≤ 2c(H*)
  66. 66. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T) c(W) ≤ 2c(H*) c(H) ≤ c(W) c(H) ≤ 2c(H*) ρ(n) = 2
  67. 67. CAIXEIRO-VIAJANTE-APROXIMADO (G, c) 1 seleciona vértice r ∈ G.E para ser a raiz 2 T = PRIM(G, c, r) 3 H = vértices ordenados de acordo com sua ordem de visitação em um percurso de pré-ordem em T 4 retorna ciclo hamiltoniano H Fator de Aproximação c(T) ≤ c(H*) c(W) = 2c(T) c(W) ≤ 2c(H*) c(H) ≤ c(W) c(H) ≤ 2c(H*) ρ(n) = 2 Algoritmo 2-aproximativo de tempo polinomial
  68. 68. O problema da soma de subconjuntos
  69. 69. O problema da soma de subconjuntos S = {1, 3, 5, 15, 18, 26} ! t = 41
  70. 70. Algoritmo Exato S = {1, 3, 5, 15, 18, 26} t = 41
  71. 71. Algoritmo Exato S = {1, 3, 5, 15, 18, 26} L0 = {0} t = 41
  72. 72. Algoritmo Exato S = {1, 3, 5, 15, 18, 26} L0 = {0} L1 = L0 ∪ L0 + 1 = {0} ∪ {1} = {0,1} t = 41
  73. 73. Algoritmo Exato S = {1, 3, 5, 15, 18, 26} L0 = {0} L1 = L0 ∪ L0 + 1 = {0} ∪ {1} = {0,1} L2 = L1 ∪ L1 + 3 = {0,1} ∪ {3, 4} = {0, 1, 3, 4} t = 41
  74. 74. Algoritmo Exato S = {1, 3, 5, 15, 18, 26} L0 = {0} L1 = L0 ∪ L0 + 1 = {0} ∪ {1} = {0,1} L2 = L1 ∪ L1 + 3 = {0,1} ∪ {3, 4} = {0, 1, 3, 4} Li = Li-1 ∪ Li-1 + xi … t = 41
  75. 75. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln
  76. 76. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln
  77. 77. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5
  78. 78. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3
  79. 79. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3
  80. 80. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial
  81. 81. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial
  82. 82. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1
  83. 83. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1
  84. 84. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1 L2 = {0, 1, 3, 4} xi = 3
  85. 85. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1 L2 = {0, 1, 3, 4} xi = 3
  86. 86. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1 L2 = {0, 1, 3, 4} xi = 3 L3 = {0, 1, 3, 4, 6, 7, 9, 10} xi = 6
  87. 87. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1 L2 = {0, 1, 3, 4} xi = 3 L3 = {0, 1, 3, 4, 6, 7, 9, 10} xi = 6
  88. 88. Algoritmo Exato SOMA-SUBCONJUNTOS (S, t) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 remover de Li todos os elementos maiores que t 6 retorna maior elemento em Ln S = {1, 3, 6}, t = 5 n = 3 L0 = {0} estado inicial L1 = {0, 1} xi = 1 L2 = {0, 1, 3, 4} xi = 3 L3 = {0, 1, 3, 4, 6, 7, 9, 10} xi = 6 Tamanho de Li pode chegar a 2i
  89. 89. Algoritmo Aproximativo Estratégia: desconsiderar alguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
  90. 90. Algoritmo Aproximativo Estratégia: desconsiderar alguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
  91. 91. Algoritmo Aproximativo Estratégia: desconsiderar alguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64} TRIM(Li, δ) = {1, 5, 28, 45, 50, 55, 58, 63}
  92. 92. Algoritmo Aproximativo Estratégia: desconsiderar alguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64} TRIM(Li, δ) = {1, 5, 28, 45, 50, 55, 58, 63} y ≤ z ≤ y 1 + δ
  93. 93. Algoritmo Aproximativo Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64} y ≤ z ≤ y 1 + δ
  94. 94. Algoritmo Aproximativo Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64} y ≤ z ≤ y 1 + δ z y Se y ≤ z(1 + δ), remover y
  95. 95. Esquema Aproximativo TRIM (L, δ) 1 m = |L| 2 L'= ⟨yi⟩ 3 z = yi 4 para i = 2 até m 5 se yi > z(1 + δ) 6 adicionar yi a L’ 7 z = yi 6 retorna L'
  96. 96. Esquema Aproximativo SOMA-SUBCONJUNTOS-APROXIMADO (S, t, ϵ) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 Li = TRIM(Li, ϵ/2n) 6 remover de Li todos os elementos maiores que t 7 retorna maior elemento em Ln
  97. 97. Esquema Aproximativo SOMA-SUBCONJUNTOS-APROXIMADO (S, t, ϵ) 1 n = |S| 2 L0 = ⟨0⟩ 3 para i = 1 até n 4 Li = MERGE-LIST(Li-1, Li-1 + xi) 5 Li = TRIM(Li, ϵ/2n) 6 remover de Li todos os elementos maiores que t 7 retorna maior elemento em Ln Se n = 4 e ϵ = 0.4 então δ = ϵ / 8 = 0,05
  98. 98. Considerações Finais
  99. 99. Considerações Finais
  100. 100. Considerações Finais • Algoritmos aproximativos são aplicáveis para problemas de otimização da classe NP-difícil;
  101. 101. Considerações Finais • Algoritmos aproximativos são aplicáveis para problemas de otimização da classe NP-difícil; • Conhecer o fator de aproximação possui importância prática;
  102. 102. Considerações Finais • Algoritmos aproximativos são aplicáveis para problemas de otimização da classe NP-difícil; • Conhecer o fator de aproximação possui importância prática; • Provar o fator aproximativo pode ser uma tarefa complexa;
  103. 103. Considerações Finais • Algoritmos aproximativos são aplicáveis para problemas de otimização da classe NP-difícil; • Conhecer o fator de aproximação possui importância prática; • Provar o fator aproximativo pode ser uma tarefa complexa; • Desenvolvimento de heurísticas.
  104. 104. Referências Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C. (2009). Introduction to Algorithms, Third Edition. The MIT Press, 3rd edition. ! Vazirani, V. V. (2001). Approximation algorithms. springer. ! Williamson, D. P. and Shmoys, D. B. (2011). The design of approximation algorithms. Cambridge University Press.
  105. 105. Obrigado Dúvidas?

×