SlideShare ist ein Scribd-Unternehmen logo
1 von 105
Downloaden Sie, um offline zu lesen
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?

Weitere ähnliche Inhalte

Was ist angesagt?

O pastor, sua aposentadoria e o seu imposto de renda
O pastor, sua aposentadoria e o seu imposto de rendaO pastor, sua aposentadoria e o seu imposto de renda
O pastor, sua aposentadoria e o seu imposto de renda
Pr. Eli Rocha Silva
 
Fórmulas e nomenclaturas de matemática financeira
Fórmulas e nomenclaturas de matemática financeiraFórmulas e nomenclaturas de matemática financeira
Fórmulas e nomenclaturas de matemática financeira
marioferreiraneto
 
Aula 7 expressão regular
Aula 7   expressão regularAula 7   expressão regular
Aula 7 expressão regular
wab030
 

Was ist angesagt? (20)

Teoria da Computação - Fecho sob as operacoes regulares
Teoria da Computação - Fecho sob as operacoes regularesTeoria da Computação - Fecho sob as operacoes regulares
Teoria da Computação - Fecho sob as operacoes regulares
 
Transformada de Fourrier
Transformada de FourrierTransformada de Fourrier
Transformada de Fourrier
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
 
Algoritmos - Aula 05 B - Correcao de Exercicios
Algoritmos - Aula 05 B - Correcao de ExerciciosAlgoritmos - Aula 05 B - Correcao de Exercicios
Algoritmos - Aula 05 B - Correcao de Exercicios
 
Física 2 Ramalho (testes propostos)
Física 2 Ramalho (testes propostos)Física 2 Ramalho (testes propostos)
Física 2 Ramalho (testes propostos)
 
O pastor, sua aposentadoria e o seu imposto de renda
O pastor, sua aposentadoria e o seu imposto de rendaO pastor, sua aposentadoria e o seu imposto de renda
O pastor, sua aposentadoria e o seu imposto de renda
 
NP Completude - Loiane
NP Completude - LoianeNP Completude - Loiane
NP Completude - Loiane
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
 
Regra da cadeia
Regra da cadeiaRegra da cadeia
Regra da cadeia
 
Estudo das funções do tipo y=1/x
Estudo das funções do tipo y=1/xEstudo das funções do tipo y=1/x
Estudo das funções do tipo y=1/x
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMP
 
Exercícios Mecânica vetorial para Engenheiros
Exercícios Mecânica vetorial para Engenheiros Exercícios Mecânica vetorial para Engenheiros
Exercícios Mecânica vetorial para Engenheiros
 
Fórmulas e nomenclaturas de matemática financeira
Fórmulas e nomenclaturas de matemática financeiraFórmulas e nomenclaturas de matemática financeira
Fórmulas e nomenclaturas de matemática financeira
 
Aula 7 expressão regular
Aula 7   expressão regularAula 7   expressão regular
Aula 7 expressão regular
 
Fórmulas de Termometria
Fórmulas de TermometriaFórmulas de Termometria
Fórmulas de Termometria
 
Lógica e Matemática Computacional - Exercícios 03
Lógica e Matemática Computacional - Exercícios 03Lógica e Matemática Computacional - Exercícios 03
Lógica e Matemática Computacional - Exercícios 03
 
Classes de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícilClasses de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícil
 
Exercícios 2
Exercícios 2Exercícios 2
Exercícios 2
 
2 gases
2 gases2 gases
2 gases
 
Algoritmo Guloso
Algoritmo GulosoAlgoritmo Guloso
Algoritmo Guloso
 

Ähnlich wie Algoritmos aproximativos

Ita2006 3dia
Ita2006 3diaIta2006 3dia
Ita2006 3dia
cavip
 
Ita2009 3dia
Ita2009 3diaIta2009 3dia
Ita2009 3dia
cavip
 
Ita2010 3dia
Ita2010 3diaIta2010 3dia
Ita2010 3dia
cavip
 
Base trigonometria 001
Base trigonometria  001Base trigonometria  001
Base trigonometria 001
trigono_metria
 
Ita2008 3dia
Ita2008 3diaIta2008 3dia
Ita2008 3dia
cavip
 
Trigonometria ponteiros relogio
Trigonometria ponteiros relogioTrigonometria ponteiros relogio
Trigonometria ponteiros relogio
trigono_metria
 

Ähnlich wie Algoritmos aproximativos (20)

Ita2006 3dia
Ita2006 3diaIta2006 3dia
Ita2006 3dia
 
Ita2009 3dia
Ita2009 3diaIta2009 3dia
Ita2009 3dia
 
