Jeśli jest wystarczająco małe, możesz zrobić lepiej niż naiwny algorytm, tj. Lepiej niż 2 n razy. Tutaj „wystarczająco mały” oznacza, że m jest mniejsze niż coś takiego jak n / lg n . Czas działania będzie nadal wykładniczy - np. Może być 2 n / 2 - ale będzie szybszy niż naiwny algorytm.m2)nmn / lgn2)n / 2
Nawiasem mówiąc, wygląda na to, że pozwala nam to rozwiązać problem szybciej niż czasu w niektórych przypadkach, gdy macierz A ma superliniową liczbę wpisów. Nie wiem, jak to zrównoważyć z inną podaną tutaj odpowiedzią. W związku z tym należy dokładnie sprawdzić moją odpowiedź: może to wskazywać, że gdzieś popełniłem poważny błąd.2)nZA
Podstawowe podejście: napisz , gdzie x 0 zawiera pierwsze n / 2 składowe x, a x 1 zawiera ostatnie n / 2 składowe; podobnie = ( 0 , 1 ) , w którym 0 ma lewe n / 2 kolumny A oraz A 1 prawo nx = ( x0, x1)x0n / 2xx1n / 2A = ( A0, A1)ZA0n / 2ZAZA1 kolumny. Teraz A x ≤ b można ponownie zapisać w formularzun / 2A x ≤ b
ZA0x0+ A1x1≤ b ,
lub równoważnie
ZA0x0≤ b - A1x1.
Wymień wszystkie możliwości dla A 0 x 0 i niech S oznacza zbiór możliwych wartości, tj.2)n / 2ZA0x0S.
S.= { A0x0: x0∈ { 0 , 1 }n / 2} .
Podobnie wyliczyć zestaw wszystkich możliwości 2 n / 2 dla b - A 1 x 1 , tj.T.2)n / 2b - A.1x1
T.= { b - A1x1: x1∈ { 0 , 1 }n / 2} .
Teraz problem się pojawia
Biorąc pod uwagę zbiory o wielkości 2 n / 2 , czy istnieją s ∈ S i t ∈ T takie, że s ≤ t ?S., T⊆ Zm2)n / 2s ∈ St ∈ Ts ≤ t
(Tutaj przyjmuje się punktowo, tzn. Wymagamy, aby s i ≤ t i dla wszystkich i .)≤sja≤ tjaja
Ten ostatni problem jest omawiany na CS.StackExchange i najwyraźniej istnieje dla niego algorytm działający w czasie . Jeśli m jest wystarczająco małe (powiedzmy, mniejsze niż n / lg n ), oznacza to, że całkowity czas pracy będzie mniejszy niż 2 n , zgodnie z życzeniem.O ( 2n / 2( n / 2 )m - 1)mn / lgn2)n
Aby ten wynik brzmiał bardziej realistycznie, oto bardzo prymitywna intuicja. Jeśli weźmiemy ekstremalny przypadek, w którym , oczywiście można to szybko rozwiązać. (W rzeczywistości istnieje znacznie prostszy algorytm dla specjalnego przypadku, w którym m = 1 : niech x i = 1, jeśli A 1 , i ≤ 0 , w przeciwnym razie x i = 0 ; teraz, jeśli istnieje jakieś możliwe rozwiązanie, to ten x będzie jeden.)m = 1m = 1xja= 1ZA1 , ja≤ 0xja= 0x