Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
387 KB
Nội dung
LỜI NÓI ĐẦU Phân tích, thiết kế đánh giá thuật toán nhân tố mấu chốt xác định hiệu hệ thống giải toán tin học đặt Có nhiều toán lời giải (thuật toán) đưa tốt mức độ chấp nhận Việc tính toán cho phép chấp nhận sai số Vì vậy, thời gian gần đây, phương pháp xấp xỉ quan tâm phát triển số ứng dụng Có nhiều toán mà ta giải kĩ thuật, phương pháp Trong phải đề cập đến toán túi (Knapsack), hay gọi toán xếp ba lô- toán tối ưu hoá tổ hợp Bài toán đặt tên từ vấn đề chọn quan trọng nhét vừa vào túi (với giới hạn khối lượng) để mang theo chuyến Liên quan đến việc giải toán có nhiều phương án khác như: Phương pháp quy hoạch động, phương pháp tham lam, phương pháp nhánh cận Ở phương pháp có ưu nhược điểm riêng Tuy nhiên nói chung đạt phương án tốt chưa tối ưu Phân tích đánh giá thuật toán Chương 1: BÀI TOÁN CÁI TÚI Phát biểu toán túi Có túi chứa trọng lượng tối đa C Có n đồ vật, đồ vật có trọng lượng wi giá trị pi (C, wi, pi số nguyên dương) Hãy xếp đồ vật vào túi để tổng giá trị túi lớn Bài toán túi dạng – Một đồ vật xếp vào ba lô (1), không xếp vào ba lô (0) Bài xếp ba lô 0-1 phát biểu toán học sau: Cực đại hóa cho: 2.1 Bài toán túi bị chặn Hạn chế số đồ vật thuộc loại không vượt lượng Bài xếp ba lô bị chặn phát biểu toán học sau: Cực đại hóa cho: 2.2 Bài toán túi không bị chặn Phân tích đánh giá thuật toán Không có hạn chế số lượng đồ vật loại Một trường hợp đặc biệt toán nhận nhiều quan tâm, toán với tính chất: - Là toán định - Là toán 0-1 với đồ vật, chi phí giá trị: C = V Bài toán túi dạng phân số (Fractional Knapsack) Có thể cần xếp vào ba lô phần đồ vật Đối với toán dạng 0-1: Xét tổ hợp nặng C ký mà đem lại giá trị cực đại Nếu ta lấy hàng thứ j khỏi túi, hàng lại tổ hợp đem lại giá trị lớn ứng với trọng lượng tối đa C-w j mà ta lấy từ n-1 loại mặt hàng trừ mặt hàng thứ j Đối với toán dạng phân số: Xét trường hợp ta lấy khỏi túi w j-w ký mặt hàng thứ j, hàng lại tổ hợp đem lại giá trị lớn ứng với trọng lượng C-(wj-w) mà ta lấy từ n-1 loại mặt hàng trừ mặt hàng thứ j Phân tích đánh giá thuật toán Chương 2: PHƯƠNG PHÁP XẤP XỈ Thuật toán cho kết gần với kết tối ưu gọi thuật toán xấp xỉ Tỷ lệ xấp xỉ ( Approximation ratio): - Bài toán có nhiều giải pháp - Cần tối ưu hóa hàm mục tiêu - Giải pháp tối ưu giải pháp mà cực đại (hoặc cực tiểu) hóa hàm mục tiêu Đặt: - C giá trị hàm mục tiêu giải pháp xấp xỉ - C* giá trị hàm mục tiêu giải pháp tối ưu Một thuật toán xấp xỉ có tỷ lệ xấp xỉ, ký hiệu ρ(n), với liệu vào kích thước n là: max( C C* , ) ≤ ρ ( n) C* C + Bài toán cực tiểu hóa: C ≥ C* >0, ρ(n)=C/C* + Bài toán cực đại hóa: C* ≥ C > 0, ρ(n)=C*/C Một thuật toán với tỷ lệ xấp xỉ ρ(n) gọi thuật toán xấp xỉ-ρ(n) Ta có: ρ(n) ≥ Nếu ρ(n) nhỏ giải pháp xấp xỉ gần với giải pháp tối ưu Thuật toán xấp xỉ-1 cho giải pháp tối ưu (nghĩa ρ(n)=1) Yêu cầu thuật toán xấp xỉ: Một thuật toán xấp xỉ phải thoả mãn yêu cầu sau đây: - Dễ tính, dễ chương trình hoá - Ước lượng sai số gặp phải - Tính thời gian chạy thuật toán - Chứng minh tính đắn thuật toán Phân tích đánh giá thuật toán Chương 3: PHƯƠNG PHÁP XẤP XỈ GIẢI BÀI TOÁN CÁI TÚI Đối với toán túi dạng 0-1 ta dùng quy hoạch động, toán túi dạng phân số ta dùng giải thuật tham lam I Phương pháp Quy hoạch động (Dynamic Programming): Phương pháp tổng quát: Phương pháp quy hoạch động phát minh nhà toán học Mỹ, Richard Bellman, người mà đưa nhận định để giải vấn đề điều cần thiết cần phải lựa chọn định tốt Quy Hoạch Động phương pháp mạnh mẽ Tin học, phân tích kỹ thấy thuật toán tiếng Ford-Bellman, Dijkstra, hay Floyd có chất quy hoạch động Đối với nhiều thuật toán, phương pháp chia để trị thường đóng vai trò chủ đạo việc thiết kế thuật toán Trong phương pháp quy hoạch động lại tận dụng phương pháp này: Khi cần phải giải toán nào, ta giải tất toán lưu trữ lời giải (để khỏi tính toán lại) nhằm sử dụng lại chúng để giải toán lớn Phương pháp tổ chức tìm kiếm lời giải theo kiểu từ lên (bottom up) Xuất phát từ toán nhỏ đơn giản nhất, tổ hợp lời giải chúng để có lời giải toán lớn hơn… để tìm lời giải toán ban đầu Khi sử dụng phương pháp quy họach động để giải vấn đề, ta gặp khó khăn sau: Số lượng lời giải toán lớn không chấp nhận Không phải lúc kết hợp lời giải toán cho lời giải toán lớn Để giải trường hợp vậy, phương pháp quy hoạch động dựa vào nguyên lý, gọi nguyên lý tối ưu (The principle of optimality) Bellman: “ Nếu lời giải toán tối ưu lời giải toán tối ưu ” Trong thuật toán quy hoạch động thường dùng thao tác : Phân tích đánh giá thuật toán - Xây dựng hàm quy hoạch động ( phương trình quy hoạch động ) - Lập bảng lưu lại giá trị hàm - Truy xuất lời giải tối ưu toán từ bảng lưu Phương pháp quy hoạch động giải toán túi: Input: w = (w1, w2, …, wn); // Trọng lượng đồ vật v = (v1, v2, …, vn); // Giá trị đồ vật W: Sức chứa túi Output: - Đánh dấu vật chọn - Giá trị lớn túi Sử dụng mảng B[0 n,0 W] để lưu lại giải pháp toán B[k,w] tổng giá trị lớn ba lô mà trọng lượng không vượt w sử dụng đồ vật k Ban đầu: B[0,w] = với w B[k,0] = với k B[k,w] = B[k-1,w] wk > w max{B[k-1,w],B[k-1,w-wk] + bk} wk ≤ w Thuật toán: for (k=0;k≤n;k++) B[k,0] = 0; for (w=0;w≤W;w++) B[0,w] = 0; for (k=1;k≤n;k++) for (w=1;w≤W;w++) if (wk ≤ w) // sử dụng đồ vật k if (bi + B[i-1,w-wi] > B[i-1,w]) B[i,w] = bi + B[i-1,w-wi] // sử dụng đồ vật k else B[i,w] = B[i-1,w] // không sử dụng đồ vật k else B[k,w] = B[k-1,w] // không sử dụng đồ vật k Phân tích đánh giá thuật toán Đánh giá độ phức tạp: Thuật toán tính mảng nxW phần tử hai vòng lặp lồng Độ phức tạp thuật toán: O(nW) Ví dụ minh hoạ: W=5 (trọng lượng tối đa túi chứa) N = (có đồ vật) Các đồ vật có (trọng lượng, giá trị): (2,3), (3,4), (4,5), (5,6) k W 0 0 0 for (w=0;w≤W;w++) B[0,w] = 0; K 0 0 0 0 W for (k=0;k≤n;k++) B[k,0] = 0; K W Đồ vật 0 0 0 k=1 bk = wk = w=1 w - wk = -1 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) Phân tích đánh giá thuật toán 0 0 if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 0 k=1 bk = wk = w=2 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng Phân tích đánh giá thuật toán K W Đồ vật 0 0 0 0 3 0 k=1 bk = wk = w=3 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 0 k=1 bk = wk = w=4 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng Phân tích đánh giá thuật toán K W Đồ vật 0 0 0 0 3 3 0 k=1 bk = wk = w=5 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 3 0 0 k=2 bk = wk = w=1 w - wk = -2 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 k=2 bk = wk = w=2 w - wk = -1 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) 10 Phân tích đánh giá thuật toán 0 0 0 3 3 if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 3 0 0 k=2 bk = wk = w=3 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng 11 Phân tích đánh giá thuật toán K W Đồ vật 0 0 0 0 3 3 0 4 0 k=2 bk = wk = w=4 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 3 0 4 0 k=2 bk = wk = w=5 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 4: (5,6) 12 Phân tích đánh giá thuật toán 0 0 0 0 3 3 0 4 0 k=3 bk = wk = w = w - wk < 1: (2,3) 2: (3,4) 3: (4,5) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 3 0 4 0 k=3 bk = wk = w=4 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 3 0 4 0 k=3 bk = wk = w=5 w - wk = 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) 13 Phân tích đánh giá thuật toán 7 if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 3 0 4 0 0 k=4 bk = wk = w = w - wk < 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng K W Đồ vật 0 0 0 0 3 3 0 4 0 0 k=4 bk = wk = w=5 w - wk = if wk ≤ w // đồ vật k sử dụng if bk + B[k-1,w-wk] > B[k-1,w] B[k,w] = bk + B[k-1,w - wk] else B[k,w] = B[k-1,w] else B[k,w] = B[k-1,w] // wk > w, đồ vật k không sử dụng 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) 14 Phân tích đánh giá thuật toán K 0 0 0 0 3 3 0 4 W 0 0 Các đồ vật sử dụng: 1, Giá trị lớn nhất: Nhận xét: Bài toán túi dễ dàng giải Phương pháp Quy hoạch động W không lớn, W lớn thời gian chạy trở nên không chấp nhận Phương pháp Quy hoạch động làm việc W trọng lượng, kích thước đồ vật số thực thay số nguyên Nhận xét đánh giá phương pháp quy hoạch động Ưu điểm phương pháp quy hoạch động chương trình thực nhanh tốn thời gian giải lại toán giải Kỹ thuật quy hoạch động vận dụng để giải toán tối ưu, toán có công thức truy hồi Phương pháp quy hoạch động không đem lại hiệu trường hợp sau: - Không tìm công thức truy hồi - Số lượng toán cần giải lưu giữ kết lớn chấp nhận nhớ máy tính không cho phép - Sự kết hợp lời giải toán chưa cho ta lời giải toán ban đầu 15 Phân tích đánh giá thuật toán Tuy nhiên áp dụng phương pháp quy hoạch động để giải số toán tối ưu thường mang lại hiệu tốt II Thuật toán tham lam: (Greedy Algorithms) Phương pháp tổng quát: Phương pháp tham lam kỹ thuật thiết kế thường dùng để giải toán tối ưu Phương pháp tiến hành nhiều bước Tại bước, theo chọn lựa (xác định hàm chọn), tìm lời giải tối ưu cho toán nhỏ tương ứng Lời giải toán bổ sung dần bước từ lời giải toán Lời giải xây dựng có lời giải tối ưu toán? Các lời giải tìm phương pháp tham lam thường chấp nhận theo điều kiện đó, chưa tối ưu Cho trước tập A gồm n đối tượng, ta cần phải chọn tập S A Với tập S chọn thỏa mãn yêu cầu toán, ta gọi nghiệm chấp nhận Một hàm mục tiêu gắn nghiệm chấp nhận với giá trị Nghiệm tối ưu nghiệm chấp nhận mà hàm mục tiêu đạt giá trị nhỏ (lớn nhất) Đặc trưng tham lam phương pháp thể bởi: Trong bước việc xử lí tuân theo chọn lựa trước, không kể đến tình trạng không tốt xảy thực lựa chọn lúc đầu Mô hình: Chọn S từ tập tập A Tính chất tham lam thuật toán định hướng hàm Chọn - Khởi động S = ∅; - Trong A ≠ ∅: - Chọn phần tử tốt A gán vào x: x = Chọn (A) ; - Cập nhật đối tượng để chọn: A = A-{x}; - Nếu S ∪ {x} thỏa mãn yếu cầu toán Cập nhật lời giải : S = S ∪ {x}; Thủ tục thuật toán tham lam cài đặt sau : 16 Phân tích đánh giá thuật toán input A[1 n] output S //lời giải; greedy (A,n) ≡ S = ∅; while ( A ≠ ∅) { x= Chọn(A); A = A-{x} if( S ∪ {x} chấp nhận ) S = S ∪ {x}; } return S; Thuật toán tham lam giải toán túi: Input: w = (w1, w2, …, wn); // Trọng lượng đồ vật v = (v1, v2, …, vn); // Giá trị đồ vật W: Sức chứa túi Output: - Đánh dấu vật chọn - Giá trị lớn túi Ý tưởng: Ở bước, chọn đồ vật triển vọng xếp vào túi phần lớn đồ vật + Đối với đồ vật chọn đầu tiên, xếp toàn đồ vật vào túi + Đối với đồ vật chọn cuối cùng, xếp phần đồ vật vào túi Thuật toán dừng túi đầy Thuật toán tham lam chọn đồ vật có tỷ lệ giá trị trọng lượng (v i/wi) giảm dần Thuật toán: for(i=0;i Không gian lại: Thêm đồ vật < 10$ 9kg> Không gian lại: Tổng giá trị lớn túi là: 18$ * Thuật toán xấp xỉ theo phương pháp tham lam: Thứ tự Tổng giá trị lớn túi là: 19.7778$ 21 Phân tích đánh giá thuật toán KẾT LUẬN Nghiên cứu, thiết kế giải thuật đánh giá độ phức tạp giải thuật vấn đề quan trọng Sau trình nghiên cứu giải toán túi phương pháp xấp xỉ, em nhận thấy, thực tế thuật toán tốt cả, vấn đề phạm vi Bài toán thụât toán có lợi Ví dụ: Phương pháp quy hoạch động không tốt túi W có sức chứa lớn… thời gian chạy chấp nhận nhớ máy tính có giới hạn Và phương pháp làm việc W mặt hàng số thực Vì khó áp dụng thuật toán cho yêu cầu toán, với yêu cầu, có một vài thuật toán tỏ tốt so với thuật toán khác Trong phạm vi tập em tìm hiểu nghiên cứu phương pháp để giải toán túi: Phương pháp Q uy hoạch động để giải toán túi dạng 0-1, phương pháp Tham lam để giải toán túi dạng phân số 22 Phân tích đánh giá thuật toán TÀI LIỆU THAM KHẢO Bài giảng Thuật toán nâng cao – Nguyễn Thanh Bình – ĐH Đà Nẵng Cấu trúc DLGT - Đỗ Xuân Lôi http://vi.wikipedia.org/wiki (theo từ khoá “phương pháp xấp xỉ”, “phương pháp quy hoạch động”) Giải thuật Lập trình - Lê Minh Hoàng ĐHSPHN Một số trang web 23 [...]... } } Đánh giá độ phức tạp: Độ phức tạp của thuật toán là O(nlogn) Ví dụ minh họa: Với n = 4, W=17; I w[i] v[i] Đơn giá d[i] Vật chọn 1 8 8 1 2 10 12 6/5 x 3 9 10 10/9 4 5 4 4/5 X Ttl: 15/17 18 Phân tích đánh giá thuật toán theo thuật toán ε[i] Phương án X tối ưu Vmax=16 X Ttl: 17 Vmax=18 19 Phân tích đánh giá thuật toán CHƯƠNG 4: CÀI ĐẶT CHƯƠNG TRÌNH 1 Giới thiệu chương trình Chương trinh Thuật toán. .. một thuật toán cho yêu cầu trên một bài toán, và với mỗi yêu cầu, sẽ có một hoặc một vài thuật toán sẽ tỏ ra tốt hơn so với các thuật toán khác Trong phạm vi bài tập này em mới chỉ tìm hiểu và nghiên cứu được 2 phương pháp để giải bài toán cái túi: Phương pháp Q uy hoạch động để giải bài toán cái túi dạng 0-1, phương pháp Tham lam để giải bài toán cái túi dạng phân số 22 Phân tích đánh giá thuật toán. .. lớn nhất cả cái túi là: 19.7778$ 21 Phân tích đánh giá thuật toán KẾT LUẬN Nghiên cứu, thiết kế giải thuật và đánh giá độ phức tạp của từng giải thuật là một vấn đề hết sức quan trọng Sau quá trình nghiên cứu giải bài toán cái túi bằng phương pháp xấp xỉ, em nhận thấy, thực tế không có thuật toán nào là luôn tốt nhất cả, vấn đề là trong phạm vi Bài toán nào thì thụât toán nào sẽ có lợi hơn Ví dụ: Phương... tiên, xếp toàn bộ đồ vật vào túi + Đối với đồ vật được chọn cuối cùng, có thể chỉ xếp một phần đồ vật vào túi Thuật toán dừng khi cái túi đầy Thuật toán tham lam chọn đồ vật có tỷ lệ giá trị trên trọng lượng (v i/wi) giảm dần Thuật toán: for(i=0;i w, đồ vật k không được sử dụng 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) 14 Phân tích đánh giá thuật toán K 0 1 2 0 0 0 0 0 0 0 0 3 3 3 3 0 0 3 4 4 7 3 4 W 0 1 2 3 4 5 0 0 3 4 5 7 0 0 3 4 5 7 Các đồ vật sử dụng: 1, 2 Giá trị lớn nhất: 7 Nhận xét: Bài toán cái túi có thể dễ dàng giải được bằng Phương pháp Quy hoạch động nếu W không lớn, nhưng khi W lớn thì thời gian... đồ vật lần lượt có (Trọng lượng, giá trị) (2,3), (3,4), (4,5), (5,6) Kết quả chạy chương trình như sau: * Thuật toán xấp xỉ theo phương pháp Quy hoạch động: Thêm đồ vật 1 < 3$ 2kg> Không gian còn lại: 3 Thêm đồ vật 2 < 4$ 3kg> Không gian còn lại: 0 Tổng giá trị lớn nhất của cái túi là: 7$ * Thuật toán xấp xỉ theo phương pháp tham lam: Thứ tự là Tổng giá trị lớn nhất cả cái túi là:... while ( A ≠ ∅) { x= Chọn(A); A = A-{x} if( S ∪ {x} chấp nhận được ) S = S ∪ {x}; } return S; 3 Thuật toán tham lam giải bài toán cái túi: Input: w = (w1, w2, …, wn); // Trọng lượng của các đồ vật v = (v1, v2, …, vn); // Giá trị của các đồ vật W: Sức chứa của cái túi Output: - Đánh dấu các vật được chọn - Giá trị lớn nhất của túi Ý tưởng: Ở mỗi bước, chọn đồ vật triển vọng nhất và xếp vào cái túi một