Algoritmos Aproximativos
Fernando Simeone
Mestrado em Ciência da Computação
Universidade Federal de Lavras
!
Projeto e Análise de Algoritmos (2014/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
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ática.
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 todas as instâncias
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	

 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)
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)}
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)}
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)}
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' = {}
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}
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
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*|
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|
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*|
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
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
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 = 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
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
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
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}
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
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é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
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*)
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é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*)
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)
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*)
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é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*)
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)
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*)
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
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
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} = {0, 1, 3, 4}
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} = {0, 1, 3, 4}
Li
= Li-1
∪ Li-1
+ xi
…
t = 41
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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}
TRIM(Li, δ) = {1, 5, 28, 45, 50, 55, 58, 63}
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 + δ
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 + δ)	

6	

 adicionar yi a L’	

7	

 z = yi	

6	

 retorna L'
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
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
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;
• Conhecer o fator de aproximação possui importância
prática;
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;
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.
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.
Obrigado
Dúvidas?

Algoritmos aproximativos

  • 1.
    Algoritmos Aproximativos Fernando Simeone Mestradoem Ciência da Computação Universidade Federal de Lavras ! Projeto e Análise de Algoritmos (2014/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.
  • 4.
  • 5.
    Introdução • Problemas comalto custo computacional;
  • 6.
    Introdução • Problemas comalto custo computacional; • Problemas da classe NP-difícil;
  • 7.
    Introdução • Problemas comalto custo computacional; • Problemas da classe NP-difícil; • Problemas de grande relevância prática.
  • 8.
  • 9.
    Introdução • Requisitos dosproblemas da classe NP-difícil:
  • 10.
    Introdução • Requisitos dosproblemas da classe NP-difícil: 1. Encontrar a solução ótima
  • 11.
    Introdução • Requisitos dosproblemas da classe NP-difícil: 1. Encontrar a solução ótima 2. Em tempo polinomial
  • 12.
    Introdução • Requisitos dosproblemas da classe NP-difícil: 1. Encontrar a solução ótima 2. Em tempo polinomial 3. Para todas as instâncias
  • 13.
  • 14.
    Problemas de Otimização Problemasde MAXIMIZAÇÃO Problemas de MINIMIZAÇÃOX
  • 15.
    Fator de aproximação ρ(n)CC* Algoritmo ρ(n)-aproximativo
  • 16.
  • 17.
  • 18.
    Problemas de Minimização 0< C* ≤ C ρ(n) ≥ C C*
  • 19.
  • 20.
  • 21.
    Problemas de Maximização 0< C ≤ C* ρ(n) ≥ C* C
  • 22.
  • 23.
    Esquema Aproximativo 𝟄 >0 algoritmo (1 + 𝟄)-aproximativo
  • 24.
  • 25.
    O problema decobertura de vértices b dc e f a g h
  • 26.
    O problema decobertura de vértices b dc e f a g h
  • 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.
    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.
    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.
    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.
    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.
    Algoritmo Aproximativo b dc ef 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.
    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.
    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.
    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.
    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.
    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.
    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.
  • 40.
    O problema docaixeiro viajante b d c e f a g 12
  • 41.
    O problema docaixeiro viajante b d c e f a g
  • 42.
    Inequalidade Triangular b c a dist(a, b)+ dist(b, c) ≥ dist(a, c)
  • 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.
    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.
    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.
    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.
    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.
    Algoritmo Aproximativo b d c e f ag 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.
    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.
    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.
    Algoritmo Aproximativo b d c e f ag W W = {a, b, d, e, f, g, f, e, d, c, d, b, a}
  • 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.
    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.
    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.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 56.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 57.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 58.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 59.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 60.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 61.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 62.
    Algoritmo Aproximativo b d c e f ag W = {a, b, d, e, f, g, f, e, d, c, d, b, a} H = {a, b, d, e, f, g, c, a}
  • 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.
    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.
    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.
    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.
    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.
    O problema dasoma de subconjuntos
  • 69.
    O problema dasoma de subconjuntos S = {1, 3, 5, 15, 18, 26} ! t = 41
  • 70.
    Algoritmo Exato S ={1, 3, 5, 15, 18, 26} t = 41
  • 71.
    Algoritmo Exato S ={1, 3, 5, 15, 18, 26} L0 = {0} t = 41
  • 72.
    Algoritmo Exato S ={1, 3, 5, 15, 18, 26} L0 = {0} L1 = L0 ∪ L0 + 1 = {0} ∪ {1} = {0,1} t = 41
  • 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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    Algoritmo Aproximativo Estratégia: desconsideraralguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
  • 90.
    Algoritmo Aproximativo Estratégia: desconsideraralguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
  • 91.
    Algoritmo Aproximativo Estratégia: desconsideraralguns 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.
    Algoritmo Aproximativo Estratégia: desconsideraralguns 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.
    Algoritmo Aproximativo Li ={1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64} y ≤ z ≤ y 1 + δ
  • 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.
    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.
    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.
    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.
  • 99.
  • 100.
    Considerações Finais • Algoritmosaproximativos são aplicáveis para problemas de otimização da classe NP-difícil;
  • 101.
    Considerações Finais • Algoritmosaproximativos 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.
    Considerações Finais • Algoritmosaproximativos 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.
    Considerações Finais • Algoritmosaproximativos 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.
    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.