En informática teórica , un problema es aquel que pide una solución en términos de un algoritmo . Por ejemplo, el problema de factorizar
- "Dado un entero positivo n , encuentra un factor primo no trivial de n ."
Es un problema computacional que tiene solución, ya que existen muchos algoritmos conocidos de factorización de enteros . Un problema computacional puede verse como un conjunto de instancias o casos junto con un conjunto, posiblemente vacío, de soluciones para cada instancia/caso. La pregunta entonces es si existe un algoritmo que mapee instancias a soluciones. Por ejemplo, en el problema de factorización , las instancias son los enteros n , y las soluciones son números primos p que son los factores primos no triviales de n . Un ejemplo de un problema computacional sin solución es el problema de la parada . Los problemas computacionales son uno de los principales objetos de estudio en la informática teórica.
A menudo, no solo interesa la mera existencia de un algoritmo, sino también su eficiencia. El campo de la teoría de la complejidad computacional aborda estas cuestiones determinando la cantidad de recursos ( complejidad computacional ) que requiere la resolución de un problema dado y explicando por qué algunos problemas son intratables o indecidibles . Los problemas computacionales resolubles pertenecen a clases de complejidad que definen de forma general los recursos (por ejemplo, tiempo, espacio/memoria, energía, profundidad del circuito) necesarios para calcularlos (resolverlos) con diversas máquinas abstractas . Por ejemplo, las clases de complejidad
- P , problemas que consumen tiempo polinomial para máquinas clásicas deterministas
- BPP , problemas que consumen tiempo polinomial para máquinas clásicas probabilísticas (por ejemplo, computadoras con generadores de números aleatorios).
- BQP , problemas que consumen tiempo polinomial para máquinas cuánticas probabilísticas.
Tanto las instancias como las soluciones se representan mediante cadenas binarias , concretamente elementos de {0, 1} * . [ a ] Por ejemplo, los números naturales suelen representarse como cadenas binarias utilizando codificación binaria . Esto es importante ya que la complejidad se expresa como una función de la longitud de la representación de entrada.
Tipos
problema de decisión
Un problema de decisión es un problema computacional donde la respuesta para cada instancia es sí o no. Un ejemplo de problema de decisión es la prueba de primalidad :
- "Dado un número entero positivo n , determine si n es primo."
Un problema de decisión se representa típicamente como el conjunto de todas las instancias para las cuales la respuesta es sí . Por ejemplo, la prueba de primalidad se puede representar como el conjunto infinito
- L = {2, 3, 5, 7, 11, ...}
Problema de búsqueda
En un problema de búsqueda , las respuestas pueden ser cadenas arbitrarias. Por ejemplo, la factorización es un problema de búsqueda donde las instancias son (representaciones en cadena de) enteros positivos y las soluciones son (representaciones en cadena de) conjuntos de números primos.
Un problema de búsqueda se representa como una relación que consta de todos los pares instancia-solución, llamada relación de búsqueda . Por ejemplo, la factorización se puede representar como la relación.
- R = {(4, 2), (6, 2), (6, 3), (8, 2), (9, 3), (10, 2), (10, 5)...}
que consisten en todos los pares de números ( n , p ), donde p es un factor primo de n .
Problema de conteo
Un problema de conteo pide el número de soluciones a un problema de búsqueda dado. Por ejemplo, un problema de conteo asociado con la factorización es
- "Dado un entero positivo n , cuenta el número de factores primos no triviales de n ."
Un problema de conteo puede representarse mediante una función f de {0, 1} * a los enteros no negativos. Para una relación de búsqueda R , el problema de conteo asociado a R es la función
- f R (x) = |{ y : R ( x , y ) }|.
Problema de optimización
Un problema de optimización consiste en encontrar la "mejor solución posible" entre el conjunto de todas las soluciones posibles a un problema de búsqueda. Un ejemplo es el problema del conjunto independiente máximo :
- "Dado un grafo G , encuentre un conjunto independiente de G de tamaño máximo."
Los problemas de optimización se representan mediante su función objetivo y sus restricciones.
Problema de función
En un problema de función, se espera una única salida (de una función total ) para cada entrada, pero la salida es más compleja que la de un problema de decisión ; es decir, no es simplemente "sí" o "no". Uno de los ejemplos más famosos es el problema del viajante de comercio :
- "Dada una lista de ciudades y las distancias entre cada par de ciudades, encuentra la ruta más corta posible que visite cada ciudad exactamente una vez y regrese a la ciudad de origen."
Es un problema NP-difícil en optimización combinatoria , importante en la investigación operativa y la informática teórica .
Problema de promesa
En la teoría de la complejidad computacional , se suele asumir implícitamente que cualquier cadena en {0, 1} * representa una instancia del problema computacional en cuestión. Sin embargo, a veces no todas las cadenas {0, 1} * representan instancias válidas, y se especifica un subconjunto apropiado de {0, 1} * como el conjunto de "instancias válidas". Los problemas computacionales de este tipo se denominan problemas de promesa .
El siguiente es un ejemplo de un problema de promesa (de decisión):
- "Dado un grafo G , determine si cada conjunto independiente en G tiene un tamaño como máximo de 5, o si G tiene un conjunto independiente de tamaño al menos 10."
En este caso, las instancias válidas son aquellos grafos cuyo tamaño máximo de conjunto independiente es como máximo 5 o como mínimo 10.
Los problemas de promesa de decisión se representan generalmente como pares de subconjuntos disjuntos ( L sí , L no ) de {0, 1} * . Las instancias válidas son aquellas en L sí ∪ L no . L sí y L no representan las instancias cuya respuesta es sí y no , respectivamente.
Los problemas de promesas desempeñan un papel importante en varias áreas de complejidad computacional , incluyendo la dificultad de aproximación , la comprobación de propiedades y los sistemas de prueba interactivos .
Véase también
- Computación lateral , enfoques alternativos para resolver problemas computacionalmente.
- Modelo de computación
- Problema transcomputacional
Notas
- ↑ Consulte las expresiones regulares para ver la notación utilizada.
Referencias
- Even, Shimon ; Selman, Alan L.; Yacobi, Yacov (1984), "La complejidad de los problemas de promesas con aplicaciones a la criptografía de clave pública", Information and Control , 61 (2): 159–173 , doi : 10.1016/S0019-9958(84)80056-X.
- Goldreich, Oded (2008), Complejidad computacional: una perspectiva conceptual , Cambridge University Press , ISBN 978-0-521-88473-0.
- Goldreich, Oded ; Wigderson, Avi (2008), "IV.20 Complejidad computacional", en Gowers, Timothy ; Barrow-Green, June; Leader, Imre (eds.), The Princeton Companion to Mathematics , Princeton University Press, pp. 575–604 , ISBN 978-0-691-11880-2.
- Problemas computacionales
- informática teórica