Це означає, що одинарний рюкзак є в P. Це не означає, що рюкзак (з двійковими кодованими числами) знаходиться в P.
Рюкзак, як відомо, завершений NP. Якби ви показали, що рюкзак знаходиться в P, це показало б, що P = NP.
Але ви не показали, що рюкзак є в P. Ви показали, що одинарний рюкзак є в P. Однак не відомо, що одинарний рюкзак є NP-повним (дійсно, стандартна підозра на те, що він, швидше за все, не є NP-повним ). Тому введення одинарного рюкзака в P не означає, що P = NP.
Тож над якою проблемою нам би більше цікавитись, рюкзак чи одинарний рюкзак? Якщо ваша мотивація ґрунтується на практичних питаннях, то відповідь буде залежати від розміру чисел, для яких ви хочете вирішити проблему рюкзака: якщо вони великі, то ви, звичайно, більше дбаєте про рюкзак, ніж одинарний рюкзак. Якщо ваша мотивація ґрунтується на теоретичних питаннях, то ранець, мабуть, цікавіший, оскільки він дозволяє глибше зрозуміти - він дозволяє нам розрізняти розмір проти величини - тоді як одинарний рюкзак заважає нам зробити це розрізненням.
Щоб відповісти на наступне запитання щодо алгоритму динамічного програмування для проблеми рюкзака:
Так, той самий алгоритм динамічного програмування може бути застосований як до рюкзаків, так і до одинарного рюкзака. Час його роботи є многочленом за величиною чисел, але експоненціальним (а не многочленом) у довжині чисел при кодуванні у двійкові. Таким чином, час його роботи є многочленом у довжині входу, коли вхід кодується одинарним, але не є многочленом у довжині входу, коли вхід кодується у двійковій формі. Ось чому ми дійсно розглянути цей алгоритм динамічного програмування бути поліноміальних алгоритмом для одномісний рюкзаку, але НЕ вважаємо , що це поліноміальний алгоритм (бінарної кодуванням) ранець.
Нагадаємо, що ми говоримо, що алгоритм працює в поліноміальний час, якщо його час роботи становить щонайбільше якийсь многочлен довжини вводу, у бітах .