Algoritmi di tempo esponenziale esatto per programmazione 0-1


10

Esistono algoritmi noti per il seguente problema che battono l'algoritmo ingenuo?

Input: A sistema di m disuguaglianze lineari.Axbm

Output: una soluzione fattibile se ne esiste una.x{0,1}n

Supponiamo che e b abbiano voci intere. Sono interessato ai limiti del caso peggiore.Ab

Risposte:


14

Se è superlineare, un tale algoritmo confuterebbe l'ipotesi del tempo esponenziale forte, poiché le formule in forma normale congiuntiva sono un caso speciale di programmazione 0-1 e il Lemma di sparsificazione ci consente di ridurre k -SAT a CNF-SAT in modo lineare su molte clausole .mk

Tuttavia, esiste un algoritmo dovuto a Impagliazzo, Paturi e me stesso che può risolvere un tale sistema di disuguaglianze se il numero di fili, ovvero il numero di coefficienti diversi da zero in è lineare. In particolare, se il numero di fili è c n , l'algoritmo viene eseguito nel tempo 2 ( 1 - s ) n , dove s = 1Acn2(1s)n .s=1cO(c2)


1

Se è abbastanza piccolo, puoi fare di meglio dell'algoritmo ingenuo, cioè meglio di 2 n volte. Qui "abbastanza piccolo" significa che m è più piccolo di qualcosa come n / lg n . Il tempo di esecuzione sarà comunque esponenziale, ad esempio potrebbe essere 2 n / 2 volte, ma sarà più veloce dell'algoritmo ingenuo.m2nmn/lgn2n/2

Per inciso, sembra che questo ci consenta di risolvere il problema in un tempo superiore a in alcuni casi in cui la matrice A ha un numero super-lineare di voci. Non so come quadrarlo con l'altra risposta fornita qui. Di conseguenza, dovresti controllare attentamente la mia risposta: potrebbe indicare che da qualche parte ho commesso un grave errore.2nA


L'approccio di base: scrittura , dove x 0 detiene i primi n / 2 componenti di x ed x 1 tiene l'ultimo n / 2 componenti; e similmente A = ( A 0 , A 1 ) , dove A 0 ha la sinistra n / 2 colonne di A e A 1 la destra nx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1 colonne. Ora A x b può essere riscritto nel modulon/2Axb

A0x0+A1x1b,

o equivalentemente,

A0x0bA1x1.

Enumera tutte le possibilità per A 0 x 0 e lascia che S indichi l'insieme dei valori possibili, ovvero2n/2A0x0S

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

T2n/2bA1x1

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

Ora il problema diventa

S,TZm2n/2sStTst

sitii

O(2n/2(n/2)m1)mn/lgn2n


m=1m=1xi=1A1,i0xi=0x


1
L'algoritmo della mia risposta si riduce anche al problema vettoriale descritto nella tua risposta usando lo stesso metodo, ovvero dividere le variabili ed elencare tutti i loro compiti.
Stefan Schneider,

2
2O(m)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.