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/2Ax≤b
A0x0+A1x1≤b,
o equivalente,
A0x0≤b−A1x1.
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/2b−A1x1
T={b−A1x1:x1∈{0,1}n/2}.
Ahora el problema se vuelve
Dados los conjuntos de tamaño , ¿existe y tal que ?S,T⊆Zm2n/2s∈St∈Ts≤t
(Aquí es tomada por puntos, es decir, es necesario que para toda .)≤si≤tii
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)m−1)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 , i ≤ 0 x i = 0 xm=1m=1xi=1A1,i≤0xi=0x