Tải bản đầy đủ (.doc) (9 trang)

BÀI TOÁN CÁI TÚI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (299.05 KB, 9 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Viện Công nghệ Thông tin và Truyền thông
BÀI TẬP LỚN MÔN HỌC
THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN
Đề tài:
BÀI TOÁN CÁI TÚI

Học viên thực hiện:
1. Đào Duy Thành. SHHV:20082364

Mã lớp: 29106
Giáo viên hướng dẫn: PGS Nguyễn Đức Nghĩa
HÀ NỘI – 2011
1
Mục lục
Mục lục.............................................................................................................................................................2
Giới thiệu :........................................................................................................................................................3
Chương I : Bài toán cái túi................................................................................................................................4
1.1Giới thiệu.................................................................................................................................................4
1.2Bài toán cái túi dạng 0-1..........................................................................................................................4
1.3Bài toán cái túi dạng phân số...................................................................................................................5
Chương 2: Giải bài toán cái túi bằng thuật toán trực tiếp (Brute-force)............................................................5
Chương 3: Giải bài toán cái túi bằng thuật toán tham lam................................................................................5
3.1 Greedy 1.................................................................................................................................................5
3.2 Greedy 2.................................................................................................................................................5
3.3 Greedy 3.................................................................................................................................................5
3.4 Greedy 4.................................................................................................................................................5
3.5 Thực hiện bài toán cái túi theo Greedy 3 bằng C++................................................................................6
Chương IV: Giải bài toán cái túi bằng thuật toán quy hoạch động...................................................................7
4.1 Mô tả:.....................................................................................................................................................7
4.2 Nhận xét:................................................................................................................................................8


Tài liệu tham khảo chính:.................................................................................................................................9
2
Giới thiệu :
Báo cáo này sẽ trình bày về các thuật toán giải quyết bài toán cái túi. Trong đó có sử dụng 2
giải thuật là: giải thuật tham lam (Greedy) và Quy hoạch động (Dynamic progaming). Từ đó đưa ra
các đánh giá về độ phức tạp của thuật toán và lựa chọn phương án tối ưu.
Xin chân thành cám ơn thầy Nguyễn Đức Nghĩa đã giúp đỡ em thực hiện bài toán này
Hà Nội tháng 12 năm 2011
3
Chương I : Bài toán cái túi
1.1 Giới thiệu.
Bài toán cái túi (hay còn gọi là bài toán xếp ba lô) là một bài toán tối ưu tổ hợp. Bài toán được
đặt tên từ vấn đề chọn những gì quan trong có thể nhét vừa vào một cái túi (với giới hạn khối lượng)
để mang theo trong một chuyến đi.
Nội dung bài toán như sau: Một kẻ trộm đột nhập vào một cửa hiệu tìm thấy có n mặt hàng có
trọng lượng và giá trị khác nhau, nhưng hắn chỉ mang theo một cái túi có sức chứa về trọng lượng
tối đa là M. Vậy kẻ trộm nên bỏ vào túi những món nào và số lượng bao nhiêu để đạt giá trị cao nhất
trong khả năng mà hắn có thể mang đi được.
Ví dụ về bài toán cái túi trong giới hạn một chiều: chọn các hộp nào để làm cho giá trị tiền là
cực trại khi tổng trọng lượng không vượt quá 15kg? Bài toán đa chiều có thể xét đến khối lượng riêng
và kích thước của hộp, đó là bài toán xếp vali điển hình(packing problem)
Ta có n loại đồ vật, từ 1 tới n. Mỗi đồ vật thứ i có trọng lượng w[i] và giá trị v[i]. Trọng lượng
tối đa mà túi có thể mang được là S.
1.2 Bài toán cái túi dạng 0-1.
Hạn chế số đồ vật thuộc mỗi loại là 0 (không được chọn ) và 1 (được chọn).
Bài toán cái túi có thể được phát biểu bằng toán học như sau:
Cực đại hóa
Sao cho với hoặc 1
Bài toán cái túi bị chặn hạn chế số đồ vật huộc mỗi loại nào đó không được vượt quá một lượng nào
đó.

Có thể được phát biểu bằng toán học như sau
Cực đại hóa
Sao cho với
Bài cái túi không bị chặn không có một hạn chế nào về số lượng đồ vật mỗi loại.
Một trường hợp đặc biệt của bài toán này nhận được nhiều quan tâm, đó là bài toán với các tính chất:
• là một bài toán quyết định
• là một bài toán 0/1
• với mỗi đồ vật, chi phí bằng giá trị: C = V
4
Trường hợp đặc biệt này được gọi là bài toán tổng các tập con (subset sum problem). Với
một số lý do, trong ngành mật mã học, người ta thường dùng cụm từ "bài toán cái túi khi thực ra đang
có ý nói về "bài toán tổng con".
Bài toán cái túi thường được giải bằng quy hoạch động, tuy chưa có một thuật toán thời gian
đa thức cho bài toán tổng quát. Cả bài cái túitổng quát và bài toán tổng con đều là các bài NP-khó, và
điều này dẫn đến các cố gắng sử dụng tổng con làm cơ sở cho các hệ thống mật mã hóa khóa công
khai, chẳng hạn Merkle-Hellman. Các cố gắng này thường dùng nhóm thay vì các số nguyên. Merkle-
Hellman và một số thuật toán tương tự khác đã bị phá, do các bài toán tổng con cụ thể mà họ tạo ra
thực ra lại giải được bằng các thuật toán thời gian đa thức.
Phiên bản bài toán quyết định của bài toán cái túi được mô tả ở trên là NP-đầy đủ và trong
thực tế là một trong 21 bài toán NP-đầy đủ của Karp.
1.3 Bài toán cái túi dạng phân số
Với mỗi loại, có thể chọn một phần của nó (ví dụ: 1Kg bơ có thể được cắt ra thành nhiều phần
để bỏ vào ba lô)
Chương 2: Giải bài toán cái túi bằng thuật toán trực tiếp (Brute-force)
Phương pháp này duyệt tất cả khả năng chất đồ vào túi, tìm cách chất có tổng giá trị lớn
nhất trong số các cách chất co tổng trọng lượng các đồ vật không quá dung lượng của túi
Tuy nhiên, phương pháp này ít được sử dụng do có độ phức tạp O (n
2
)
Chương 3: Giải bài toán cái túi bằng thuật toán tham lam

3.1 Greedy 1
• Giải thuật: sắp xếp các đồ vật theo thứ tự không tăng của giá trị.
• Lần lượt xét các đồ vật theo thứ tự đã sắp , và chất đồ đang xét vào túi nếu như dung lượng
còn lại của cái túi đó đủ chứa nó (tức là tổng trọng lượng của các đồ vật đã xếp vào túi và
trọng lượng của các đồ vật đang xét không vượt quá khả năng của túi).
Tuy nhiên, phương pháp này chưa cho lời giải chính xác
3.2 Greedy 2
• Sắp xếp các đồ vật theo thứ tự không giảm của trọng lượng
• Lần lượt xét các đồ vật theo thứ tự đã sắp , và chất đồ đang xét vào túi nếu như dung lượng
còn lại của cái túi đủ chứa nó (tức là tổng trọng lượng của các đồ vật đã xếp vào túi và trọng
lượng của các đồ vật đang xét không vượt quá dung lượng của túi).
Tương tự Greedy 1, phương pháp này chưa mang lại được độ chính xác cần thiết
3.3 Greedy 3
• Sắp xếp các đồ vật theo thứ tự không tăng của giá trị một đơn vị trọng lượng ( )
• Lần lượt xét các đồ vật theo thứ tự đã sắp, và chất đồ vật đang xét vào túi nếu như dung lượng
còn lại của cái túi đủ chứa nó
3.4 Greedy 4
• Gọi là lời giải thu được theo thuật toán Greedy j , j=1;2;3 Gọi là lời giải đạt
5

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×