Ita2010 3dia
Ita2010 3diaIta2010 3dia
Ita2010 3dia
 
Base trigonometria 001
Base trigonometria  001Base trigonometria  001
Base trigonometria 001
 
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...
 
Cálculo vetorial
Cálculo vetorialCálculo vetorial
Cálculo vetorial
 
Aulas 11-guloso Algoritmos
Aulas 11-guloso AlgoritmosAulas 11-guloso Algoritmos
Aulas 11-guloso Algoritmos
 
Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018
 
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
 
Ita2008 3dia
Ita2008 3diaIta2008 3dia
Ita2008 3dia
 
Lista 4
Lista 4Lista 4
Lista 4
 
03 calculo diferencial-parte2
03 calculo diferencial-parte203 calculo diferencial-parte2
03 calculo diferencial-parte2
 
ITA 97 Matematica
ITA 97 MatematicaITA 97 Matematica
ITA 97 Matematica
 
Formulario 12º ano
Formulario 12º anoFormulario 12º ano
Formulario 12º ano
 
Campos escalares e vetoriais - Cálculo 2
Campos escalares e vetoriais - Cálculo 2Campos escalares e vetoriais - Cálculo 2
Campos escalares e vetoriais - Cálculo 2
 
Efoom 2019
Efoom 2019Efoom 2019
Efoom 2019
 
Primitivas
PrimitivasPrimitivas
Primitivas
 
Trigonometria ponteiros relogio
Trigonometria ponteiros relogioTrigonometria ponteiros relogio
Trigonometria ponteiros relogio
 
Trigonometria
TrigonometriaTrigonometria
Trigonometria
 
todas-as-formulas-de-matematica
 todas-as-formulas-de-matematica todas-as-formulas-de-matematica
todas-as-formulas-de-matematica
 

Mehr von Fernando Simeone

Mehr von Fernando Simeone (6)

Computacao Numérica
Computacao NuméricaComputacao Numérica
Computacao Numérica
 
Hierarquia de Chomsky
Hierarquia de ChomskyHierarquia de Chomsky
Hierarquia de Chomsky
 
Algoritmo SMA*
Algoritmo SMA*Algoritmo SMA*
Algoritmo SMA*
 
Algoritmo Counting sort
Algoritmo Counting sortAlgoritmo Counting sort
Algoritmo Counting sort
 
Javascript
JavascriptJavascript
Javascript
 
Guia da Startup
Guia da StartupGuia da Startup
Guia da Startup
 

Algoritmos aproximativos

  • 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. 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
  • 5. Introdução • Problemas com alto custo computacional;
  • 6. Introdução • Problemas com alto custo computacional; • Problemas da classe NP-difícil;
  • 7. Introdução • Problemas com alto custo computacional; • Problemas da classe NP-difícil; • Problemas de grande relevância prática.
  • 9. Introdução • Requisitos dos problemas da classe NP-difícil:
  • 10. Introdução • Requisitos dos problemas da classe NP-difícil: 1. Encontrar a solução ótima
  • 11. Introdução • Requisitos dos problemas da classe NP-difícil: 1. Encontrar a solução ótima 2. Em tempo polinomial
  • 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
  • 14. Problemas de Otimização Problemas de MAXIMIZAÇÃO Problemas de MINIMIZAÇÃOX
  • 15. Fator de aproximação ρ(n)C C* Algoritmo ρ(n)-aproximativo
  • 18. Problemas de Minimização 0 < C* ≤ C ρ(n) ≥ C C*
  • 21. Problemas de Maximização 0 < C ≤ C* ρ(n) ≥ C* C
  • 22. Problemas de Otimização ρ(n) ≥ max C* , C C C*
  • 23. Esquema Aproximativo 𝟄 > 0 algoritmo (1 + 𝟄)-aproximativo
  • 24. O problema de cobertura de vértices
  • 25. O problema de cobertura de vértices b dc e f a g h
  • 26. O problema de cobertura 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 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. 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
  • 40. O problema do caixeiro viajante b d c e f a g 12
  • 41. O problema do caixeiro 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 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. 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 a g 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 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. 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. 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. 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. 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. 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. 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. 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. 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 da soma de subconjuntos
  • 69. O problema da soma 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: desconsiderar alguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
  • 90. Algoritmo Aproximativo Estratégia: desconsiderar alguns elementos de Li Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}
  • 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. 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. 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
  • 100. Considerações Finais • Algoritmos aproximativos são aplicáveis para problemas de otimização da classe NP-difícil;
  • 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. 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. 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. 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.