Algoritma eksponensial waktu yang tepat untuk pemrograman 0-1

10

Apakah ada algoritma yang dikenal untuk masalah berikut yang mengalahkan algoritma naif?

Input: Sistem dari ketidaksetaraan linear m .Axbm

Keluaran: Solusi yang layak jika ada.x{0,1}n

Asumsikan bahwa dan b memiliki entri bilangan bulat. Saya tertarik pada batasan terburuk.Ab

Austin Buchanan
sumber

Jawaban:

14

Jika adalah superlinear, algoritma seperti itu akan menyangkal Hipotesis Waktu Eksponensial Kuat, karena rumus dalam bentuk normal konjungtif adalah kasus khusus dari pemrograman 0-1 dan Lemma Sparsifikasi memungkinkan kita untuk mengurangi k -SAT menjadi CNF-SAT pada banyak klausa linier .mk

Namun, ada algoritma karena Impagliazzo, Paturi, dan saya sendiri yang dapat memecahkan sistem ketidaksetaraan jika jumlah kabel, yaitu jumlah koefisien bukan nol dalam adalah linear. Khususnya, jika jumlah kabel adalah c n , algoritma berjalan dalam waktu 2 ( 1 - s ) n , di mana s = 1Acn2(1s)n .s=1cO(c2)

Stefan Schneider
sumber
1

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/2Axb

A0x0+A1x1b,

atau yang setara,

A0x0bA1x1.

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/2bA1x1

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

Sekarang masalahnya menjadi

S,TZm2n/2sStTst

sitii

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


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

DW
sumber
1
Algoritma dari jawaban saya juga mengurangi masalah vektor yang dijelaskan dalam jawaban Anda menggunakan metode yang sama, yaitu membagi variabel dan daftar semua tugas mereka.
Stefan Schneider
2
2O(m)