Jika cukup kecil, Anda dapat melakukan lebih baik daripada algoritma naif, yaitu lebih baik dari 2 n waktu. Di sini "cukup kecil" berarti bahwa m lebih kecil dari sesuatu seperti n / lg n . Waktu yang berjalan masih akan eksponensial - misalnya, mungkin 2 n / 2 waktu - tetapi akan lebih cepat daripada algoritma naif.m2nmn/lgn2n/2
Kebetulan, sepertinya hal ini memungkinkan kita untuk memecahkan masalah dalam lebih cepat dari waktu untuk beberapa kasus di mana matriks A memiliki sejumlah super-linear entri. Saya tidak tahu bagaimana mengatasinya dengan jawaban lain yang disediakan di sini. Akibatnya, Anda harus memeriksa jawaban saya dengan hati-hati: ini mungkin mengindikasikan bahwa saya telah melakukan kesalahan serius di suatu tempat.2nA
Pendekatan dasar: tulis , di mana x 0 memegang komponen n / 2 pertama dari x dan x 1 memegang komponen n / 2 terakhir ; dan juga A = ( A 0 , A 1 ) , di mana A 0 memiliki kolom kiri n / 2 dari A dan A 1 di kanan nx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1 kolom. Sekarang A x ≤ b dapat ditulis ulang dalam bentukn/2Ax≤b
A0x0+A1x1≤b,
atau yang setara,
A0x0≤b−A1x1.
Hitung semua kemungkinan untuk A 0 x 0 , dan biarkan S menyatakan himpunan nilai yang mungkin, yaitu,2n/2A0x0S
S={A0x0:x0∈{0,1}n/2}.
T2n/2b−A1x1
T={b−A1x1:x1∈{0,1}n/2}.
Sekarang masalahnya menjadi
S,T⊆Zm2n/2s∈St∈Ts≤t
≤si≤tii
O(2n/2(n/2)m−1)mn/lgn2n
m=1m=1xi=1A1,i≤0xi=0x