Problemy z plecakiem można łatwo rozwiązać za pomocą programowania dynamicznego. Programowanie dynamiczne przebiega w czasie wielomianowym; dlatego to robimy, prawda?
Przeczytałem, że jest to w rzeczywistości problem NP-zupełny, co oznaczałoby, że rozwiązanie problemu wielomianowego jest prawdopodobnie niemożliwe.
Gdzie jest mój błąd?
Odpowiedzi:
Problem z plecakiem jest gdy liczby są podawane jako liczby binarne . W takim przypadku programowanie dynamiczne zajmie wykładniczo wiele kroków (w wielkości wejścia, tj. Liczby bitów na wejściu), aby zakończyć .NP-complete †
Z drugiej strony, jeśli liczby na wejściu zostaną podane pojedynczo, programowanie dynamiczne będzie działać w czasie wielomianowym (w wielkości wejścia).
Tego rodzaju problemy nazywane są słaboNP-complete .
Ten rodzaj algorytmu, tj. Wielomian w największej liczbie, która jest częścią danych wejściowych, ale wykładniczo w długości danych wejściowych, nazywa się pseudo-wielomianem .
źródło
m
(wielkością opakowania) an
(liczbą przedmiotów) jest całkowicie nieznany, prawda? I ponownie „kiedy liczby są podawane jako liczby binarne” ... ale czy nie możesz tego powiedzieć na nic? W przypadku większości algorytmów mówimy o wielkości wejściowej w bazie 10. Po co tutaj mówić o pliku binarnym? I to, czy kodujesz w formacie binarnym, ósemkowym, dziesiętnym itp. ...actual
liczba iteracji w głównej pętli algorytmu zależy bezpośrednio od obun
iW
.Główne zamieszanie polega na różnicy między „ rozmiarem ” a „ wartością ”.
„ Czas wielomianowy ” oznacza wielomian wrt wielkości wejściowej.
„ Czas pseudopolinomalny ” oznacza, że wielomian wrt wartości wejściowej. Można pokazać (poniżej), że jest to równoważne z wykładniczym względem wielkości danych wejściowych.
Innymi słowy: Niech reprezentuje rozmiar danych wejściowych, a reprezentuje wartość danych wejściowych.Nsize Nval
Czas wielomianu: dlaO(Nxsize) x∈N
Pseudopol. Czas: dlaO(Nxval) x∈N
Teraz problem plecakowy ma rozwiązanie pseudopolomiczne, a nie wielomianowe , ponieważ rozwiązanie programowania dynamicznego daje czas działania zależny od wartości - tj. , gdzie jest wartością reprezentującą maksymalną pojemność.O(nW) W
Teraz wartość można przekonwertować na rozmiar , reprezentując ją w liczbie cyfr potrzebnych do jej przedstawienia. mówi, ile cyfr potrzeba do reprezentowania przy użyciu podstawy . Można to rozwiązać, aby dał:Nsize=Logb(Nval) Nval b Nval
Podłączenie tego do definicji czasu pseudopolomicznego pokazuje, że jest to wykładniczy wr_ :Nsize
Pseudopol. Czas: dlaO(bxNsize) b,x∈N
źródło
Problem plecakowy , jak określono w artykule Karp jest jest NP-zupełny, ponieważ nie jest redukcja od innych problemów NPC (dokładna obejmuje w tym przypadku) do plecaka. Oznacza to, że nie ma algorytmu wielomianowego, który rozwiązałby wszystkie przypadki problemu z plecakiem, chyba że .P=NP
Istnieją jednak różne warianty (np. 0-1 Knapsack i inne ), które mogą, ale nie muszą mieć rozwiązania wielomianowe lub dobre przybliżenia. Ale to nie to samo, co ogólny problem z plecakiem. Ponadto mogą istnieć wydajne algorytmy, które działają dla określonych (rodzin) instancji , ale algorytmy te będą działać dłużej w innych instancjach.
źródło