105
Algoritmos Aproximativos Fernando Simeone Mestrado em Ciência da Computação Universidade Federal de Lavras Projeto e Análise de Algoritmos (2014/2)

Algoritmos aproximativos

Embed Size (px)

Citation preview

Page 1: Algoritmos aproximativos

Algoritmos AproximativosFernando Simeone

Mestrado em Ciência da Computação Universidade Federal de Lavras

!Projeto e Análise de Algoritmos (2014/2)

Page 2: Algoritmos aproximativos

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

Page 3: Algoritmos aproximativos

Introdução

Page 4: Algoritmos aproximativos

Introdução

Page 5: Algoritmos aproximativos

Introdução• Problemas com alto custo computacional;

Page 6: Algoritmos aproximativos

Introdução• Problemas com alto custo computacional;

• Problemas da classe NP-difícil;

Page 7: Algoritmos aproximativos

Introdução• Problemas com alto custo computacional;

• Problemas da classe NP-difícil;

• Problemas de grande relevância prática.

Page 8: Algoritmos aproximativos

Introdução

Page 9: Algoritmos aproximativos

Introdução• Requisitos dos problemas da classe NP-difícil:

Page 10: Algoritmos aproximativos

Introdução• Requisitos dos problemas da classe NP-difícil:

1. Encontrar a solução ótima

Page 11: Algoritmos aproximativos

Introdução• Requisitos dos problemas da classe NP-difícil:

1. Encontrar a solução ótima

2. Em tempo polinomial

Page 12: Algoritmos aproximativos

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

Page 13: Algoritmos aproximativos

Conceitos

Page 14: Algoritmos aproximativos

Problemas de Otimização

Problemas de MAXIMIZAÇÃO

Problemas de MINIMIZAÇÃOX

Page 15: Algoritmos aproximativos

Fator de aproximação

ρ(n)C C*Algoritmo

ρ(n)-aproximativo

Page 16: Algoritmos aproximativos

Problemas de Minimização

Page 17: Algoritmos aproximativos

Problemas de Minimização

0 < C* ≤ C

Page 18: Algoritmos aproximativos

Problemas de Minimização

0 < C* ≤ C

ρ(n) ≥ C C*

Page 19: Algoritmos aproximativos

Problemas de Maximização

Page 20: Algoritmos aproximativos

Problemas de Maximização

0 < C ≤ C*

Page 21: Algoritmos aproximativos

Problemas de Maximização

0 < C ≤ C*

ρ(n) ≥ C* C

Page 22: Algoritmos aproximativos

Problemas de Otimização

ρ(n) ≥ max C* , C C C*

Page 23: Algoritmos aproximativos

Esquema Aproximativo

𝟄 > 0algoritmo (1 + 𝟄)-aproximativo

Page 24: Algoritmos aproximativos

O problema de cobertura de vértices

Page 25: Algoritmos aproximativos

O problema de cobertura de vértices

b dc

e f

a

g h

Page 26: Algoritmos aproximativos

O problema de cobertura de vértices

b dc

e f

a

g h

Page 27: Algoritmos aproximativos

Algoritmo AproximativoCOBERTURA-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)

Page 28: Algoritmos aproximativos

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)}

Page 29: Algoritmos aproximativos

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)}

Page 30: Algoritmos aproximativos

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)}

Page 31: Algoritmos aproximativos

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' = {}

Page 32: Algoritmos aproximativos

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}

Page 33: Algoritmos aproximativos

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çãob dc

e f

a

g h

A = { (a, b), (c, d), (e, f) }

A

Page 34: Algoritmos aproximativos

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çãob dc

e f

a

g h

A = { (a, b), (c, d), (e, f) }

A

|A| ≤ |C*|

Page 35: Algoritmos aproximativos

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çãob dc

e f

a

g h

A = { (a, b), (c, d), (e, f) }

A

|A| ≤ |C*|

|C| = 2|A|

Page 36: Algoritmos aproximativos

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çãob dc

e f

a

g h

A = { (a, b), (c, d), (e, f) }

A

|A| ≤ |C*|

|C| = 2|A|

|C| ≤ 2|C*|

Page 37: Algoritmos aproximativos

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çãob dc

e f

a

g h

A = { (a, b), (c, d), (e, f) }

A

|A| ≤ |C*|

|C| = 2|A|

|C| ≤ 2|C*|

ρ(n) = 2

Page 38: Algoritmos aproximativos

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çãob 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

Page 39: Algoritmos aproximativos

O problema do caixeiro viajante

Page 40: Algoritmos aproximativos

O problema do caixeiro viajanteb

d

c

e f

a g

12

Page 41: Algoritmos aproximativos

O problema do caixeiro viajanteb

d

c

e f

a g

Page 42: Algoritmos aproximativos

Inequalidade Triangular

bc

a

dist(a, b) + dist(b, c) ≥ dist(a, c)

Page 43: Algoritmos aproximativos

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

Page 44: Algoritmos aproximativos

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

Page 45: Algoritmos aproximativos

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

