Các thuật toán chính xác theo thời gian hàm mũ cho lập trình 0-1


10

Có thuật toán nào được biết cho vấn đề sau đánh bại thuật toán ngây thơ không?

Đầu vào: Một hệ thống của bất đẳng thức tuyến tính.mAxbm

Đầu ra: Một giải pháp khả thi nếu có.x{0,1}n

Giả sử rằng và có các mục nguyên. Tôi quan tâm đến giới hạn trường hợp xấu nhất.bAb

Câu trả lời:


14

Nếu là siêu tuyến, thuật toán như vậy sẽ bác bỏ Giả thuyết Thời gian theo hàm mũ mạnh, vì các công thức ở dạng bình thường kết hợp là một trường hợp đặc biệt của lập trình 0-1 và Bổ đề Sparsifying cho phép chúng ta giảm -SAT thành CNF-SAT trên nhiều mệnh đề tuyến tính .kmk

Tuy nhiên, có một thuật toán do Impagliazzo, Paturi và bản thân tôi có thể giải quyết một hệ bất phương trình như vậy nếu số lượng dây, tức là số hệ số khác không trong là tuyến tính. Cụ thể, nếu số lượng dây là , thuật toán sẽ chạy trong thời gian , trong đó .c n 2 ( 1 - s ) n s = 1Acn2(1s)ns=1cO(c2)


1

Nếu đủ nhỏ, bạn có thể làm tốt hơn thuật toán ngây thơ, tức là tốt hơn thời gian 2 n . Ở đây "đủ nhỏ" có nghĩa là m nhỏ hơn một cái gì đó như n / lg n . Thời gian chạy vẫn sẽ theo cấp số nhân - ví dụ: có thể là 2 n / 2 lần - nhưng nó sẽ nhanh hơn thuật toán ngây thơ.m2nmn/lgn2n/2

Ngẫu nhiên, có vẻ như điều này cho phép chúng ta giải quyết vấn đề nhanh hơn trong một số trường hợp ma trận A có số lượng mục siêu tuyến tính. Tôi không biết làm thế nào để bình phương với câu trả lời khác được cung cấp ở đây. Do đó, bạn nên kiểm tra câu trả lời của tôi một cách cẩn thận: nó có thể chỉ ra rằng tôi đã phạm sai lầm nghiêm trọng ở đâu đó.2nA


Cách tiếp cận cơ bản: write , trong đó x 0 giữ n / 2 thành phần đầu tiên của xx 1 giữ n / 2 thành phần cuối cùng ; và tương tự A = ( A 0 , A 1 ) , trong đó A 0n / 2 cột bên trái của AA 1 bên phải nx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1 cột. Bây giờ A x b có thể được viết lại dưới dạngn/2Axb

A0x0+A1x1b,

hoặc tương đương,

A0x0bA1x1.

Liệt kê tất cả khả năng cho A 0 x 0 và để S biểu thị tập hợp các giá trị có thể, nghĩa là2n/2A0x0S

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

Tương tự, liệt kê tập của tất cả 2 n / 2 khả năng cho b - A 1 x 1 , nghĩa làT2n/2bA1x1

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

Bây giờ vấn đề trở thành

Cho các tập có kích thước 2 n / 2 , có tồn tại s St T sao cho s t không?S,TZm2n/2sStTst

(Đây được lấy pointwise, ví dụ, chúng tôi yêu cầu it i cho tất cả i .)sitii

Vấn đề thứ hai được thảo luận trên CS.StackExchange và rõ ràng có một thuật toán cho nó chạy trong thời gian . Nếu m đủ nhỏ (giả sử, nhỏ hơn n / lg n ), thì theo đó tổng thời gian chạy sẽ nhỏ hơn 2 n , như mong muốn.O(2n/2(n/2)m1)mn/lgn2n


Để giúp làm cho kết quả này nghe có vẻ hợp lý hơn, đây là một số trực giác rất thô thiển. Nếu chúng ta lấy trường hợp cực đoan trong đó , tất nhiên điều này có thể được giải quyết nhanh chóng. (Thực sự có một thuật toán đơn giản hơn nhiều cho trường hợp đặc biệt trong đó m = 1 : let x i = 1 nếu A 1 , i0 , nếu không thì x i = 0 ; bây giờ nếu có bất kỳ giải pháp khả thi nào, thì x này sẽ là một.)m=1m=1xi=1A1,i0xi=0x


1
Thuật toán từ câu trả lời của tôi cũng làm giảm vấn đề vectơ được mô tả trong câu trả lời của bạn bằng cách sử dụng cùng một phương thức, tức là chia các biến và liệt kê tất cả các bài tập của chúng.
Stefan Schneider

2
Có các thuật toán cho bài toán lập trình số nguyên chung có thời gian chạy có sự phụ thuộc vào thứ nguyên và sự phụ thuộc đa thức vào mọi thứ khác. Xem dl.acm.org/cites.cfm?id= 380857 . 2O(m)
Sasho Nikolov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.