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 đó.2nMột
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 x và x 1 giữ n / 2 thành phần cuối cùng ; và tương tự A = ( A 0 , A 1 ) , trong đó A 0 có n / 2 cột bên trái của A và A 1 bên phải nx = ( x0, x1)x0n / 2xx1n / 2A = ( A0, A1)Một0n / 2MộtMột1 cột. Bây giờ A x ≤ b có thể được viết lại dưới dạngn / 2A x ≤ b
Một0x0+ A1x1≤ b ,
hoặc tương đương,
Một0x0≤ b - A1x1.
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 / 2Một0x0S
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 / 2b - A1x1
T= { b - A1x1: 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 ∈ S và t ∈ T sao cho s ≤ t không?S, T⊆ Zm2n / 2s ∈ St ∈ Ts ≤ t
(Đây được lấy pointwise, ví dụ, chúng tôi yêu cầu là i ≤ t i cho tất cả i .)≤si≤tii
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)m−1)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 , i ≤ 0 , 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,i≤0xi=0x