Caixeiro Viajante Problema: Dado um grafo G=(V,E), encontrar o Circuito Hamiltoniano de tamanho mínimo. Teorema: A menos que P=NP, não existe algoritmo aproximativo polinomial para o TSP para qualquer >=1. Prova: Suponha que exista um algoritmo -aproximativo polinomial A para algum >1. Vamos mostrar então que é possível encontrar um ciclo Hamiltoniano em tempo polinomial Caixeiro Viajante K K 1 K K 1 1 1 1 1 Instância do Ciclo Hamiltoniano Instância do Caixeiro Viajante K = 1+|V| Caixeiro Viajante Objetivo: Provar que o algoritmo -aproximativo polinomial para o TSP (A) irá retornar um tour de custo |V | se e somente se existe um ciclo Hamiltoniano em G. Se o algoritmo retorna um ciclo de custo |V| o Ciclo Hamiltoniano existe Se existe um ciclo Hamiltoniano em G então A retorna um tour (T ) de comprimento menor ou igual a |V|. Como o TSP não utiliza nenhuma aresta de valor maior que |V| então ele retorna um tour de custo |V| Caixeiro Viajante Circuito Euleriano: Um circuito Euleriano é um passeio fechado que visita todas as arestas do grafo uma única vez Teorema Um grafo G admite um circuito Euleriano se e somente se todo vértice de G tem grau par Caixeiro Viajante Problema: TSP sobre grafo G=(V,E) que satisfaz a desigualdade triangular: d(i,j) d(i,k) + d(k,j) Algoritmo Tree: – Obter a árvore geradora de peso mínimo T; – Duplicar as arestas de T; – Obter um circuito euleriano, usando busca em profundidade; – Escolher um nó inicial; – Encontrar circuito hamiltoniano sobre o circuito euleriano, usando “atalhos” para não repetir nós. Caixeiro Viajante 1 Árvore geradora mínima com arestas duplicadas 5 2 4 3 Caixeiro Viajante 1 Circuito Euleriano 5 2 4 3 Caixeiro Viajante 1 Circuito Hamiltoniano 5 2 4 3 Caixeiro Viajante 1 Circuito Hamiltoniano 5 2 4 3 Caixeiro Viajante 1 Circuito Hamiltoniano 5 2 4 3 Caixeiro Viajante Teorema: O algoritmo Tree é 2-aproximado. Prova: Seja OPT(I) o circuito hamiltoniano de custo mínimo. Sabemos que custo(T) OPT(I) e A(I) 2 custo (T) A(I) 2 .OPT(I) Caixeiro Viajante Algoritmo de Christofides: – Obter a árvore geradora de peso mínimo T; – Encontrar o conjunto C de nós de T que têm grau ímpar; – Encontrar o matching perfeito de custo mínimo M sobre o o subgrafo de G induzido por C – Seja G’ = T U M; – Encontrar um circuito euleriano em G’ e um tour neste circuito eliminando repetições; Caixeiro Viajante Caixeiro Viajante Teorema: O algoritmo de Christofides é 3/2-aproximado. Prova: A(I) c(T)+c(M) e c(T) OPT(I) C(M1) + c(M2 ) OPT(I) C(M) ½.OPT(I) A(I) 3/2.OPT(I) OPT(I) M1 M2 Caixeiro Viajante Exemplo Ruim 4 2 3 1 6 n-1 n 5 (n-1)/2 Christofides 4 2 1 Ótimo, custo=n-1 3 6 n-1 n 5 (n-1)/2 2 1 n Set Cover • SET COVER: Dado um conjunto U de elementos e uma coleção F={S1, S2, . . . , Sm} de subconjuntos de U, determinar a família G F de menor cardinalidade tal que a união dos conjuntos de G é igual a U Set Cover • Algoritmo Guloso – Enquanto houver algum elemento não coberto • Escolha o conjunto ainda não selecionado que cobre o maior número de elementos de não cobertos Set Cover • Análise S: primeiro conjunto escolhido. OPT(F’,U’): custo da solução ótima para cobrir U’ utilizando a família F’ custoGr (F,U) = 1 + custoGr(F-{S},U-S) Lema 1. OPT(F,U)>= |U|/|S| Lema 2. OPT(F,U)>=OPT(F-{S},U-S) Set Cover • Análise. – Hipótese Indutiva. razaoGreedy(F,T)<=H|T| para todo conjunto T com |T|<|U|, onde Hn é o n-ésimo número harmônico custoGr ( F ,U ) 1 custoGr ( F {S}, U S ) OPT ( F ,U ) max{|U | / | S |, OPT ( F {S}, U S )} custoGr ( F {S}, U S ) | S | 1 H |U ||S | H |U | | U | / | S | OPT ( F {S}, U S ) |U | Set Cover • [Feig 98] A menos que P=NP não existe um algoritmo polinomial com razão de aproximação o(log n) para o SET-COVER Subset Sum • Dado um par (S,t) onde t é um inteiro positivo e S={x1,…,xn} é um conjunto de inteiros não negativos, encontrar S’ S cuja soma de seus elementos seja a maior possível mas não ultrapasse T • O problema é NP-Completo – Redução a partir do 3-SAT Subset Sum • Algoritmo Exponencial – Seja L+x a lista obtida a partir de uma lista L, aumentando todo elemento de L de x unidades – L=<1,2,5,9> L+4 =<5,6,9,13> Subset Sum • Algoritmo Exponencial 1. L0{0} 2. Para i1 até n faça 2.1 Li MergeLists(Li-1,Li-1+xi) 2.2 Remova todo elemento de Li maior que t 3. Devolva o maior elemento de Ln Subset Sum • Algoritmo Exponencial – O algoritmo Exponencial retorna o subconjunto de maior soma cuja soma não ultrapassa T – Para obter uma aproximação em tempo polinomial, somas com valores próximos são descartadas Subset Sum • TRIM(L, ): Esta operação remove o máximo possível de elementos de L de modo que a lista resultante L’satisfaz: – Para todo x L, existe z L’ tal que (1-)x <= z <= x • Todas as somas de L estão representadas em L’ salvo uma precisão Subset Sum • Algoritmo Approx-SubsetSum(S,t, ) L0{0} Para i1 até n faça Li MergeLists(Li-1,Li-1+xi) Li TRIM(Li, / n) Remova todo elemento de Li maior que t Devolva z, o maior elemento de Ln Subset Sum Lema. Seja Pi o conjunto de todas as somas possíveis com os i primeiros números de S. Devemos mostrar que para todo elemento y de Pi existe um elemento wLi , após trimmed, tal que (1- /n)i y <= w <= y Subset Sum Prova Indução em i. A base é verdadeira. Caso i) y – xi não pertence a Pi-1 Logo, y pertence a Pi-1. Pela hip indutiva, existe w’ em Li-1 tal que (1- /n)i-1 y <= w’ <= y Como a lista Li é ‘trimmed’ existe w em Li tal que (1- /n) w’ <= w <=w’. Logo w satisfaz a condição requerida Subset Sum Prova Caso ii) y – xi pertence a Pi-1 Neste caso, existe w’ em Li-1 tal que (1- /n)i-1 y - xi<=(1- /n)i-1 (y-xi)<= w’<= y-xi Por outro laso, existe w em Li tal que (1- /n) (w’+xi)<= w<= w’+xi Logo, w satisfaz as condições requeridas Subset Sum Teorema. Approx-SubsetSum aproxima o SubsetSum de um fator de (1-) em tempo (n2 ln t) / Prova. Seja z* a solução ótima. Pelo lema o algoritmo retorna um z tal que (1-/n)nz*<= z<= z*. Como (1-/n)n>(1- ) para n>1, temos que (1-)z*<= z<= z*. Subset Sum Teorema. Approx-SubsetSum aproxima o SubsetSum de um fator de (1-) em tempo Prova. Depois da operação de TRIM os elementos sucesssivos de Li , w e w’, satisfazem w/w’< 1/(1-/n). Logo, o número máximo de elementos de Li após o TRIM é logt1/(1-/n) <= (n ln t) / MAX SAT Entrada n variáveis booleanas : x1,... Xn m cláusulas : C1,... Cm Pesos wi >= 0 para cada clausula Ci Objetivo : Encontrar uma atribuição de verdadeiro/falso para xi que maximize a soma dos pesos das clausulas satisfeitas MAX SAT Algoritmo randomizado Para i=1,...,n Se random(1/2) = 1 xi true Senão xi false Com probabilidade ½ dizemos que uma variável é verdadeira ou falsa MAX SAT Teorema : O algoritmo tem aproximação ½ Prova: Considere a variável aleatória xj xj 1, se a clausula é satisfeita 0, caso contrário W: soma dos pesos das clausulas satisfeitas w wj x j Logo, j E (w) E ( w j x j ) w j E ( x j ) j j MAX SAT E(xj) = 1*Pr(xj=1) + 0*Pr(xj=0) = Pr(clausula j ser satisfeita) Lj : número de literais na clausula j Obs: A clausula j não é satisfeita somente se todos literais forem 0 Cj = (x1 v x3 v x5 v x6) Devemos ter x1=0, x3 = 1, x5 =0 e x6 =0 Probabilidade = (1/2)4 Caso Geral=(1/2)Lj MAX SAT Probabilidade da clausula j ser satisfeita é 1-(1/2)Lj Logo, wj Lj OPT 1 j E ( w) w j 1 2 2 j 2 0,5-aproximação Obs: w j j é um limite superior MAX SAT O que aconteceria se toda clausula tivesse exatamente 3 literais? 1 3 7 E ( w) w j 1 w j j 2 8 j 7/8-aproximação Hastad 97) Se MAXE3SAT tem aproximação (7/8 + ) para algum > 0, P = NP MAX SAT Algoritmo 2 Mudando a probabilidade do sorteio Seja p>= ½ Para i=1,...,n Se random(p) = 1 xi true Senão xi false MAX SAT Lema: Seja I uma instância do MAXSAT onde nenhuma clausula de tamanho 1 aparece negada. Então, para toda clausula j, Pr[cj ser satisfeita] >= min (p,1-p2) Prova: Caso 1) Lj = 1. Neste caso, Pr[Cj é satisfeita] = p Caso 2) Lj >= 2. Pr[Cj não satisfeita] <= pLj MAX SAT Pr[cj ser satisfeita] >= 1 - pLj >= 1 – p2 (x1 v x2) como exmplo Pr[Cj ser satisfeita] >= 1-p2 MAX SAT Instância onde cláusula de tamanho 1 aparece negada? Caso 1) Se existe a clausula (xi) e não existe a clausula (xi), podemos fazer com que xi = true com probabilidade 1-p. Recaimos no caso anterior (equivalente a substituir xi por zi) MAX SAT Instância onde cláusula de tamanho 1 aparece negada? Caso 2) Existe a clausula ( xi) e a clausula (xi). Neste caso uma das duas não são satisfeitas. Dessa forma podemos melhorar o limite superior. Se ci=xj e ci’= xj, retiramos min{wi,wi’} do limite superior. Neste caso, devemos sortear com probabilidade a clausula de maior peso. maior MAX SAT A: cláusulas cujo peso é retirado do limite superior segundo o caso 2 B: cláusulas complementares a A Exemplo: Clausulas: (x1 v x2 v x3) , (x4) , (x4) , (x2 v x3), Pesos :(2, 3,5,4) A = {(x4)} e B = {( x4)} 2 w min{ p , 1 p } p wi i E[ A lg] iA B OPT iB w w iA B i iB i min{p,1 p 2 } MAX SAT Maximizando p, temos p=0.618 MAX SAT Modele MAXSAT como PI max w j z j j s.a y (1 y ) z iI j j iI j j j 0<= zj <= 1 yi {0,1} Ij+ : conjunto das variáveis que aparecem não-negadas em Cj Ij- : conjunto das variáveis que aparecem negadas em Cj MAX SAT Exemplo (x1 v x2 v x3) , ( x2 v x3) Max w1z1 + w2z2 s.a y1 + y2 + (1 - y3) >= z1 (1 - y2)+ (1 - y3) >= z2 yi {0,1} 0 <= zi <= 1 Resolva a relaxação linear yi {0,1} é substituído por 0 <= y <= 1 MAX SAT y* : solução da relaxação linear Para i=1,...,n Se random(y*) = 1 xi true Senão xi false MAX SAT Fato 1) (Desigualdade das Médias) Seja a1,..., ak reais não negativo,então: k k ai a1a2 ak i 1 k Fato 2) Se f é côncava em [l,v], f(l) >= al+b e f(v) >= av+b, então f(x) >= ax + b em [l,v] MAX SAT Teorema : O algoritmo tem aproximação (1-1/e) @ 0,632 Prova : Considere a clausula Cj da forma: k * x1 v x2 v ... v xk k y i k * i 1 1 ( 1 y ) 1 i Pr(Cj é satisfeita) = k i 1 k * y Como y* é viável, i zi k i 1 k y *i i 1 1 k k k k * k k z 1 j 1 1 1 z *j k k MAX SAT A última desigualdade segue do fato 2, já que Zj*=0 1 – (1 – (Zj* / k ) ) k = 0 Zj*=1 1 – (1 – (Zj* / k ) ) k = 1-(1-1/k)k e 1 – (1 - (Zj* / k ) )k é côncava Sendo que este resultado vale para qualquer cláusula. MAX SAT E (w) w j Pr(clausula_ j _ é _ satisfeita) j 1 k min1 1 w j z * j k k j 1 k 1 min1 1 OPT 1 OPT , já que lim(1-1/x)x converge k e para 1/e. k