Page 46: Algoritmos aproximativos

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 g1

5

3

4

6

7

2

H = {a, b, d, e, f, g, c, a}

Page 47: Algoritmos aproximativos

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

Page 48: Algoritmos aproximativos

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 g1

5

3

4

6

7

2

Page 49: Algoritmos aproximativos

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

Page 50: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

Page 51: Algoritmos aproximativos

Algoritmo Aproximativob

d

c

e f

a g

W

W = {a, b, d, e, f, g, f, e, d, c, d, b, a}

Page 52: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

Page 53: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

c(W) = 2c(T)

Page 54: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

c(W) = 2c(T)

c(W) ≤ 2c(H*)

Page 55: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 56: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 57: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 58: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 59: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 60: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 61: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 62: Algoritmos aproximativos

Algoritmo Aproximativob

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}

Page 63: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

c(W) = 2c(T)

c(W) ≤ 2c(H*)

Page 64: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

c(W) = 2c(T)

c(W) ≤ 2c(H*)

c(H) ≤ c(W)

Page 65: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

c(W) = 2c(T)

c(W) ≤ 2c(H*)

c(H) ≤ c(W)

c(H) ≤ 2c(H*)

Page 66: Algoritmos aproximativos

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çãoc(T) ≤ c(H*)

c(W) = 2c(T)

c(W) ≤ 2c(H*)

c(H) ≤ c(W)

c(H) ≤ 2c(H*)

ρ(n) = 2

Page 67: Algoritmos aproximativos

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çãoc(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

Page 68: Algoritmos aproximativos

O problema da soma de subconjuntos

Page 69: Algoritmos aproximativos

O problema da soma de subconjuntos

S = {1, 3, 5, 15, 18, 26} !

t = 41

Page 70: Algoritmos aproximativos

Algoritmo ExatoS = {1, 3, 5, 15, 18, 26} t = 41

Page 71: Algoritmos aproximativos

Algoritmo ExatoS = {1, 3, 5, 15, 18, 26}

L0 = {0}

t = 41

Page 72: Algoritmos aproximativos

Algoritmo ExatoS = {1, 3, 5, 15, 18, 26}

L0 = {0}

L1 = L0 ∪ L0 + 1 = {0} ∪ {1} = {0,1}

t = 41

Page 73: Algoritmos aproximativos

Algoritmo ExatoS = {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

Page 74: Algoritmos aproximativos

Algoritmo ExatoS = {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

Page 75: Algoritmos aproximativos

Algoritmo ExatoSOMA-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

Page 76: Algoritmos aproximativos

Algoritmo ExatoSOMA-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

Page 77: Algoritmos aproximativos

Algoritmo ExatoSOMA-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

Page 78: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

Page 79: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

Page 80: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

L0 = {0} estado inicial

Page 81: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

L0 = {0} estado inicial

Page 82: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

L0 = {0} estado inicial

L1 = {0, 1} xi = 1

Page 83: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

L0 = {0} estado inicial

L1 = {0, 1} xi = 1

Page 84: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

L0 = {0} estado inicial

L1 = {0, 1} xi = 1

L2 = {0, 1, 3, 4} xi = 3

Page 85: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 3

L0 = {0} estado inicial

L1 = {0, 1} xi = 1

L2 = {0, 1, 3, 4} xi = 3

Page 86: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 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

Page 87: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 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

Page 88: Algoritmos aproximativos

Algoritmo ExatoSOMA-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 = 5n = 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

Page 89: Algoritmos aproximativos

Algoritmo AproximativoEstratégia: desconsiderar alguns elementos de Li

Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}

Page 90: Algoritmos aproximativos

Algoritmo AproximativoEstratégia: desconsiderar alguns elementos de Li

Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}

Page 91: Algoritmos aproximativos

Algoritmo AproximativoEstraté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}

Page 92: Algoritmos aproximativos

Algoritmo AproximativoEstraté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 + δ

Page 93: Algoritmos aproximativos

Algoritmo Aproximativo

Li = {1, 5, 28, 29, 45, 50, 51, 55, 58, 63, 64}

y ≤ z ≤ y 1 + δ

Page 94: Algoritmos aproximativos

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

Page 95: Algoritmos aproximativos

Esquema AproximativoTRIM (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'

Page 96: Algoritmos aproximativos

Esquema AproximativoSOMA-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

Page 97: Algoritmos aproximativos

Esquema AproximativoSOMA-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

Page 98: Algoritmos aproximativos

Considerações Finais

Page 99: Algoritmos aproximativos

Considerações Finais

Page 100: Algoritmos aproximativos

Considerações Finais • Algoritmos aproximativos são aplicáveis para problemas

de otimização da classe NP-difícil;

Page 101: Algoritmos aproximativos

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;

Page 102: Algoritmos aproximativos

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;

Page 103: Algoritmos aproximativos

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.

Page 104: Algoritmos aproximativos

ReferênciasCormen, 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.

Page 105: Algoritmos aproximativos

ObrigadoDúvidas?