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?

Bellman ford algorithm
Bellman ford algorithmBellman ford algorithm
Bellman ford algorithmRuchika Sinha
 
Relationship Among Token, Lexeme & Pattern
Relationship Among Token, Lexeme & PatternRelationship Among Token, Lexeme & Pattern
Relationship Among Token, Lexeme & PatternBharat Rathore
 
Dijkstra's algorithm presentation
Dijkstra's algorithm presentationDijkstra's algorithm presentation
Dijkstra's algorithm presentationSubid Biswas
 
L03 ai - knowledge representation using logic
L03 ai - knowledge representation using logicL03 ai - knowledge representation using logic
L03 ai - knowledge representation using logicManjula V
 
Rooted &amp; binary tree
Rooted &amp; binary treeRooted &amp; binary tree
Rooted &amp; binary treeMANISH T I
 
Matemática Discreta - Parte VI funções
Matemática Discreta - Parte VI funçõesMatemática Discreta - Parte VI funções
Matemática Discreta - Parte VI funçõesUlrich Schiel
 
Brute force-algorithm
Brute force-algorithmBrute force-algorithm
Brute force-algorithm9854098540
 
A star algorithm | A* Algorithm in Artificial Intelligence | Edureka
A star algorithm | A* Algorithm in Artificial Intelligence | EdurekaA star algorithm | A* Algorithm in Artificial Intelligence | Edureka
A star algorithm | A* Algorithm in Artificial Intelligence | EdurekaEdureka!
 
Divide and Conquer - Part 1
Divide and Conquer - Part 1Divide and Conquer - Part 1
Divide and Conquer - Part 1Amrinder Arora
 
PROLOG: Recursion And Lists In Prolog
PROLOG: Recursion And Lists In PrologPROLOG: Recursion And Lists In Prolog
PROLOG: Recursion And Lists In PrologDataminingTools Inc
 
7-NFA to Minimized DFA.pptx
7-NFA to Minimized DFA.pptx7-NFA to Minimized DFA.pptx
7-NFA to Minimized DFA.pptxSLekshmiNair
 
Bellman ford algorithm
Bellman ford algorithmBellman ford algorithm
Bellman ford algorithmA. S. M. Shafi
 
LZW - Compressão e Descompressão
LZW - Compressão e Descompressão LZW - Compressão e Descompressão
LZW - Compressão e Descompressão Mayara Mônica
 

Was ist angesagt? (20)

Bellman ford algorithm
Bellman ford algorithmBellman ford algorithm
Bellman ford algorithm
 
Relationship Among Token, Lexeme & Pattern
Relationship Among Token, Lexeme & PatternRelationship Among Token, Lexeme & Pattern
Relationship Among Token, Lexeme & Pattern
 
Graphs Algorithms
Graphs AlgorithmsGraphs Algorithms
Graphs Algorithms
 
Dijkstra's algorithm presentation
Dijkstra's algorithm presentationDijkstra's algorithm presentation
Dijkstra's algorithm presentation
 
Np hard
Np hardNp hard
Np hard
 
L03 ai - knowledge representation using logic
L03 ai - knowledge representation using logicL03 ai - knowledge representation using logic
L03 ai - knowledge representation using logic
 
Approximation Algorithms
Approximation AlgorithmsApproximation Algorithms
Approximation Algorithms
 
Rooted &amp; binary tree
Rooted &amp; binary treeRooted &amp; binary tree
Rooted &amp; binary tree
 
Minimum spanning tree
Minimum spanning treeMinimum spanning tree
Minimum spanning tree
 
Matemática Discreta - Parte VI funções
Matemática Discreta - Parte VI funçõesMatemática Discreta - Parte VI funções
Matemática Discreta - Parte VI funções
 
A star algorithms
A star algorithmsA star algorithms
A star algorithms
 
Brute force-algorithm
Brute force-algorithmBrute force-algorithm
Brute force-algorithm
 
A star algorithm | A* Algorithm in Artificial Intelligence | Edureka
A star algorithm | A* Algorithm in Artificial Intelligence | EdurekaA star algorithm | A* Algorithm in Artificial Intelligence | Edureka
A star algorithm | A* Algorithm in Artificial Intelligence | Edureka
 
Divide and Conquer - Part 1
Divide and Conquer - Part 1Divide and Conquer - Part 1
Divide and Conquer - Part 1
 
PROLOG: Recursion And Lists In Prolog
PROLOG: Recursion And Lists In PrologPROLOG: Recursion And Lists In Prolog
PROLOG: Recursion And Lists In Prolog
 
7-NFA to Minimized DFA.pptx
7-NFA to Minimized DFA.pptx7-NFA to Minimized DFA.pptx
7-NFA to Minimized DFA.pptx
 
Unit 3
Unit 3Unit 3
Unit 3
 
Chap8 new
Chap8 newChap8 new
Chap8 new
 
Bellman ford algorithm
Bellman ford algorithmBellman ford algorithm
Bellman ford algorithm
 
LZW - Compressão e Descompressão
LZW - Compressão e Descompressão LZW - Compressão e Descompressão
LZW - Compressão e Descompressão
 

Ähnlich wie Algoritmos Aproximativos

Ita2006 3dia
Ita2006 3diaIta2006 3dia
Ita2006 3diacavip
 
Ita2009 3dia
Ita2009 3diaIta2009 3dia
Ita2009 3diacavip
 
Ita2010 3dia
Ita2010 3diaIta2010 3dia
Ita2010 3diacavip
 
Base trigonometria 001
Base trigonometria  001Base trigonometria  001
Base trigonometria 001trigono_metria
 
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Murilo Adriano Vasconcelos
 
Aulas 11-guloso Algoritmos
Aulas 11-guloso AlgoritmosAulas 11-guloso Algoritmos
Aulas 11-guloso AlgoritmosKevin Takano
 
Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018Cesgranrio petrobras engenheiro petroleo 2018
Cesgranrio petrobras engenheiro petroleo 2018Arthur Lima
 
Apreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaApreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaWilson Freitas
 
Ita2008 3dia
Ita2008 3diaIta2008 3dia
Ita2008 3diacavip
 
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 2Sandra Gaspar Martins
 
Trigonometria ponteiros relogio
Trigonometria ponteiros relogioTrigonometria ponteiros relogio
Trigonometria ponteiros relogiotrigono_metria
 
todas-as-formulas-de-matematica
 todas-as-formulas-de-matematica todas-as-formulas-de-matematica
todas-as-formulas-de-matematicaHudson Sousa
 

Ä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.