28 min de leitura
Atualizado em
Redução de polinômio
O Que é "Redução"? Uma Dualidade Essencial
O termo "redução" possui um significado duplo crucial, dependendo do contexto:
Redução de Polinômio (Simplificação Algébrica): No campo da álgebra, "reduzir um polinômio" significa simplificar uma expressão algébrica combinando seus termos semelhantes. É um processo fundamental para tornar expressões mais concisas e fáceis de manipular.
Redução Polinomial (Complexidade Computacional): Na Teoria da Complexidade Computacional, uma "redução" é uma transformação de um problema em outro, realizada em tempo polinomial. Seu objetivo principal é comparar o "grau de dificuldade" entre diferentes problemas computacionais. Este é o conceito central quando falamos de classes de problemas como P, NP e NP-Completo, e será o foco principal deste guia, dado o material abrangente fornecido nas fontes.
Compreender essa dualidade é o primeiro passo para dominar o tema. Abordaremos ambos os aspectos, começando pela simplificação algébrica para estabelecer uma base sólida.
1. Redução de Polinômio na Álgebra: Simplificando Expressões
No ensino fundamental e médio, a "redução de polinômio" refere-se à simplificação de expressões algébricas. Para isso, é essencial entender o que são monômios e polinômios.
1.1. Entendendo Monômios e Polinômios
Monômio: Uma expressão algébrica que apresenta apenas um termo. Exemplos incluem
15x³,6x²,-9xe-12. Cada monômio é composto por:Coeficiente: A parte numérica (ex: 15 em
15x³).Parte Literal: As variáveis com seus expoentes (ex:
x³em15x³).Um monômio com coeficiente zero (ex:
0x³) é um monômio nulo, resultando em um polinômio nulo.Um termo que não apresenta variável (letra) é chamado de termo independente (ex: -12 em
15x³ + 6x² - 9x - 12).
Polinômio: São expressões algébricas formadas pela adição e subtração de um número finito de monômios. Por exemplo,
15x³ + 6x² - 9x - 12é um polinômio com quatro monômios.
1.2. Classificação dos Polinômios (Forma Reduzida)
Quando um polinômio está em sua forma reduzida (ou seja, sem monômios semelhantes), ele pode receber nomes especiais com base no número de termos:
Monômio: Um único termo (ex:
9A²x).Binômio: Dois termos (ex:
5A³B² - 9A³B²antes da redução, ou3x + 2y).Trinômio: Três termos (ex:
x² + 2x + 1).Polinômio (com mais de três termos): Polinômios com quatro ou mais termos não recebem nomes especiais e são genericamente chamados de "polinômios".
1.3. Como Reduzir um Polinômio (Passo a Passo)
A redução de um polinômio é o processo de combinar monômios semelhantes. Monômios são semelhantes quando possuem a mesma parte literal (mesmas variáveis com os mesmos expoentes).
Para reduzir um polinômio:
Identifique termos semelhantes: Observe a parte literal de cada monômio.
Agrupe termos semelhantes: Reorganize a expressão para que os termos semelhantes fiquem próximos.
Opere os coeficientes: Some ou subtraia os coeficientes dos monômios semelhantes e mantenha a parte literal.
Exemplo 1 (Adição/Subtração): Reduzir 12x² - 10x + 4 - 6x² + 14x - x.
Termos semelhantes:
12x²e-6x²;-10x,+14xe-x.Agrupando:
12x² - 6x² - 10x + 14x - x + 4.Operando:
(12 - 6)x² = 6x²(-10 + 14 - 1)x = 3x(Lembre-se que-xtem coeficiente-1)
Resultado reduzido:
6x² + 3x + 4.
Exemplo 2 (Com Multiplicação/Divisão): Reduzir (2x . 4yx) + 5xy - x + (25x : 5).
Resolva as operações dentro dos parênteses primeiro:
(2x . 4yx) = 8yx²(25x : 5) = 5x
A expressão torna-se:
8yx² + 5xy - x + 5x.Identifique e agrupe termos semelhantes:
8yx² + 5xy + (-x + 5x).Opere os coeficientes:
(-1 + 5)x = 4x.Resultado reduzido:
8yx² + 5xy + 4x.
1.4. Grau de um Polinômio
O grau de um polinômio indica seu "tamanho" ou "complexidade" em relação aos expoentes de suas variáveis. Existem dois casos principais para calcular o grau:
Polinômio com a mesma variável: O grau é o maior expoente dessa variável em qualquer monômio.
Exemplo:
x⁴ + 2x² - 9x + 1Expoentes de x: 4, 2, 1 (no
-9x), 0 (no+1).O maior expoente é 4.
Grau do polinômio: 4.
Polinômio com diferentes variáveis (e já na forma reduzida):
Primeiro, calcule o grau de cada monômio separadamente: O grau de um monômio é a soma dos expoentes de suas variáveis.
Em seguida, o grau do polinômio é o maior grau encontrado entre seus monômios.
Exemplo:
AB⁷ + X³Y² + XY⁷ + X²Y⁸AB⁷: A¹B⁷ -> grau 1 + 7 = 8.X³Y²: X³Y² -> grau 3 + 2 = 5.XY⁷: X¹Y⁷ -> grau 1 + 7 = 9.X²Y⁸: X²Y⁸ -> grau 2 + 8 = 10.O maior grau entre os monômios é 10.
Grau do polinômio: 10.
Atenção: Sempre certifique-se de que o polinômio está na sua forma reduzida antes de calcular seu grau, especialmente no segundo caso.
2. Redução Polinomial na Complexidade Computacional: A Base da "Dificuldade" dos Problemas
Agora, mergulharemos no coração da Teoria da Complexidade Computacional, onde a redução polinomial é uma ferramenta poderosa para comparar a dificuldade inerente de problemas computacionais.
2.1. O Conceito Fundamental de Redução Polinomial (≤P)
Uma redução de um problema Y a um problema X, denotada por Y ≤P X, significa que o problema Y é polinomialmente redutível a X.
Intuição: Significa que o problema Y não é computacionalmente mais difícil que o problema X. Se você pudesse resolver X em tempo polinomial, você também conseguiria resolver Y em tempo polinomial.
Como funciona na prática? Se você tivesse uma "caixa preta" capaz de resolver qualquer instância do problema X, você poderia resolver qualquer instância do problema Y usando um número polinomial de passos e um número polinomial de chamadas a essa caixa preta. A transformação de Y para X (e da solução de X de volta para Y) deve ser computável em tempo polinomial.
Direção da Redução: É crucial entender a direção: nós reduzimos para o problema que queremos mostrar que é o mais difícil. Se Y ≤P X, então X é pelo menos tão difícil quanto Y.
Transitividade: A relação de redução polinomial é transitiva. Isso significa que se Y ≤P X e X ≤P Z, então Y ≤P Z.
2.2. Tipos de Reduções
As fontes mencionam diferentes tipos de reduções, mas para a Teoria da Complexidade (especialmente NP-Completude), duas são mais proeminentes:
Redução de Turing (ou de Cook): Permite que o algoritmo de um problema chame o algoritmo do outro problema múltiplas vezes (como uma sub-rotina ou "caixa preta"). Se a redução é polinomial e o número de chamadas é polinomial, então um problema pode ser resolvido em tempo polinomial se o outro também for. É mais flexível e mais fraca (no sentido de que pode "unir" mais problemas).
Redução de Karp (ou Many-One): Um tipo mais restrito de redução, onde o algoritmo do problema original faz apenas uma única chamada ao algoritmo do problema alvo. Além disso, uma instância
Ido problema originalΠé uma instância "SIM" se, e somente se, a instânciaT(I)transformada for uma instância "SIM" do problema alvoΠ'. Essa é a forma de redução mais comumente usada para definir classes de complexidade como a NP-Completa.
As reduções devem ser "fáceis" de computar (tempo polinomial) em relação à complexidade dos problemas envolvidos. Se a redução fosse tão difícil quanto resolver o problema original, ela não teria utilidade em classificar a dificuldade.
3. As Classes de Complexidade: P, NP, co-NP, NP-Difícil e NP-Completo
A redução polinomial é a espinha dorsal da definição e interconexão das principais classes de problemas computacionais.
3.1. Problemas de Decisão
A Teoria da Complexidade é desenvolvida principalmente sobre problemas de decisão, que são aqueles que possuem uma resposta SIM ou NÃO. Embora muitos problemas práticos sejam de otimização (buscar o melhor valor), eles geralmente podem ser reformulados como problemas de decisão ao adicionar um parâmetro de limite (ex: "Existe um caminho de custo no máximo K?" em vez de "Encontre o caminho de custo mínimo").
3.2. Certificados e Verificação em Tempo Polinomial
Para problemas de decisão, o conceito de certificado é crucial. Um certificado é uma estrutura que "testemunha" que uma instância tem uma resposta "SIM".
Verificação em Tempo Polinomial: Para muitos problemas, mesmo que seja difícil encontrar uma solução, é relativamente fácil verificar se uma suposta solução (o certificado) é correta. Essa verificação deve ser feita em tempo polinomial.
Exemplo: Para o problema do Ciclo Hamiltoniano (HAM-CYCLE):
Entrada: Um grafo
G.Pergunta:
Gcontém um ciclo hamiltoniano (passa por cada vértice exatamente uma vez)?Certificado (se SIM): A sequência de vértices que forma o ciclo.
Verificação: Em tempo polinomial, você pode verificar se a sequência é uma permutação dos vértices e se todas as arestas consecutivas existem no grafo.
3.3. As Principais Classes
Classe P (Polinomial-Time): Contém os problemas de decisão que podem ser resolvidos (decididos) por um algoritmo determinístico em tempo polinomial. São considerados problemas "facilmente" computáveis.
Exemplos: Ordenação de vetores, multiplicação de matrizes, caminhos mais curtos em grafos.
Importante: Se Y ≤P X e X está em P, então Y também está em P.
Classe NP (Não-Determinística Polinomial-Time): Contém os problemas de decisão para os quais uma solução proposta (certificado) pode ser verificada por um algoritmo determinístico em tempo polinomial.
O nome "Não-Determinística" vem de modelos de computação que podem "adivinhar" ou explorar múltiplas opções simultaneamente. Se uma dessas "adivinhações" leva a uma solução válida, o problema é aceito. A complexidade não-determinística se preocupa com o número mínimo de passos para uma conclusão "Aceitar".
Relação P ⊆ NP: Todo problema que pode ser resolvido em tempo polinomial também pode ter sua solução verificada em tempo polinomial, portanto, P é um subconjunto de NP.
Classe co-NP: Contém os problemas de decisão cujas respostas "NÃO" podem ser verificadas por um algoritmo em tempo polinomial. Em outras palavras, um problema está em co-NP se seu complemento (o problema com a resposta inversa) está em NP.
Exemplo: O problema dos números primos (
Primo ∈ co-NP). Se um número não é primo (é composto), seu fator (o certificado) pode ser verificado eficientemente.Uma questão em aberto na computação é se
NP = co-NP.
3.4. O Problema P = NP?
Esta é uma das questões mais importantes e não resolvidas da Ciência da Computação, com um prêmio de 1 milhão de dólares.
Significado: Se P = NP, isso significa que todo problema cuja solução pode ser rapidamente verificada também pode ser rapidamente resolvida. Isso teria implicações profundas para áreas como criptografia, inteligência artificial e otimização.
A crença geral: A maioria dos cientistas da computação acredita que P ≠ NP, ou seja, existem problemas em NP que não podem ser resolvidos por algoritmos em tempo polinomial.
Consequência: Se P ≠ NP, então os problemas em NP que não estão em P são considerados intratáveis no contexto clássico.
3.5. NP-Difícil e NP-Completo: Os "Problemas Mais Difíceis"
Dentro da vasta classe NP, existe um subconjunto de problemas que concentra toda a dificuldade da classe: os problemas NP-Completos.
Problema NP-Difícil (NP-Hard): Um problema X é NP-Difícil se todo problema em NP pode ser reduzido polinomialmente a X. Isso significa que X é, no mínimo, tão difícil quanto qualquer problema em NP.
Observação Importante: Um problema NP-Difícil não precisa necessariamente estar na classe NP. Por exemplo, problemas de otimização (como encontrar o caminho hamiltoniano mínimo) podem ser NP-Difíceis, mas não problemas de decisão, e, portanto, não pertencem diretamente a NP.
Problema NP-Completo (NP-Complete): Um problema X é NP-Completo se satisfaz duas condições:
X ∈ NP (Ou seja, sua solução pode ser verificada em tempo polinomial).
X ∈ NP-Difícil (Ou seja, todo problema em NP pode ser reduzido polinomialmente a X).
Os problemas NP-Completos são os "mais difíceis" na classe NP. Se um único problema NP-Completo pudesse ser resolvido em tempo polinomial, isso implicaria que P = NP, e todos os problemas em NP se tornariam resolvidos em tempo polinomial.
Equivalência Polinomial: Todos os problemas NP-Completos são polinomialmente equivalentes, o que significa que qualquer um pode ser reduzido polinomialmente a qualquer outro, e vice-versa. Isso forma uma "árvore" de reduções, onde a descoberta de um problema NP-Completo permite "ancorar" as provas de outros.
4. A Importância das Reduções Polinomiais para Provas de NP-Completude
A redução polinomial é a ferramenta principal para provar que um novo problema é NP-Completo.
4.1. Estratégia de Prova
Para provar que um problema Π' é NP-Completo, você deve seguir dois passos essenciais:
Prove que
Π'está em NP: Demonstre que um certificado para as instâncias "SIM" deΠ'pode ser verificado em tempo polinomial.Prove que
Π'é NP-Difícil: Isso é feito mostrando que um problemaΠque já é sabidamente NP-Completo pode ser reduzido polinomialmente aΠ'(Π ≤P Π').Passos para a redução:
Crie um algoritmo
T(transformação) que receba qualquer instância deΠe a transforme em uma instância deΠ'.Prove que essa transformação
Texecuta em tempo polinomial.Prove que a instância original de
Πé "SIM" se e somente se a instância transformada deΠ'for "SIM".
Advertência Crucial: É comum e fácil cometer o erro de reduzir na direção errada! Você deve reduzir o problema NP-Completo JÁ CONHECIDO para o problema que você ESTÁ INTERESSADO em provar que é NP-Completo.
4.2. O Primeiro Problema NP-Completo: O Teorema de Cook-Levin
A descoberta do primeiro problema NP-Completo foi um marco fundamental. Isso foi feito independentemente por Stephen Cook (1971) e Leonid Levin (1973).
CIRCUIT-SAT (Problema de Satisfatibilidade de Circuitos): Foi o primeiro problema provado ser NP-Completo.
Definição: Dada uma descrição de um circuito lógico combinacional, existe uma atribuição de valores de entrada (0s ou 1s) que faz com que a saída do circuito seja 1 (verdadeira)?.
Prova (esboço): A prova de que CIRCUIT-SAT é NP-Difícil é complexa, mas a ideia é que a execução de qualquer algoritmo determinístico polinomial (que verifica certificados em NP) pode ser simulada por um circuito lógico em tempo polinomial. Isso significa que se você pode resolver CIRCUIT-SAT, você pode resolver qualquer problema em NP.
Uma vez que CIRCUIT-SAT foi estabelecido como NP-Completo, ele se tornou a base para provar a NP-Completude de inúmeros outros problemas através de reduções polinomialmente eficientes.
5. Exemplos Clássicos de Reduções entre Problemas NP-Completos
A seguir, exploraremos algumas das reduções mais famosas que estabelecem a NP-Completude de problemas cruciais. Esses exemplos são frequentemente abordados em provas e concursos.
5.1. SAT (Satisfatibilidade de Fórmulas Booleanas)
Definição: Dada uma fórmula booleana
φcom variáveis lógicas e operadores (AND, OR, NOT, etc.), existe uma atribuição de valores (Verdadeiro/Falso ou 0/1) para as variáveis que tornaφverdadeira?.SAT ∈ NP: Sim, o certificado é a própria atribuição de valores, e a verificação (substituir e avaliar a fórmula) é polinomial.
SAT ∈ NP-Difícil (CIRCUIT-SAT ≤P SAT):
A ideia: Transformar um circuito lógico
Cem uma fórmula booleanaftal queCé satisfatível se e somente sefé satisfatível.Processo: Para cada fio no circuito
C(entradas, saídas de portas, etc.), cria-se uma variável booleanaxᵢ. Para cada porta lógica no circuito, cria-se uma cláusula que força a variável de saída a ter o valor correto em relação às variáveis de entrada (ex: para uma porta AND com entradasx₁, x₂e saídax₄, cria-sex₄↔(x₁ ∧ x₂)). A fórmula finalfé a conjunção de todas essas cláusulas de porta, mais uma cláusula que afirma que o fio de saída final do circuito deve ser verdadeiro.Essa transformação é polinomial, provando que SAT é NP-Completo.
5.2. 3-CNF-SAT (Satisfatibilidade de Fórmulas em Forma Normal Conjuntiva com 3 Literais)
Definição: Uma fórmula está em 3-CNF se é uma conjunção de cláusulas, e cada cláusula é uma disjunção de exatamente 3 literais distintas (uma literal é uma variável ou sua negação). O problema é decidir se tal fórmula é satisfatível.
3-CNF-SAT ∈ NP: Similar ao SAT, verificar uma atribuição é polinomial.
3-CNF-SAT ∈ NP-Difícil (SAT ≤P 3-CNF-SAT):
A ideia: Transformar uma fórmula
f_SAT(qualquer SAT) em umaf_3CNF(3-CNF-SAT) equivalente em tempo polinomial.Processo (por etapas):
Transformação T1 (para conjunção de cláusulas com no máximo 3 variáveis): Constrói uma "árvore de avaliação" da fórmula
f_SAT. Cada nó/fio na árvore é representado por uma nova variável. A fórmulaf_T1resultante é uma conjunção de cláusulas de equivalência, onde cada cláusula tem no máximo 3 variáveis.Transformação T2 (para CNF): Substitui cada cláusula de
f_T1por uma equivalente em CNF (Forma Normal Conjuntiva). Como as cláusulas têm no máximo 3 variáveis, a tabela verdade tem tamanho constante, e a conversão para CNF (usando De Morgan, por exemplo) é polinomial.Transformação T3 (para exatamente 3 literais por cláusula): Para cláusulas com menos de 3 literais, introduz novas variáveis e as duplica de forma inteligente para ter exatamente 3 literais, mantendo a satisfatibilidade equivalente. Por exemplo,
(L1)vira(L1 ∨ p ∨ q) ∧ (L1 ∨ p ∨ ¬q) ∧ (L1 ∨ ¬p ∨ q) ∧ (L1 ∨ ¬p ∨ ¬q).(L1 ∨ L2)vira(L1 ∨ L2 ∨ q) ∧ (L1 ∨ L2 ∨ ¬q). Para cláusulas com mais de 3 literais(L1 ∨ L2 ∨ ... ∨ Lk)(k > 3), introduz variáveis auxiliares para dividi-la em várias cláusulas de 3 literais.
Todas as etapas são polinomialmente computáveis, provando que 3-CNF-SAT é NP-Completo.
5.3. CLIQUE
Definição: Dada um grafo não-direcionado
Ge um inteirok,Gcontém uma clique de tamanho pelo menosk? (Uma clique é um subgrafo completo, onde todos os pares de vértices estão conectados por uma aresta).CLIQUE ∈ NP: O certificado é o conjunto de
kvértices. A verificação é polinomial (checar se todos estão conectados).CLIQUE ∈ NP-Difícil (3-CNF-SAT ≤P CLIQUE):
A ideia: Transformar uma fórmula
fem 3-CNF commcláusulas em um grafoGe um parâmetrok=m, tal quefé satisfatível se e somente seGtem uma clique de tamanhom.Construção de
G:Para cada cláusula
Cᵢemf, crie 3 vértices no grafoG, um para cada literal da cláusula (v_i,1,v_i,2,v_i,3).Crie uma aresta entre dois vértices
uevse eles satisfazem duas condições:uevvêm de cláusulas diferentes.As literais correspondentes a
uevnão são complementares (ex: não pode serxe¬x).
Prova da equivalência: Se
fé satisfatível, existe uma atribuição que torna pelo menos uma literal verdadeira em cada cláusula. Escolhendo um vértice correspondente a uma literal verdadeira de cada cláusula, formamos um conjunto demvértices. Por construção, esses vértices formam uma clique. Reciprocamente, se há uma clique de tamanhomemG, ela deve conter um vértice de cada cláusula. Atribuir "verdadeiro" às literais correspondentes a esses vértices da clique torna a fórmula satisfatível.A construção é polinomial, provando a NP-Completude de CLIQUE.
5.4. VERTEX COVER (Cobertura de Vértices)
Definição: Dado um grafo
Ge um inteirok,Gcontém uma cobertura de vértices de tamanho no máximok? (Um conjunto de vérticesSé uma cobertura se toda aresta emGtem pelo menos uma de suas extremidades emS).VERTEX COVER ∈ NP: O certificado é o conjunto de
kvértices. A verificação (checar todas as arestas) é polinomial.VERTEX COVER ∈ NP-Difícil (CLIQUE ≤P VERTEX COVER):
A ideia: Baseia-se em uma relação fundamental: Um conjunto de vértices
Sé uma clique em um grafoGse e somente se o conjunto de vértices remanescentesV \ Sé uma cobertura de vértices no grafo complementarG'. O grafo complementarG'tem o mesmo conjunto de vértices queG, mas uma aresta existe emG'se e somente se não existia emG.Construção: Dada uma instância
〈G, k〉para CLIQUE, transforme-a em〈G', |V| - k〉para VERTEX COVER.Prova da equivalência:
Se
Gtem uma cliqueKde tamanhok, entãoC = V \ Knão tem arestas internas emG. Isso significa que todas as arestas emGtêm pelo menos uma extremidade emC. Consequentemente,Cé uma cobertura emG'de tamanho|V| - k. (Nota: A fonte tem uma pequena discrepância, indicandoCcomo cobertura emG, mas o teorema é queV-Sé VC emGcomplementar). A redução de Kleinberg e Tardos (Fonte 1) afirma:Sé um conjunto independente se e somente seV-Sé um vértice-cobertura. EIndependent Seté NP-completo. A equivalênciaCLIQUE <=P VERTEX COVERusa o complemento do grafo. Uma clique emGé um conjunto independente emG'e vice-versa. E um conjunto independenteSem um grafo é um vértice-coberturaV \ Sem outro. A prova de Miyazawa ( em português) é mais clara:Ué uma clique de tamanhokemGse e somente seV - Ué uma cobertura de vértices de tamanhon-kemG(o complemento).Se
G'tem uma coberturaC'de tamanho|V| - k, entãoK' = V \ C'é um conjunto sem arestas emG'(independent set emG'). Isso significa queK'é uma clique emGde tamanhok.
Essa redução polinomial estabelece a NP-Completude de VERTEX COVER.
5.5. INDEPENDENT SET (Conjunto Independente)
Definição: Dado um grafo
Ge um inteirok,Gcontém um conjunto independente (ou estável) de tamanho pelo menosk? (Um conjunto de vérticesSé independente se não há arestas entre quaisquer dois vértices emS).INDEPENDENT SET ∈ NP: O certificado é o conjunto de
kvértices. A verificação (checar ausência de arestas) é polinomial.INDEPENDENT SET ∈ NP-Difícil (VERTEX COVER ≤P INDEPENDENT SET):
A ideia: É diretamente ligada à relação entre conjunto independente e cobertura de vértices. Um conjunto
Sé um conjunto independente em um grafoGse e somente se seu complementoV \ Sé uma cobertura de vértices emG.Construção: Dada uma instância
〈G, k〉para VERTEX COVER, transforme-a em〈G, |V| - k〉para INDEPENDENT SET.Prova: Se
Gtem uma cobertura de vérticesCde tamanhok, entãoV \ Cé um conjunto independente de tamanho|V| - k. Reciprocamente, seGtem um conjunto independenteSde tamanhok, entãoV \ Sé uma cobertura de vértices de tamanho|V| - k.Portanto, Independent Set e Vertex Cover são equivalente difíceis.
5.6. SET COVER (Cobertura de Conjuntos)
Definição: Dado um universo
Ude elementos, e uma coleçãoS₁,..., Smde subconjuntos deU, existe uma subcoleção de no máximokdesses conjuntos cuja união é igual aU?.SET COVER ∈ NP: O certificado é a lista dos
kconjuntos escolhidos. A verificação (checar se eles cobremU) é polinomial.SET COVER ∈ NP-Difícil (VERTEX COVER ≤P SET COVER):
A ideia: Transformar um problema de cobertura de vértices em um problema de cobertura de conjuntos.
Construção: Dada uma instância
〈G=(V,E), k〉para VERTEX COVER:Defina o universo
Ucomo o conjunto de todas as arestas deG(U = E).Para cada vértice
u ∈ V, crie um conjuntoS_uque contém todas as arestas adjacentes au.
Prova da equivalência: Se existe uma coleção de
kconjuntosS_u1, ..., S_ukque cobreU, então os vérticesu₁, ..., ukformam uma cobertura de vértices de tamanhok. Reciprocamente, seu₁, ..., uké uma cobertura de vértices de tamanhok, então os conjuntosS_u1, ..., S_ukcobremU.A construção é polinomial, provando a NP-Completude de SET COVER.
5.7. HAM-CYCLE (Ciclo Hamiltoniano)
Definição: Dado um grafo
G,Gcontém um ciclo hamiltoniano (passa por cada vértice exatamente uma vez)?.HAM-CYCLE ∈ NP: O certificado é a sequência de vértices do ciclo. A verificação é polinomial.
HAM-CYCLE ∈ NP-Difícil (VERTEX COVER ≤P HAM-CYCLE):
A ideia: Construir um grafo
G'a partir deGek(parâmetro de VERTEX COVER) de tal forma queGtem uma cobertura de vértices de tamanhokse e somente seG'tem um ciclo hamiltoniano. Esta redução é notoriamente complexa e envolve a construção de "widgets" (subestruturas de grafo).Cada aresta de
Gé mapeada para um "widget"W_uvemG'. Os vértices deGse tornam "séries" de widgets conectados emG'. São introduzidoskvértices "seletores" que conectam as pontas dessas séries.A complexidade de
G'é polinomial no tamanho deG. Essa prova estabelece a NP-Completude de HAM-CYCLE.
5.8. TSP (Problema do Caixeiro Viajante - Versão de Decisão)
Definição: Dado um grafo completo com custos nas arestas e um custo máximo
k, existe um tour que visita cada cidade exatamente uma vez com custo total no máximok?.TSP ∈ NP: O certificado é o tour. A verificação (somar custos e checar se visita todos os vértices) é polinomial.
TSP ∈ NP-Difícil (HAM-CYCLE ≤P TSP):
A ideia: Transformar uma instância de Ciclo Hamiltoniano em uma instância de Caixeiro Viajante.
Construção: Dada uma instância
G = (V,E)para HAM-CYCLE, construa uma instância(G', c, k)para TSP:V'é o mesmo queV(as cidades são os vértices).G'é um grafo completo sobreV(todas as cidades conectadas).Defina a função de custo
c(u,v):c(u,v) = 0se a aresta{u,v}existe emE(do grafo originalG).c(u,v) = 1se a aresta{u,v}não existe emE.
Defina o custo máximo
k = 0.
Prova da equivalência:
Se
Gtem um ciclo hamiltoniano, esse ciclo usa apenas arestas com custo 0 emG'. Portanto,G'tem um tour de custo 0.Se
G'tem um tour de custo 0, todas as arestas desse tour devem ter custo 0, o que significa que todas elas estavam presentes no grafo originalG. Logo,Gé hamiltoniano.
A construção é polinomial, provando a NP-Completude de TSP.
5.9. SUBSET-SUM (Soma de Subconjuntos)
Definição: Dado um conjunto
Sde inteiros positivos e um inteirot, existe um subconjuntoS' ⊆ Scuja soma dos elementos é exatamentet?.SUBSET-SUM ∈ NP: O certificado é o subconjunto
S'. A verificação (somar os elementos e comparar comt) é polinomial.SUBSET-SUM ∈ NP-Difícil (3-CNF-SAT ≤P SUBSET-SUM):
A ideia: Transformar uma fórmula
φem 3-CNF em um conjunto de númerosSe um alvottal queφé satisfatível se e somente se um subconjunto deSsomat.Construção: Esta é uma redução sofisticada que cria números em uma base grande (tipo base 10 ou outra) onde cada "dígito" representa uma variável ou uma cláusula.
Para cada variável
xᵢemφ, cria-se dois númerosvᵢev'ᵢ. O dígito associado axᵢé 1 paravᵢev'ᵢ, e 0 para outras variáveis. Os dígitos associados às cláusulas (Cⱼ) são 1 se a literalxᵢou¬xᵢaparece emCⱼ.Para cada cláusula
Cⱼ, criam-se númerossⱼes'ⱼque só têm dígitos não-zero na colunaCⱼ(1 ou 2, respectivamente).O alvo
ttem 1s nas colunas de variáveis e 4s nas colunas de cláusulas.
Prova da equivalência: A prova mostra que a soma dos números é construída de tal forma que "não há vai um" entre as colunas de variáveis e cláusulas, permitindo que a escolha de números em
S(que somamt) corresponda diretamente à atribuição de valores (Verdadeiro/Falso) que satisfazem a fórmula.A construção é polinomial, provando a NP-Completude de SUBSET-SUM.
5.10. Outros Problemas NP-Completos Conhecidos
Richard Karp (1972) identificou 21 problemas NP-Completos logo após Cook, solidificando a teoria. A lista inclui:
Satisfatibilidade em forma normal conjuntiva (SAT)
Programação Inteira 0-1
Clique
Empacotamento de Conjuntos
Cobertura de Vértices
Cobertura de Conjuntos
3-Satisfatibilidade (3-CNF-SAT)
Coloração de Grafos
Caminho Hamiltoniano
Problema do Caixeiro Viajante (TSP)
Partição
Mochila (Knapsack)
Conjunto Dominante
6. Reduções na Prática e Exceções para Concursos Públicos
6.1. Reduções: Teoria vs. Prática
É crucial entender que as reduções polinomialmente eficientes são ferramentas teóricas poderosíssimas para classificar problemas, mas geralmente não são algoritmos práticos para resolver problemas.
Vantagem Teórica: Permitem provar que problemas são igualmente difíceis (ou que um é mais difícil que outro) e estabelecer a NP-Completude.
Desvantagem Prática:
Perda de Conhecimento de Domínio: A transformação de um problema para outro pode fazer com que se perca informações e estruturas específicas do problema original que poderiam ser exploradas por algoritmos mais diretos.
Aumento de Tamanho/Complexidade: Embora a transformação seja polinomial, a instância transformada pode ser consideravelmente maior ou mais complexa, tornando o algoritmo resultante mais lento do que uma abordagem direta para o problema original.
Algoritmos Existentes: Muitas vezes, existem algoritmos mais eficientes e diretos para um problema
Ydo que reduzi-lo a um problemaXe resolvê-lo lá.
6.2. Exceções: Problemas Similares que Não São NP-Completos
Alguns problemas podem parecer NP-Completos à primeira vista, mas, na verdade, têm algoritmos eficientes (estão na classe P). É importante conhecer essas "exceções" para concursos:
2-CNF-SAT (2-SAT): Similar ao 3-CNF-SAT, mas cada cláusula contém no máximo 2 literais. Embora o 3-CNF-SAT seja NP-Completo, o 2-SAT pode ser resolvido em tempo polinomial.
MAX-2-SAT: Dada uma fórmula em 2-SAT e um inteiro
k, decidir se é possível satisfazer pelo menoskcláusulas. Embora 2-SAT esteja em P, o MAX-2-SAT é NP-Completo. Isso mostra que pequenas variações na definição de um problema podem alterar drasticamente sua complexidade.Caminho Hamiltoniano em grafos orientados acíclicos: Enquanto o problema geral do Caminho Hamiltoniano é NP-Completo, em grafos orientados acíclicos (DAGs), ele pode ser resolvido em tempo polinomial.
6.3. Redução de Polinômio em Cenários Atuais (Programação Algébrica)
Embora o foco principal seja a complexidade computacional, o termo "redução" continua a evoluir em campos avançados. Recentemente, surgiu um método para reduzir programas algébricos a programas polinomiais.
Programas Algébricos: Problemas de otimização ou viabilidade onde os objetivos ou restrições são funções algébricas (definidas como zeros de polinômios multivariados, podendo incluir raízes, quocientes, etc.).
A Nova Redução: O método propõe uma reformulação sistemática de programas algébricos em programas polinomiais, introduzindo apenas uma única nova variável para cada função algébrica distinta, em vez de uma variável para cada radical distinto (abordagem "ingênua").
Passos:
Encontrar um polinômio definidor: Para cada expressão radical, encontra-se um polinômio do qual ela é uma raiz.
Isolar a função algébrica: Introduzir desigualdades polinomiais adicionais para garantir que a raiz escolhida seja a que representa a função algébrica original, distinguindo-a de outras raízes do mesmo polinômio definidor.
Essa técnica é relevante porque a complexidade dos algoritmos de otimização polinomial depende crucialmente do número de variáveis. Reduzir o número de variáveis pode levar a ganhos significativos de desempenho (até 50x em exemplos testados). Isso demonstra como o conceito de "redução" continua a ser uma área ativa de pesquisa para tornar problemas computacionalmente desafiadores mais tratáveis.
7. Preparação para Concursos Públicos: Pontos Chave
Para quem se prepara para concursos públicos, o domínio da Redução Polinomial na complexidade computacional é frequentemente cobrado. Priorize os seguintes pontos:
Definições Claras:
P, NP, co-NP, NP-Difícil, NP-Completo. Entenda as definições e as relações hierárquicas entre elas (
P ⊆ NP,NP-Completo ⊆ NP-Difícil).
O Problema P = NP: Entenda o que significa a pergunta e suas implicações. Saiba que é um problema em aberto.
Conceito de Certificado: Compreenda o que é um certificado e por que ele é fundamental para a classe NP.
Redução Polinomial (≤P):
Sua definição formal e intuitiva.
A propriedade de transitividade.
A diferença entre redução de Karp e Turing (e por que Karp é crucial para NP-Completude).
A direção correta da redução para provar NP-Completude (sempre de um problema conhecido NP-Completo para o novo problema).
Estratégia para Provar NP-Completude: Os dois passos (
∈ NPeNP-Difícilvia redução).Problemas Clássicos NP-Completos: Conheça os principais exemplos e, idealmente, as ideias por trás de suas reduções mais famosas:
CIRCUIT-SAT (primeiro, base de tudo).
SAT e 3-CNF-SAT.
CLIQUE e VERTEX COVER (redução entre si, via grafo complementar).
INDEPENDENT SET (equivalência com VERTEX COVER).
HAM-CYCLE (Ciclo Hamiltoniano) e TSP (Caixeiro Viajante).
SUBSET-SUM (Soma de Subconjuntos).
Exceções e Casos Especiais: Lembre-se que pequenas variações podem mudar a complexidade do problema (ex: 2-SAT em P, mas MAX-2-SAT em NP-Completo).
Perguntas Frequentes (FAQ) sobre Redução de Polinômio e Complexidade Computacional
1. O que é um "problema de decisão"?
Um problema de decisão é um tipo de problema computacional que tem uma resposta simples de SIM ou NÃO para qualquer instância dada. Por exemplo, "Este grafo contém um ciclo hamiltoniano?" é um problema de decisão.
2. O que é um "certificado" em NP?
Em problemas NP, um certificado é uma evidência ou uma solução proposta que, se a resposta para a instância for "SIM", pode ser usada para verificar a validade dessa resposta em tempo polinomial. Por exemplo, para o problema do Ciclo Hamiltoniano, o certificado seria a própria sequência de vértices que forma o ciclo.
3. O problema P = NP já foi resolvido?
Não. P = NP é uma das maiores questões não resolvidas na Ciência da Computação e na matemática. A maioria dos cientistas da computação acredita que P ≠ NP, mas ainda não há uma prova formal.
4. Qual a diferença entre um problema NP-Completo e um problema NP-Difícil?
Um problema NP-Difícil é aquele ao qual todos os problemas em NP podem ser reduzidos polinomialmente. Isso significa que ele é pelo menos tão difícil quanto qualquer problema em NP. Um problema NP-Difícil não precisa necessariamente pertencer à classe NP.
Um problema NP-Completo é um problema que satisfaz duas condições: 1) ele está na classe NP (ou seja, sua solução pode ser verificada em tempo polinomial) E 2) ele é NP-Difícil. Os problemas NP-Completos são considerados os problemas "mais difíceis" dentro da classe NP.
5. Por que as reduções polinomiais são tão importantes para a complexidade computacional?
As reduções polinomiais são cruciais porque permitem comparar a dificuldade relativa entre problemas computacionais. Elas são a ferramenta fundamental para:
Provar a NP-Completude: Ao reduzir um problema NP-Completo conhecido a um novo problema, podemos provar que o novo problema é NP-Completo.
Classificar Problemas: Permitem organizar os problemas em classes de complexidade e entender o quão eficientemente eles podem ser resolvidos (ou não).
Implicar Resultados: Se um problema X é polinomialmente redutível a Y, e Y é facilmente resolúvel, então X também é. Inversamente, se X é provadamente difícil, e Y é polinomialmente redutível a X, então Y também é difícil.
6. A definição de NP-Completo da Enciclopédia Britannica está correta?
Não. A Enciclopédia Britannica, em uma de suas definições citadas, descreve NP-completude como "qualquer uma das classes de problemas computacionais para os quais nenhum algoritmo de solução eficiente foi encontrado". Esta é uma definição incorreta e amadora. Ela não captura a formalidade das classes de complexidade, ignora a diferença entre NP-Hardness e NP-Completude, e falha em mencionar a crucial propriedade de redutibilidade polinomial.
Conclusão
A Redução de Polinômio, em seu sentido mais abrangente, é um pilar da computação moderna. Desde a simples simplificação de expressões algébricas até as complexas Reduções Polinomiais na Teoria da Complexidade Computacional, este conceito nos permite organizar, classificar e, em última instância, compreender a dificuldade inerente dos problemas que tentamos resolver com computadores.
Dominar as reduções é fundamental para qualquer estudante de Ciência da Computação, e essencial para profissionais que buscam otimizar algoritmos e para candidatos que almejam sucesso em concursos públicos. Esperamos que este guia completo e didático tenha iluminado os caminhos para sua compreensão, tornando a complexidade um pouco mais simples e acessível. Continue explorando, questionando e construindo o futuro da computação!