Seja A redutível a B, isto é, . Assim, a máquina de Turing aceitar tem acesso a um Oracle para . Permita que a máquina de Turing que aceita seja e o oráculo para seja . Os tipos de reduções:
Redução de Turing: pode fazer várias consultas para . O B
Redução de Karp: Também chamada de "redução de Turing no tempo polinomial": a entrada para deve ser construída em tempo polifônico. Além disso, o número de consultas para deve ser limitado por um polinômio. Nesse caso: . O B P A = P B
Redução de Turing em muitos: pode fazer apenas uma consulta para , durante a última etapa. Portanto, a resposta do oráculo não pode ser modificada. No entanto, o tempo necessário para construir a entrada para não precisa ser limitado por um polinômio. Equivalentemente: ( denota redução de muitos) O B O B ≤ m
se uma função calculável tal que f (x) \ em B \ sse x \ em A .f : Σ * → Σ * f ( x ) ∈ B
Redução de cozimento: Também chamada de "redução do número polinomial do número um": Uma redução do número um em que o tempo necessário para construir uma entrada para deve ser limitado por um polinômio. Equivalentemente: ( denotando redução de muitos)
se uma função computável em tempo polivalente modo que .
Redução parcimoniosa: Também chamado de "tempo polinomial one-one redução": redução de um cozinheiro, onde cada instância de mapeado para uma instância única de . Equivalentemente: ( denota redução parcimoniosa)
se uma bijeção computável em tempo poligonal modo que .
Essas reduções preservam o número de soluções. Portanto, .
Podemos definir mais tipos de reduções limitando o número de consultas do Oracle, mas, excluindo-as, alguém poderia me dizer se obtive a nomenclatura para os diferentes tipos de reduções usados corretamente. Os problemas NP-completos são definidos com respeito à redução de Cook ou redução parcimoniosa? Alguém pode gentilmente dar um exemplo de um problema que é NP-completo sob Cook e não sob redução parcimoniosa.
Se não estou errado, a classe # P-Complete é definida em relação às reduções de Karp.