Vấn đề Knapsack - NP-hoàn thành mặc dù giải pháp lập trình động?


51

Vấn đề Knapsack được giải quyết dễ dàng bằng lập trình động. Lập trình động chạy trong thời gian đa thức; đó là lý do tại sao chúng ta làm điều đó, phải không?

Tôi đã đọc nó thực sự là một vấn đề hoàn chỉnh NP, tuy nhiên, điều đó có nghĩa là việc giải quyết vấn đề trong vấn đề đa thức có lẽ là không thể.

Lỗi của tôi ở đâu?


5
Hãy nhớ rằng DP là đa thức trong "kích thước bảng". Bảng này lớn theo cấp số nhân cho Knapsack (xem câu trả lời của Kaveh).
Raphael

Câu trả lời:


41

Vấn đề KnapsackNP-complete khi các số được đưa ra dưới dạng số nhị phân . Trong trường hợp này, các lập trình năng động sẽ mất theo cấp số nhân nhiều bước (trong kích thước của đầu vào, tức là số bit trong dữ liệu) đến khi kết thúc .

Mặt khác, nếu các số trong đầu vào được đưa ra một cách đơn nhất, chương trình động sẽ hoạt động theo thời gian đa thức (theo kích thước của đầu vào).

Đây là loại vấn đề được gọi là yếu NP-complete .

2nnnnlgnO(n)=O(2lgn/2)

Loại thuật toán này, tức là đa thức với số lượng lớn nhất là một phần của đầu vào, nhưng hàm mũ theo chiều dài đầu vào được gọi là đa thức giả .


Nhưng hãy nghĩ về các đối tượng được đặt trong ba lô. Các đối tượng cần phải là đầu vào và đầu vào như vậy phải là đa thức với số lượng đối tượng. Nếu các đối tượng là đủ, thì đầu vào là đa thức với kích thước của vấn đề. Vậy tại sao tôi không thể nói rằng Vấn đề Knapsack là vấn đề P về kích thước bảng? Tôi có lầm không?
Strin

mm2lgmm

Bạn có thể chia đầu vào thành các đầu vào nhỏ hơn có mã hóa nhị phân có kích thước hoàn thành thuật toán trong thời gian đa thức sau đó kết hợp các giải pháp không?
Char

@Kaveh "Kích thước của đầu vào khoảng 2 lg m" Tôi không hiểu bạn lấy phần đó từ đâu. Mối quan hệ giữa m(kích thước gói) và n(num vật phẩm) là hoàn toàn không biết, phải không? Và lại "khi các số được đưa ra dưới dạng số nhị phân" ... nhưng bạn không thể nói điều đó cho bất cứ điều gì? Với hầu hết các thuật toán, chúng ta nói về kích thước đầu vào trong cơ sở 10. Tại sao lại nói về nhị phân ở đây? Và việc bạn mã hóa nhị phân, bát phân, thập phân, v.v ... actualsố lần bạn lặp qua vòng lặp thuật toán chính của bạn phụ thuộc trực tiếp vào cả hai nW.
The11

1
@ The111, tôi nghĩ sẽ tốt hơn nếu bạn đăng nó như một câu hỏi mới và tôi sẽ đăng câu trả lời. Tôi nghĩ rằng câu hỏi của bạn là cơ bản hơn và có ý kiến ​​không liên quan nhiều đến câu hỏi này.
Kaveh

33

Sự nhầm lẫn chính nằm ở sự khác biệt giữa " kích thước " và " giá trị ".

" Thời gian đa thức " ngụ ý đa thức ghi kích thước của đầu vào.

" Pseudopolynomial Time " ngụ ý đa thức wrt giá trị của đầu vào. Nó có thể được hiển thị (bên dưới) rằng điều này tương đương với số mũ ghi kích thước của đầu vào.


NsizeNval

O(Nsizex)xN

O(Nvalx)xN

O(nW)W

Nsize=Logb(Nval)NvalbNval

Nval=bNsize

Nsize

O(bxNsize)b,xN


7
Tạo một tài khoản ở đây chỉ để nói lời cảm ơn rất nhiều! Chỉ sau ví dụ của bạn, cuối cùng tôi đã hiểu nó.
Inoryy

2
Câu trả lời của bạn đánh bại tất cả mọi người, bravo!
Muhammad Razib

1
Để thêm vào câu trả lời tuyệt vời này, chúng ta có thể nói rằng nếu chúng ta thay đổi W từ 100 thành 101 thì kích thước của vấn đề không tăng lên, kích thước sẽ tăng lên nếu chúng ta thêm một bit khác vào W làm cho nó lớn gấp đôi, vì vậy bảng sẽ có số lượng hàng gấp đôi và do đó với việc tăng kích thước lên một, thời gian của vấn đề được nhân đôi, đó là lý do tại sao nó theo cấp số nhân.
Amen

@bcorso Giả sử bạn được cung cấp một giá trị N. Và bạn phải tìm tổng các số từ 1 đến N và bạn đã sử dụng phương pháp vòng lặp for, đó có phải là thuật toán Thời gian giả?
DollarAkshay

8

P=NP

Tuy nhiên, có các biến thể khác nhau (ví dụ: 0-1 Knapsack và các biến thể khác ) có thể có hoặc không có các giải pháp thời gian đa thức hoặc các xấp xỉ tốt. Nhưng điều này không giống như vấn đề Knapsack chung. Ngoài ra, có thể có các thuật toán hiệu quả hoạt động cho các trường hợp cụ thể (gia đình) , nhưng các thuật toán này sẽ mất nhiều thời gian hơn trong các trường hợp khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.