SlideShare a Scribd company logo
1 of 105
Download to read offline
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?

More Related Content

What's hot

Matemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasMatemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivas
Ulrich Schiel
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
Bianca Dantas
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
HAROLDO MIRANDA DA COSTA JR
 
Cálculo II - Aula 7: Teorema Fundamental do Cálculo
Cálculo II - Aula 7: Teorema Fundamental do CálculoCálculo II - Aula 7: Teorema Fundamental do Cálculo
Cálculo II - Aula 7: Teorema Fundamental do Cálculo
willianv
 
Aula 7 inducao matematica-primeiroprincipio
Aula 7   inducao matematica-primeiroprincipioAula 7   inducao matematica-primeiroprincipio
Aula 7 inducao matematica-primeiroprincipio
wab030
 

What's hot (20)

Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma Máxima
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos Grafos
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e Autômatos
 
Matemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasMatemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivas
 
Cs6503 theory of computation november december 2015 be cse anna university q...
Cs6503 theory of computation november december 2015  be cse anna university q...Cs6503 theory of computation november december 2015  be cse anna university q...
Cs6503 theory of computation november december 2015 be cse anna university q...
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Cálculo II - Aula 7: Teorema Fundamental do Cálculo
Cálculo II - Aula 7: Teorema Fundamental do CálculoCálculo II - Aula 7: Teorema Fundamental do Cálculo
Cálculo II - Aula 7: Teorema Fundamental do Cálculo
 
L3 cfg
L3 cfgL3 cfg
L3 cfg
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
RABIN KARP ALGORITHM STRING MATCHING
RABIN KARP ALGORITHM STRING MATCHINGRABIN KARP ALGORITHM STRING MATCHING
RABIN KARP ALGORITHM STRING MATCHING
 
Trigonometria introducao
Trigonometria introducaoTrigonometria introducao
Trigonometria introducao
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Approximation algorithms
Approximation  algorithms Approximation  algorithms
Approximation algorithms
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0
 
Area e perimetro e volume poster
Area e perimetro e volume posterArea e perimetro e volume poster
Area e perimetro e volume poster
 
Adversarial search
Adversarial searchAdversarial search
Adversarial search
 
Aula 7 inducao matematica-primeiroprincipio
Aula 7   inducao matematica-primeiroprincipioAula 7   inducao matematica-primeiroprincipio
Aula 7 inducao matematica-primeiroprincipio
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
10 Regular VS Non Regular Language.pptx
10 Regular VS Non Regular Language.pptx10 Regular VS Non Regular Language.pptx
10 Regular VS Non Regular Language.pptx
 

Similar to 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
 

Similar to 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
 

More from Fernando Simeone

More from 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
 

Recently uploaded

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Recently uploaded (6)

[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
Certificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfCertificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfConcurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
 
Apresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfApresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdf
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 

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.