Giả sử bạn là kẻ trộm và bạn đã xâm chiếm một ngôi nhà. Bên trong, bạn tìm thấy các mục sau:In ấn Các vật phẩm đang ở trong bao trong knapsack
Bình có trọng lượng 3 pound và trị giá 50 đô la.
Một nugget bạc có trọng lượng 6 pound và trị giá 30 đô la.
Một bức tranh có trọng lượng 4 pound và đáng giá 40 đô la.
Một chiếc gương có trọng lượng 5 pound và trị giá 10 đô la.
Giải pháp cho vấn đề Knapsack có kích thước 10 pound này là 90 đô la.
Bảng làm từ lập trình năng động là: -
Bây giờ tôi muốn biết những yếu tố tôi đặt trong túi của tôi sử dụng bảng này sau đó làm thế nào để sao lưu theo dõi ??
hey bạn có thể cho tôi ý tưởng bên trong để có thêm cảm giác về bản ngã này không. –
@ T.J Bạn cần phải cụ thể hơn về những gì bạn muốn giải thích rõ hơn. Phép đệ quy hoạt động như thế này: nếu 'f [i] [w] <= f [i-1] [w]', thì chúng ta không cần mục i, vì vậy chúng ta chỉ recurse vào tập con '1..i- 1'. Nếu 'f [i] [w]> f [i-1] [w]', thì chúng ta cần sử dụng mục i để đạt được kết quả tối ưu, vì vậy chúng tôi đóng gói nó trong túi. Túi còn lại có công suất 'w-trọng lượng của mục i', và chúng tôi muốn đóng gói càng nhiều càng tốt của các mục' 1.i-1' vào công suất còn lại –
Tôi nghĩ rằng ý tưởng cũng có thể được nêu như sau. Vào cuối chương trình động, một trạng thái tối ưu được chọn để có được giá trị tối ưu. Backtracking được sử dụng để tìm ra trạng thái 'trước đó', tức là trạng thái dựa trên đó trạng thái tối ưu được tạo ra. Các backtracking sau đó được lặp lại trên trạng thái trước đó, cho đến khi trạng thái ban đầu (tức là knapsack rỗng) được tìm thấy. Tôi thấy điều này khá sâu sắc như tôi đã từng tin trong nhiều năm rằng nó là cần thiết để duy trì một số cấu trúc phụ trợ để đề cập đến trạng thái trước đó tương ứng trong quá trình tạo ra không gian trạng thái. – Codor