Algoritmos exactos de tiempo exponencial para programación 0-1

10

¿Existen algoritmos conocidos para el siguiente problema que superen al algoritmo ingenuo?

Entrada: Un sistema de desigualdades lineales.mAxbm

Salida: una solución factible si existe.x{0,1}n

Supongamos que y tienen entradas enteros. Estoy interesado en los peores casos.bAb

Austin Buchanan
fuente

Respuestas:

14

Si es superlineal, dicho algoritmo refutaría la hipótesis del tiempo exponencial fuerte, ya que las fórmulas en forma conjuntiva normal son un caso especial de programación 0-1 y el Lema de dispersión nos permite reducir -SAT a CNF-SAT en muchas cláusulas linealmente .kmk

Sin embargo, existe un algoritmo debido a Impagliazzo, Paturi y a mí que puede resolver dicho sistema de desigualdades si el número de cables, es decir, el número de coeficientes distintos de cero en es lineal. En particular, si el número de cables es , el algoritmo se ejecuta en el tiempo , donde .c n 2 ( 1 - s ) n s = 1Acn2(1s)ns=1cO(c2)

Stefan Schneider
fuente
1

Si es lo suficientemente pequeño, puede hacerlo mejor que el algoritmo ingenuo, es decir, mejor que tiempo. Aquí "lo suficientemente pequeño" significa que es más pequeño que algo como . El tiempo de ejecución seguirá siendo exponencial, por ejemplo, podría ser tiempo, pero será más rápido que el algoritmo ingenuo.2 n m n / lg n 2 n / 2m2nmn/lgn2n/2

Por cierto, parece que esto nos permite resolver el problema en más de tiempo en algunos casos en los que la matriz tiene un número de entradas súper lineal. No sé cómo cuadrar eso con la otra respuesta proporcionada aquí. En consecuencia, debe verificar mi respuesta cuidadosamente: podría indicar que he cometido un grave error en alguna parte. A2nA


El enfoque básico: escribir , donde contiene los primeros componentes de y contiene los últimos componentes; y de forma similar , donde tiene las columnas izquierdas de y las columnas derechas . Ahora puede reescribirse en el formulariox 0 n / 2 x x 1 n / 2 A = ( A 0 , A 1 ) A 0 n / 2 A A 1 n / 2 A x bx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1n/2Axb

A0x0+A1x1b,

o equivalente,

A0x0bA1x1.

Enumere todas las posibilidades para , y deje que denote el conjunto de valores posibles, es decir,2n/2A0x0S

S={A0x0:x0{0,1}n/2}.

Del mismo modo, enumere el conjunto de todas las posibilidades para , es decir,T2n/2bA1x1

T={bA1x1:x1{0,1}n/2}.

Ahora el problema se vuelve

Dados los conjuntos de tamaño , ¿existe y tal que ?S,TZm2n/2sStTst

(Aquí es tomada por puntos, es decir, es necesario que para toda .)sitii

El último problema se discute en CS.StackExchange , y aparentemente hay un algoritmo que se ejecuta en el tiempo . Si es suficientemente pequeño (digamos, más pequeño que ), entonces se deduce que el tiempo total de ejecución será menor que , según se desee.O(2n/2(n/2)m1)mn/lgn2n


Para ayudar a que este resultado parezca más plausible, aquí hay una intuición muy cruda. Si tomamos el caso extremo donde , por supuesto, esto se puede resolver rápidamente. (En realidad, hay un algoritmo mucho más simple para el caso especial donde : sea si , de lo contrario ; ahora si existe alguna solución factible, entonces esta será una. )m = 1 x i = 1 A 1 , i0 x i = 0 xm=1m=1xi=1A1,i0xi=0x

DW
fuente
1
El algoritmo de mi respuesta también se reduce al problema vectorial descrito en su respuesta usando el mismo método, es decir, dividir las variables y enumerar todas sus asignaciones.
Stefan Schneider
2
Existen algoritmos para el problema general de programación de enteros cuyo tiempo de ejecución tiene una dependencia de la dimensión y una dependencia polinómica de todo lo demás. Ver dl.acm.org/citation.cfm?id=380857 . 2O(m)
Sasho Nikolov