¿Qué es la reducción en la teoría de la complejidad computacional?

La idea detrás de una reducción es que tienes dos problemas A y B. Sabes cómo resolver B, pero estás atascado en A. Luego te das cuenta de que hay un truco que puedes usar para transformar las instancias del problema A en instancias del problema. B de tal manera que pueda obtener la solución a la instancia del problema original de la instancia del problema transformado.

Las reducciones son importantes para la teoría de la complejidad computacional porque si puede resolver el problema A usando un algoritmo para el problema B, entonces es razonable decir que el problema B es al menos tan difícil como el problema A. Eso le da un pedido anticipado sobre la clase de todos los problemas, y puede convertirlo en un orden parcial identificando conjuntos de problemas que se reducen entre sí.

Creo que la reducción canónica es de SAT a 3SAT. Si recuerda cómo funciona eso, podrá comprender los conceptos sin demasiados problemas.

Como Justin dijo correctamente, las reducciones se trata de usar el hecho de que conoces un algoritmo para que un problema resuelva otro. Digamos que quiere resolver A, pero no está seguro de cómo hacerlo. Si puede reducir A a B, puede usar el algoritmo de B para resolver instancias de A. En cierto sentido, ha demostrado que la facilidad de B puede usarse para mostrar que A es tan fácil. Obviamente, A no puede ser más difícil que B, porque como sabes que hay un algoritmo eficiente B (es decir, B es fácil) y puedes usar ese algoritmo para que B resuelva A, entonces si A era realmente más difícil que A, entonces tal el algoritmo para B no debería existir, o al menos la reducción no debería existir. En cierto sentido, usted mostró que A es tan fácil como B:

[matemáticas] A \ leq_R B [/ matemáticas]

Así es como se usan las reducciones en el campo de los algoritmos. es decir, cómo resolver problemas y elaborar algoritmos para resolver los problemas de interés.

Pero la teoría de la complejidad computacional se trata más de mostrar dureza. es decir, que es muy probable que no exista un algoritmo eficiente para su problema. ¿Cómo haces eso? Bueno, en este caso, suponga que tiene un problema, diga A, que se sabe que es difícil. Pero estamos interesados ​​en resolver B. Si reducimos A a B, hemos demostrado que si existe un algoritmo eficiente para B, entonces existe un algoritmo eficiente para A. es decir

[matemáticas] A \ rightarrow_R B [/ matemáticas]

Pero si A es difícil, entonces se supone que no existe un algoritmo para A. Por lo tanto, no puede existir ningún algoritmo para B (si existiera un algoritmo eficiente para B, entonces contradiría el hecho de que A es difícil). Por lo tanto, mostramos que B es difícil. En cierto sentido, dijimos, B es tan difícil como A:

[matemáticas] A \ leq_R B [/ matemáticas]

Si no fuera tan difícil como A, estaríamos transformando un problema, que se sabe que es difícil, en un problema más fácil, que no tiene sentido (si por alguna razón, la reducción fue válida y, de hecho, B tenía un algoritmo eficiente, entonces demostró que P = NP, es decir, demostró que cada problema que es difícil en realidad … ¡es fácil! Lo que se cree que es bastante improbable). Por lo tanto, B tiene que ser difícil.

Obviamente, el algoritmo de reducción también tiene que ser eficiente para que esto se aplique.

More Interesting

¿Cuál es la diferencia entre algoritmo no determinista y aproximado?

¿Cuáles son los principios básicos en trigonemetría que debo saber?

Cómo seleccionar aleatoriamente una palabra de un archivo que contiene 1,000 palabras (1 palabra por línea) y mostrarla en un programa C ++

Cómo demostrar que existe un conjunto de movimientos para que todos los elementos de la matriz se conviertan en 0, donde en un movimiento tienes que elegir dos elementos distintos de cero y restar uno de los dos dada una condición

No entiendo correctamente la cita de Alan Kay sobre sus antecedentes matemáticos. ¿Alguien puede explicarlo en términos simples?

¿Dónde puedo encontrar un tutorial simplificado para Atkin's Sieve?

¿Cuáles son las cuatro aplicaciones prácticas de la teoría de conjuntos en informática?

¿Cuáles son los cursos matemáticos recomendados para el aprendizaje automático y el procesamiento de big data?

Cómo construir una computadora fuera del agua, y cómo ayuda esto con Navier-Stokes

¿Qué innovaciones en la teoría de CS de los últimos 10 años han tenido un impacto fuera de la academia? Si iba a hacer un doctorado en CS, ¿debería hacer teoría en lugar de aprendizaje automático?

Si eligiera un número al azar en la recta numérica, ¿tendría mayores posibilidades de ser racional o irracional?

¿La orientación a objetos seguiría siendo el paradigma de programación dominante en un futuro en el que las computadoras personales suelen tener 10 o 100 núcleos?

¿Cuántas matemáticas requiere la Olimpiada Internacional de Informática (IOI)?

¿Qué tan importante es la teoría de probabilidad clásica para la computación cuántica?

¿Podemos probar P = NP 'P versus NP problem'?