Thời gian chạy của thuật toán Knapsack không chỉ bị ràng buộc bởi kích thước của đầu vào (n - số mục) mà còn về độ lớn của đầu vào (W - dung lượng của gói) O (nW) theo cấp số nhân. được biểu diễn trong máy tính ở dạng nhị phân (2 ^ n). Độ phức tạp tính toán (tức là cách xử lý được thực hiện bên trong máy tính thông qua các bit) chỉ liên quan đến kích thước của các đầu vào chứ không phải độ lớn / giá trị của chúng .
Bỏ qua danh sách giá trị / trọng lượng trong giây lát. Giả sử chúng ta có một thể hiện với dung lượng knapsack 2. W sẽ lấy hai bit trong dữ liệu đầu vào. Bây giờ chúng ta sẽ tăng dung lượng gói dữ liệu lên 4, giữ phần còn lại của đầu vào. Đầu vào của chúng tôi chỉ tăng thêm một bit, nhưng độ phức tạp tính toán đã tăng lên gấp đôi. Nếu chúng tôi tăng dung lượng lên 1024, chúng tôi sẽ chỉ có 10 bit đầu vào cho W thay vì 2, nhưng độ phức tạp đã tăng lên theo hệ số 512. Độ phức tạp theo thời gian tăng theo cấp số nhân với kích thước của W trong biểu diễn nhị phân (hoặc thập phân) .
Một ví dụ đơn giản khác giúp tôi hiểu khái niệm đa thức giả là thuật toán kiểm tra tính nguyên sơ ngây thơ. Đối với một số n cho trước, chúng ta đang kiểm tra xem nó có chia đều cho mỗi số nguyên trong phạm vi 2..√n không, vì vậy thuật toán thực hiện √ (n − 1) bước. Nhưng ở đây, n là độ lớn của đầu vào, không phải là kích thước.
Now The regular O(n) case
Ngược lại, tìm kiếm một mảng cho một phần tử đã cho sẽ chạy theo thời gian đa thức: O (n). Nó mất nhiều nhất n bước và ở đây n là kích thước của đầu vào (độ dài của mảng).
[xem tại đây]
Tính toán các bit cần thiết để lưu trữ số thập phân