Điều này có nghĩa là ba lô đơn nguyên nằm trong P. Điều đó không có nghĩa là ba lô (với số được mã hóa nhị phân) nằm trong P.
Knapsack được biết là NP-đầy đủ. Nếu bạn chỉ ra rằng chiếc ba lô nằm trong P, điều đó sẽ cho thấy P = NP.
Nhưng bạn đã không chứng minh rằng ba lô là ở P. Bạn đã chỉ ra rằng ba lô đơn nguyên ở P. Tuy nhiên, ba lô đơn nguyên không được biết là hoàn chỉnh NP (thực sự, nghi ngờ tiêu chuẩn là rất có thể nó không hoàn thành NP ). Do đó, việc đặt ba lô đơn phương vào P không có nghĩa là P = NP.
Vì vậy, vấn đề nào chúng ta nên quan tâm nhiều hơn, ba lô hoặc ba lô đơn phương? Nếu động lực của bạn dựa trên mối quan tâm thực tế, thì câu trả lời sẽ phụ thuộc vào kích thước của những con số bạn muốn giải quyết vấn đề về chiếc ba lô cho: nếu chúng lớn, thì bạn chắc chắn quan tâm nhiều hơn đến chiếc ba lô hơn là chiếc ba lô đơn phương. Nếu động lực của bạn dựa trên mối quan tâm về mặt lý thuyết, thì ba lô sẽ thú vị hơn, bởi vì nó cho phép chúng ta hiểu sâu hơn - nó cho phép chúng ta phân biệt giữa kích thước và cường độ - trong khi đó, ba lô đơn phương ngăn chúng ta tạo ra sự khác biệt đó.
Để trả lời câu hỏi tiếp theo về thuật toán lập trình động cho bài toán về chiếc ba lô:
Có, thuật toán lập trình động tương tự có thể được áp dụng cho cả ba lô và cho ba lô đơn nguyên. Thời gian chạy của nó là đa thức theo độ lớn của các số, nhưng theo cấp số nhân (không phải đa thức) theo độ dài của các số khi được mã hóa thành nhị phân. Do đó, thời gian chạy của nó là đa thức về độ dài của đầu vào khi đầu vào được mã hóa thành đơn vị nhưng không phải là đa thức về độ dài của đầu vào khi đầu vào được mã hóa ở dạng nhị phân. Đó là lý do tại sao chúng tôi làm xét thuật toán lập trình năng động này là một thuật toán thời gian đa thức cho ba lô unary, nhưng không coi nó là một thuật toán thời gian đa thức cho ba lô (nhị phân được mã hóa).
Hãy nhớ lại rằng chúng ta nói một thuật toán chạy trong thời gian đa thức nếu thời gian chạy của nó nhiều nhất là một số đa thức về độ dài của đầu vào, tính bằng bit .