Chuyển tới nội dung chính
Z

Trình trực quan hóa Knapsack 0/1

Quy hoạch động (dynamic programming) cho bài toán knapsack 0/1 dạng hoạt họa — điền bảng DP từng ô một, làm nổi bật các ô phụ thuộc, có điều khiển từng bước. Chạy ngay trong trình duyệt.

Miễn phí Không cần đăng ký Chạy trên trình duyệt Tôn trọng riêng tư Updated

/

Mã giả

Press Run to animate the algorithm.

Cách dùng

  1. 1 Nhấn Run để điền bảng quy hoạch động từng ô một.
  2. 2 Mỗi hàng là một món đồ; mỗi cột là một sức chứa từ 0 đến W.
  3. 3 Mỗi ô là giá trị tốt nhất giữa việc bỏ qua món đồ (ô màu xanh phía trên) hoặc lấy nó.
  4. 4 Ô ở góc dưới cùng bên phải là giá trị tốt nhất có thể đạt được. Nhấn Shuffle để có bộ món đồ mới.

Vì sao dùng công cụ này

  • Xem bài toán knapsack 0/1 được giải bằng quy hoạch động, thay vì vét cạn (brute force).
  • Quan sát từng ô được xây dựng từ hai ô mà nó phụ thuộc vào.
  • Hiểu thời gian chạy O(n·W) so với vét cạn có độ phức tạp hàm mũ.
  • Chạy hoàn toàn trong trình duyệt của bạn. Không cần đăng ký, không tải lên.

Câu hỏi thường gặp

Bài toán knapsack 0/1 là gì?

Cho các món đồ, mỗi món có trọng lượng và giá trị, cùng một sức chứa W, hãy chọn một tập con (mỗi món chỉ được lấy một lần hoặc không lấy) sao cho tổng giá trị lớn nhất mà không vượt quá W.

Bảng DP hoạt động như thế nào?

dp[i][w] là giá trị tốt nhất khi dùng i món đồ đầu tiên với sức chứa w. Mỗi ô bằng max(bỏ qua món đồ = dp[i-1][w], lấy nó = dp[i-1][w-wi] + vi).

Độ phức tạp thời gian là bao nhiêu?

Thời gian O(n·W) và không gian O(n·W) (có thể giảm xuống O(W)). Đây là độ phức tạp giả đa thức (pseudo-polynomial) — hiệu quả khi W nhỏ.

Tại sao gọi là knapsack 0/1?

Mỗi món đồ hoặc được lấy trọn vẹn (1) hoặc bị bỏ qua (0) — bạn không thể lấy một phần, khác với bài toán knapsack phân số (fractional knapsack) vốn được giải bằng phương pháp tham lam (greedy).

Trình trực quan hóa Knapsack 0/1 là gì?

Trình trực quan hóa Knapsack 0/1 mô phỏng hoạt họa bảng quy hoạch động, trong đó dp[i][w] là giá trị tốt nhất khi dùng i món đồ đầu tiên với sức chứa w, được tính bằng max giữa bỏ qua hoặc lấy từng món đồ. Ô ở góc dưới cùng bên phải là giá trị tối ưu.

Tính năng

Hoạt ảnh bảng quy hoạch động

Xem bảng giá trị được lấp đầy khi từng vật phẩm và sức chứa được xét đến.

Độ phức tạp

Thời gian & không gian: O(nW) (giả đa thức). Bài toán nói chung là NP-hard.

Riêng tư 100%

Chạy hoàn toàn trong trình duyệt của bạn — không có gì được tải lên.

Ví dụ

Input

items (w,v) = (10,60),(20,100),(30,120); capacity 50

Output

max value = 220 (take items 2 and 3, weight 50)

Trường hợp sử dụng

  1. 1

    Học quy hoạch động

    Xem cách các bài toán con chồng lấp xây dựng nên giá trị tối ưu.

  2. 2

    Phân bổ tài nguyên

    Mô hình hóa việc chọn vật phẩm dưới giới hạn trọng lượng hoặc ngân sách.

  3. 3

    Hiểu về giả đa thức

    Hiểu tại sao O(nW) không thực sự là đa thức.

Tóm tắt

Trình trực quan hóa bài toán knapsack 0/1 của Zerethon mô phỏng động lời giải quy hoạch động ngay trong trình duyệt, lấp đầy bảng giá trị tốt nhất theo từng vật phẩm và sức chứa còn lại. Thuật toán chạy với độ phức tạp thời gian O(nW) và không gian O(nW) (n vật phẩm, sức chứa W) — đây là giả đa thức (pseudo-polynomial), vì W tăng theo hàm mũ so với độ dài bit của nó; bài toán knapsack 0/1 nói chung là NP-hard.

Danh mục
Thuật toán
Giá
Miễn phí
Quyền riêng tư
Chạy trên trình duyệt
Đăng ký
Không cần

Tài liệu tham khảo

Quyền riêng tư

Dữ liệu của bạn không bao giờ rời khỏi trình duyệt trừ khi được nêu rõ. Trình trực quan hóa Knapsack 0/1 chạy hoàn toàn phía client — không tải lên máy chủ, không ghi log, không theo dõi dữ liệu bạn nhập.

Mới làm quen? Đọc giải thích từng bước kèm phân tích Big-O: Tìm hiểu Dynamic Programming →

Công cụ liên quan

Xây dựng, chia sẻ và phát triển trên Zerethon Social

Đăng ký miễn phí. Kiếm điểm, sưu tầm thành tựu và kết nối với nhà sáng tạo khắp thế giới.

Dùng thử Zerethon miễn phí