¿Clases de complejidad relacionadas con el listado de todas las soluciones?


15

Estaba leyendo una pregunta en Stack Overflow preguntando si era NP difícil enumerar todos los ciclos simples en un gráfico que contiene un nodo particular y se me ocurrió que no podía pensar en ninguna clase de complejidad existente que fuera adecuada para hablando de problemas de la forma "enumere todas las soluciones a este problema". La clase NP en cierto sentido consiste en problemas que preguntan si existe al menos una solución, la clase FNP pide producir una solución única y la clase #P pide contar cuántas soluciones hay, pero ninguna de ellas trata con la complejidad de enumerar exhaustivamente todas las soluciones posibles.

¿Existe una clase de complejidad para describir problemas que tienen la forma "dado un predicado computable de tiempo polinómico y una cadena , enumere todos los para los cuales es verdadero sujeto a [inserte algunos restricciones de complejidad apropiadas]? " Entiendo que puede ser complicado precisar las restricciones dado que el número de soluciones puede ser exponencialmente mayor que el tamaño de la entrada , aunque eso no parece insuperable.P(x,y)xyP(x,y)x


Interesante. Quizás en la práctica, muchos casos de problemas relevantes a menudo tienen un número exponencial de soluciones, si las hay. Las instancias para SAT y CLIQUE, en general, tienen un gran espacio de solución.
chi

3
Aquí hay otro ansatz para formalizar esto. Un problema está en X E (para enumerar X) si hay un algoritmo X con A para que A ( x , i ) devuelva la solución i th (es decir, I th y con P ( x , y ) ) wrt Algunos pedidos. Observe cómo esto es similar a cómo a veces se define RE. Esto evita el tamaño del espacio de la solución y se centra en lo difícil que es encontrar la próxima solución. El costo total está disponible por suma, por supuesto. PXEAA(x,i)iIyP(x,y)
Rafael

3
(Nunca he visto define como una clase , pero ¿estás al tanto del concepto de enumeración con retraso polinomio ?)

@Raphael Esto puede no ser lo que estamos buscando. Por ejemplo, si el mejor algoritmo para tiene que iterar sobre todas las soluciones hasta que encuentre i de ellas y se ejecute en el tiempo Θ ( f ( | x | ) ) , entonces la complejidad que estamos buscando es Θ ( f ( | x | ) ) , pero la suma sugeriría complejidad Θ ( f ( | x | ) 2 ) . UN(X,yo)yoΘ(F(El |XEl |))Θ(F(El |XEl |))Θ(F(El |XEl |)2)
Lieuwe Vinkhuijzen

@RickyDemer Eso es lo que estaba sacudiendo de mis hojas, ¿no? Es bueno saber que hay una formalización establecida.
Raphael

Respuestas:


10

El concepto que está buscando se llama complejidad de enumeración , que es el estudio de la complejidad computacional de enumerar (enumerar) todas las soluciones a un problema (o los miembros de un lenguaje / conjunto). Los algoritmos de enumeración se pueden modelar como un proceso de dos pasos: un paso de precomputación y una fase de enumeración con retraso . Ambos pasos tienen sus propias complejidades de tiempo y espacio (quizás también entropía). En el espíritu general de complejidad, a menudo hay compensaciones entre estos para tener en cuenta.

El paso de precomputación realiza el trabajo necesario antes de enumerar la primera solución. Esto podría implicar encontrar la solución en sí o inicializar una estructura de datos de gran tamaño que reducirá el retraso general entre cada solución.

El retraso es el costo de recursos asociado con el cálculo necesario entre soluciones arbitrarias enumeradas. En otras palabras, el retraso es una medida del espacio y el tiempo necesarios para producir la solución después de la solución i t h . Se dice que los problemas cuyas soluciones que toman tiempo O ( 1 ) para cada enumeración tienen un retraso constante. Se dice que un requerimiento de tiempo O ( p o l y ( n ) ) tiene retraso polinómico.i+1thithO(1)O(poly(n))

Para el problema de enumeración que mencionó específicamente en su pregunta, debe buscar en la clase y sus hermanos relacionados en la sección 2.1 de "Enumeración: Algoritmos y Complejidad" de Johannes Schmidt (Vinculado en la parte inferior).ENUMNP


¿Por qué nos preocupa el tiempo de precomputación y el retraso?

El retraso es muy clave para comprender las verdaderas complejidades de los problemas de enumeración. Enumerar los elementos de (hasta el tamaño n ) y { x : ϕ ( x ) } donde ϕ ( x ) es una fórmula booleana (es decir, SAT) ambos toman tiempo exponencial. Sin embargo, enumerando a través de Σ Σn{x:ϕ(x)}ϕ(x)Σsolo requiere un retraso constante ya que puede pasar por los elementos en algún orden. Por lo que sabemos, el retraso para enumerar soluciones a una instancia de 3SAT podría ser exponencial. Nuestro trabajo como teóricos de la complejidad es captar por qué el último problema es fundamentalmente más difícil (más complejo) que el anterior. Delay hace un muy buen trabajo al mostrar esta diferencia.

Del mismo modo, también necesitamos saber cuánta precomputación se realiza. Podemos reducir el retraso de cualquier problema de enumeración a tiempo y espacio constantes calculando previamente todas las soluciones y almacenándolas en una lista para enumerarlas más adelante. El desafío es encontrar el mejor equilibrio entre los dos recursos.

El orden en el que enumera los elementos también puede influir en la complejidad. Requerir que los resultados se devuelvan en un orden ordenado específico puede requerir que realicemos un cálculo adicional en ambos pasos. Aunque las situaciones en las que cualquier orden es suficiente (siempre y cuando cada elemento enumerado sea único) ciertamente también se estudian.

Hasta donde yo sé, estas clases no suelen tener etiquetas concisas (similares a y N P ). No podemos esperar hacer esto de manera factible ya que las clases de complejidad de enumeración están haciendo malabarismos con 3 o más recursos (precomputación / tiempo total, espacio, retraso y entropía). Simplemente hay demasiadas combinaciones de límites de recursos para repartir nombres especiales. Esto no hace que estas clases sean menos interesantes y tampoco impide que los investigadores lo intenten de todos modos.PNP


Recursos

Esta encuesta (realmente un intento de formalización) debería ayudarlo a comenzar. También demuestra algunos teoremas básicos de jerarquía.

Enumeración: Algoritmos y Complejidad (Johannes Schmidt, 2009)

https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf

Para obtener una enumeración de los resultados en la complejidad de la enumeración, consulte esta compilación comisariada por Kunihiro Wasa. Como está categorizado por tipo de problema, puede encontrar fácilmente una serie de documentos dedicados a enumerar los ciclos de gráficos. Debería ser simple modificar los algoritmos involucrados para considerar solo los ciclos con un nodo dado.

http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html


ΣnO(1)O(1)

1
@j_random_hacker No creo que su pensamiento sea incorrecto, aunque la verdadera respuesta a su pregunta es "depende". Los autores de estos artículos generalmente indican qué modelo de cómputo (cinta regular TM vs. RAM vs. Word RAM) están utilizando. Esta elección cambiará lo que se puede considerar una operación de tiempo constante y lo que no (como incrementar un número o generar una salida). Se presume que esta diferencia desaparecerá tan pronto como su retraso se vuelva polinómico debido a la tesis extendida de Church Turing.
mdxn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.