Problemas NP-completos Profa. Sandra de Amo Teoria da Computação Pós-graduação em Ciência da Computação Diagrama das Reduções entre os Problemas SAT 3-SAT CLIQUE VC VC = Vertex Cover HAMCIRC UHAMCIRC CV = Caixeiro Viajante CV HAMPATH UHAMPATH SUM-SET Mochila K-COLOR Coloração de Grafos • Input: Grafo G = (V,E) , não dirigido, inteiro K ≤ |V| • Pergunta: G é k-colorável, isto é, existe uma função f: V {1,2,...,K} tal que f(u) ≠ f(v) sempre que {u,v} ϵ E ? K=2 K=3 ??? Problema da K-coloração de grafos • K ≥ 3 : NP-Completo Karp 1972 : 3SAT K-color • K=2 : polinomial • K=4 : todo grafo planar pode ser colorido com 4 cores. – 1879: Alfred Kempe deu primeira prova – 1890: encontrado um erro na prova de Kempe – 1890: idéias de Kempe utilizadas para mostrar a 5-coloração de grafos planares (Percy John Heawood) – 1976: Kenneth Appel/Wolfgang Haken – prova por computador HAMPATH é NP-completo Input: Grafo G = (V,E) , dirigido, s,t V Pergunta: Existe caminho hamiltoniano ligando os vértices s e t ? Caminho hamiltoniano: passa uma única vez por todos os vértices do grafo 3-SAT ≤ 1. HAMPATH é NP HAMPATH 2. 3-SAT ≤p HAMPATH Redução polinomial 3-SAT HAMPATH Variáveis = {x1, x2, ..., xl} F é satisfatível F = (a1 V b1 V c1) ^ (a2 V b2 V c2) ^ ... ^ (ak V bk V ck) Grafo G, vértices s, t Existe caminho Hamiltoniano ligando sat Construção do grafo G: estruturas básicas Para cada variável x construímos uma estrutura de “diamante” com 4 + M vértices Para cada cláusula C construímos um vértice extra ... M vértices M = 3k + 1 k = nº de cláusulas Juntando as estruturas C1 x1 C2 x2 C3 . . . Ck . . . xl Como ligar os dois tipos de estruturas x1 C1 = x1 V x4 V ¬ x5 C1 ... C1 Como ligar os dois tipos de estruturas C1 = x1 V x4 V ¬ x5 x5 C1 ... C1 Resumo • Um diamante só está ligado a vértices externos correspondendo a cláusulas onde sua variável aparece. • Os vértices internos “brancos” e “azuis” dos diamantes não estão ligados a vértices externos. • Os vértices “verdes” e “vermelhos” dos diamantes estão ligados aos vértices externos (cláusulas) onde eles aparecem. Se F é satisfatível então existe caminho hamiltoniano de s a t • Cada cláusula Ci contém ao menos um literal Li verdadeiro. • Escolhemos este literal verdadeiro para cada cláusula Ci. • Li = xj ou Lj = ¬xj s O caminho hamiltoniano ligando os vértices s a t vai percorrer os diamantes fazendo desvios para os vértices externos e voltando para o mesmo diamante x1 . . . x2 xj Os diamantes correspondentes aos literais escolhidos vão conter “desvios” para as cláusulas onde eles foram selecionados C1 ... V(xj) = F C1 O diamante é percorrido em zig-zag ou zag-zig, dependendo se a variável é avaliada como verdadeira ou falsa. • Todos os vértices dos diamantes são visitados uma única vez. • Todos os vértices externos são visitados: – O vértice Ci é visitado uma única vez quando se percorre o diamante correspondente ao literal Li que foi escolhido como verdadeiro para Ci. Se existe caminho Hamiltoniano ligando s a t então F é satisfatível. • Caso 1: o caminho hamiltoniano percorre os diamantes de forma normal, isto é: – na ordem em que aparecem fazendo desvios para os vértices externos e retornando para o mesmo diamante de onde saiu o desvio. Avaliação de variáveis: • V(xi) = True se o diamante é percorrido em zig-zag • V(xi) = False se o diamante é percorrido em zag-zig É claro que V(F) = True: Seja Ci cláusula de F. – Se Ci é percorrido em zig-zag é porque a variável xj de onde saiu o desvio (em zig-zag) aparece como positiva em Ci. Logo V(Ci) = true. – Se Ci é percorrido em zag-zig é porque a variável xj de onde saiu o desvio (em zag-zig) aparece como negativa em Ci. Logo V(Ci) = true. Caso 2: O caminho hamiltoniano percorre os diamantes de forma anormal: u v C1 C1 ISTO NÃO PODE OCORRER ! t ... Como percorrer o vértice v ? - chegando de u ? Não ! - chegando de t ? Para onde ir depois disto ? Só poderia ir para u, mas este já foi percorrido ! ... C1 SUM-SET é NP-completo Input: S = {n1,...,np} N , t N Pergunta: Existe subconjunto S’ S tal que Σ i = t ? i S’ 3-SAT ≤ 1. SUM-SET é NP SUM-SET 2. 3-SAT ≤p SUM-SET Redução polinomial 3-SAT SUM-SET Variáveis = {x1, x2, ..., xl} F é satisfatível F = (a1 V b1 V c1) ^ (a2 V b2 V c2) ^ ... ^ (ak V bk V ck) S = {n1,...,nk} N , t N Existe subconjunto S’ S tal que Σ i = t ? i S’ Um par y,z para cada variável x Um par g,h para cada cláusula C 1 2 3 4 y1 1 z1 1 0 0 l C1 C2 0 0 0 0 0 0 0 0 0 0 ... ... 0 0 n1 0 0 1 0 1 0 1 0 0 1 1 0 ... ... 0 0 n3 n4 y3 0 z3 0 . . . 0 1 0 1 0 0 0 0 1 0 1 0 ... ... 0 1 n5 n6 yl zl 0 0 0 0 y2 0 z2 0 0 0 ... 1 Ck n2 S 0 0 1 1 g1 h1 g2 h2 . . gk hk t ... 1 1 1 ... 1 0 0 0 0 ... ... 0 0 1 0 ... 0 1 0 ... 0 1 ... 0 1 ... 0 .. 1 1 3 3 ... 3 n7 np Se F é satisfatível então existe subconjunto S’ de S com soma = t 1. Se F é satisfatível, existe avaliação de variáveis V tal que V(F) = True. 2. Para cada variável xi: V(xi) = true ou V(xi) = false. 3. Para cada i = 1,...,l : – Se V(xi) = true, considere a linha yi – Se V(xi) = false, considere a linha zi 4. Como F é satisfatível, então V(Cj) = true para toda cláusula Cj, j = 1,...,k • Logo, para todo j = 1,...,k, existe um literal verdadeiro em Cj. • Logo, toda coluna j = 1,...,k, contém pelo menos uma célula em uma das linhas escolhidas em (3). Esta célula contém um 1. • Como cada cláusula só tem 3 literais, então cada coluna j = 1,...,k tem no máximo 3 células nas linhas escolhidas em (3). 5. Para cada coluna j = 1,...,k completa-se com 0, 1 ou 2 linhas da parte bottom-right da tabela, dependendo se tem 3, 2, ou 1 célula nas linhas escolhidas em (3). 6. O conjunto S` = conjunto das linhas consideradas em (3) e em (5) Se existe subconjunto S’ de S com soma = t então F é satisfatível 1. Se a soma resulta em 3 para cada coluna de j = 1,...,k (da parte top-right), então em cada coluna da parte top-right, ao menos uma linha de S’ que colabora para esta soma está na parte top-right da tabela. 2. Como a soma das colunas da parte esquerda é 1, conclui-se que S’ não contém duas linhas yi e zi. 3. Associamos o valor verdade True para cada literal com valor 1 aparecendo nas linhas de S’ da parte de cima da tabela. 4. A partir de (1) concluimos que cada cláusula possui um literal verdadeiro. Logo V(F) = True. 5. Portanto F é satisfatível. Um par y,z para cada variável x Um par g,h para cada cláusula C 1 2 3 4 y1 1 z1 1 y2 0 z2 0 0 0 l C1 C2 0 0 0 0 0 0 0 0 0 0 ... ... 0 0 n1 0 0 1 0 1 0 1 0 0 1 1 0 ... ... 0 0 n3 n4 y3 0 z3 0 . . . 0 1 0 1 0 0 0 0 1 1 ... 0 0 0 ... 1 n5 n6 yl zl 0 0 0 0 0 0 ... 1 Ck n2 S 0 0 1 1 g1 h1 g2 h2 . . gk hk t ... 1 1 1 ... 1 0 0 1 0 ... ... 0 0 1 0 ... 0 1 0 ... 0 1 ... 0 1 ... 0 .. 1 1 3 3 ... 3 n7 np UHAMPATH é NP-Completo • Input: Grafo não dirigido G, s, t vértices de G • Pergunta: Existe caminho hamiltoniano em G, começando em s e terminando em t ? HAMPATH ≤ 1. UHAMPATH é NP UHAMPATH 2. HAMPATH ≤pUHAMPATH Redução polinomial G= Grafo dirigido G, s,t vértices de G HAMPATH UHAMPATH G’ = Grafo não- dirigido G, s´,t´ vértices de G Existe caminho hamiltoniano em G ligando s a t Existe caminho hamiltoniano em G´ ligando s´ a t´ (G,s,t) (G’,s´,t´) s u umid sout uin vin v uout vout t vmid GRAFO DIRIGIDO G tin GRAFO Não - DIRIGIDO G´ • Suponhamos que existe caminho hamiltoniano em G ligando s a t u v S t umid uin uout S out t in vin vmid vout umid uin Por que não seria um Vout ? uout Sout tin vin vout vmid u v S t