Thuật toán tham lam
BÀI TẬP LỚN : CÔNG NGHỆ PHẦN MỀM THUẬT TOÁN THAM LAM MỤC LỤC A THUẬT TOÁN THAM LAM VÀ MỘT SỐ BÀI TOÁN ỨNG DỤNG THUẬT TOÁN I TỔNG QUAN VỀ THUẬT TOÁN THAM LAM I.1 Giải thuật tham lam ? I.2 Cơ sở lý thuyết giải thuật tham lam I.3 Nguyên tắc- Đặc điểm thuật toán tham lam I.4 Điều kiện để toán áp dụng giải thuật tham lam I.5 Những dạng toán mà thuật toán tham lam thường áp dụng để giải II THUẬT TOÁN THAM LAM II.1 Mục tiêu nghiên cứu giải thuật tham lam II.2 Các thành phần chiến lược tham lam II.3 Sơ đồ thuật toán II.4 Một số chiến lược tham lam -Tiến trình bước thực thuật toán tham lam II.5 Chứng minh tính đắn III MỘT SỐ BÀI TOÁN ÁP DỤNG THUẬT TOÁN THAM LAM III.1 Bài toán người du lịch III.2 Bài toán mã Huffman III.3 Bài toán lập lịch công việc B- THUẬT TOÁN THAM LAM VÀ BÀI TOÁN CÁI TÚI Mô tả toán Phân tích toán Các trường hợp toán túi Phân tích chiến lược lựa chọn tham lam Tính tối ưu thuật toán toán túi phân số Viết chương trình NỘI DUNG A THUẬT TOÁN THAM LAM VÀ MỘT SỐ BÀI TOÁN ỨNG DỤNG THUẬT TOÁN I TỔNG QUAN VỀ THUẬT TOÁN THAM LAM I.1 Thuật toán tham lam ? Thuật toán tham lam (tiếng Anh: Greedy algorithm) thuật toán giải toán theo kiểu metaheuristic để tìm kiếm lựa chọn tối ưu địa phương bước với hy vọng tìm tối ưu toàn cục Chẳng hạn áp dụng giải thuật tham lam với toán hành trình người bán hàng ta có giải thuật sau: "Ở bước đến thành phố gần thành phố nhất" Các thuật toán kiểu metaheuristic thuật toán thường lấy cảm hứng từ tự nhiên Ví dụ thuật toán thép, thuật toán di truyền… Phương pháp vận dụng nhiều vào các toán lý thuyết( dijkstra,prim,kruskal…),và thực tế như( toán rút tiền tự động ATM,người du lịch, ba lô(cái túi)…) ( http://vi.wikipedia.org/wiki/Gi%E1%BA%A3i_thu%E1%BA%ADt_tham_lam) I.2 Lý thuyết Matroids (http://www.slideshare.net/hcdung18/phng-php-tham-lam) Lý thuyết matroids , lý thuyết cho phép xác định thuật toán tham lam đưa phương án tối ưu Nó liên quan đến cấu trúc tổ hợp biết “matroids”_Lý thuyết Matroids ông Hasser Whitney đưa báo “ On the abstract properties of linear dependence” Lý thuyết không áp dụng cho tất trường hợp (ví dụ, không áp dụng cho toán lựa chọn hoạt động toán mã Huffman), áp dụng số trường hợp mang tính thực tế ví dụ: toán tìm khung nhỏ Lý thuyết phát triển mở rộng để áp dụng cho nhiều ứng dụng Các định nghĩa liên quan đến lý thuyết trên: 1.Định nghĩa Matroids Một matroid mà có thứ tự M=(S,l), thỏa mãn: – S tập hữu hạn khác rỗng (tập không rỗng hữu hạn) – ℓ họ khác rỗng tập (độc lập) S, thỏa mãn: B∈l A⊆B A∈l (ta nói l di truyền) Lưu ý : tập rỗng thiết phải phần tử l – M thỏa mãn tính chất trao đổi (exchange) A∈l, B∈l |A|= w(y) với y ∈B x∉B : xây dựng tập A Cấu trúc tập A sau: Bắt đầu với A={x} Do cách chọn x, nên A tập độc lập Sử dụng thuộc tính trao đổi , lặp lại việc tìm phần tử B cho thêm vào A |A|=|B| giữ tính độc lập A Lúc A=B-{y}∪ {x} với y∈ B, vậy: w(A)= w(B)-w(y)+w(x)>=w(B) B tối ưu, A phải tối ưu, x ∈ A bổ đề Bổ đề 2: Với matroid M=(S,l) Nếu x∈S mở rộng tập độc lập A S x mở rộng ∅ Chứng minh: • • x mở rộng A ⇒ A∪{x} độc lập l di truyền ⇒ {x} độc lập Hệ 1: Matroid M=(S,l) Nếu x∈S mà x không mở rộng ∅ x không mở rộng tập độc lập A S Bổ đề 3: Matroid có tính cấu trúc tối ưu Gọi x phần tử S chọn hàm Greedy Vấn đề lại việc tìm tập độc lập có trọng số cực đại (chứa x) tìm tập độc lập có trọng số cực đại matroid có trọng số M’=(S’,l’) với điều kiện : S’ = {y∈S | {x,y}∈l, l’ = {B⊆S-{x} | B∪{x}∈S}, Hàm trọng số cho M’ hàm trọng số cho M giới hạn S’ (gọi M’ rút gọn M x) Tính đắn thuật toán tham lam matroids: Nếu M=(S,l) matroid có trọng số với hàm trọng số w hàm Greedy(S, l,w) trả tập tối ưu Chứng minh: • Hệ → phần tử bị bỏ lúc đầu không hữu dụng → sau khôn cần xét lại chúng • Bổ đề → phần tử x chọn, Greedy thêm x vào A tồn tập tối ưu chứa x • Bổ đề → bái toán lại tìm tập tối ưu matroid M’ (M’ rút gọn M x) I.3 Nguyên tắc- Đặc điểm thuật toán tham lam Mục đích phương pháp tham lam (Greedy) xây dựng toán giải nhiều lớp toán khác nhau, đưa định dựa vào thuật toán có, tương lai không xem xét lại định khứ Do thuật toán tham lam có ưu điểm: • • Dễ đề xuất, Thời gian tính nhanh Thuật toán tham lam có đặc điểm sau đây: Lời giải toán tập hữu hạn S phần tử thoả mãn điều kiện đó, ta phải giải toán cách tối ưu Nói cách khác, nghiệm S phải xây dựng cho hàm mục tiêu f(S) có giá trị tốt (lớn hay nhỏ nhất) Các bước giải toán sau: • • • • • Có tập ứng cử viên C để chọn cho thành phần nghiệm bước Xuất phát từ lời giải rỗng S, bước thuật toán, ta lựa chọn ứng cử viên C để bổ sung vào lời giải S có Xây dựng hàm Select(C) bước chọn để lựa chọn ứng cử viên có triển vọng để đưa vào lời giải S Xây dựng hàm Feasible(S ∪ x) để kiểm tra tính chấp nhận ứng cử viên x đưa vào tập nghiệm S Cuối có tập S ,xây dựng hàm Solution(S) để kiểm tra tính chấp nhận lời giải S I.4 Điều kiện để toán áp dụng giải thuật tham lam Các dạng tìm phương án tối ưu toán người du lịch, toán túi… Chúng thuộc lớp toán tối ưu tổ hợp trường hợp riêng toán tối ưu Các toán tối ưu tổ hợp có nhiều ứng dụng thực tiễn việc ứng dụng trở nên tốt nhiều người ta nghiên cứu thuật toán tối ưu cài đặt máy tính điện tử Một thuật toán để giải toán thuật toán tham lam Thuật toán tham ăn (greedy algorithms ) dùng để giai toán mà ćo thể định đâu lựa chọn tốt Các toán áp dụng giải thuật tham lam có đặc điểm sau đây: • • Tính lựa chọn tham lam (greedy choice property): Một nghiêm tối ưu nhận cách thực lựa chọn phương án tốt thời điểm không cần quan tâm tới gợi ý nghiệm toán Tức nghiêm tối ưu toán nhận cách thực lựa chọn tối ưu cục Tính chất cấu trúc tối ưu: Một nghiệm tối ưu nhận cách thêm nghiệm thành phần xây dựng với nghiêm tối ưu toán vào Tức nghiêm tối ưu chứa nghiệm tối ưu toán nhỏ Nếu chứng minh thuật toán tham lam cho kết tối ưu toàn cục cho lớp toán đó, thuật toán thường trở thành phương pháp chọn lựa, chạy nhanh phương pháp tối ưu hóa khác quy hoạch động Tuy nhiên số trường hợp thuật toán tham lam cho nghiêm gần với nghiêm tối ưu I.5 Những dạng toán mà thuật toán tham lam thường áp dụng để giải Các thuật toán tham lam chủ yếu để giải toán tối ưu Các toán tối ưu toán có dạng tổng quát sau: Hàm f(X) gọi hàm mục tiêu , xác định tập hữu hạn phần tử D Mỗi phần tử X thuộc D có dạng X=(x1,x2,….,xn) gọi phương án Tìm phương án X0 thuộc D cho f(X) đạt max D Thì X gọi phương án tối ưu Tập D gọi tập phương án toán Ví dụ dạng toán sau: Một tập đối tượng Một dãy đối tượng lựa chọn Một hàm để xem tập đối tượng có lập thành giải pháp hay không (không thiết tối ưu) Một hàm để xem tập đối tượng có tiềm hay không Một hàm để lựa chọn ứng viên có triển vọng Một hàm đích cho giá trị giải pháp (để tối ưu hóa) II THUẬT TOÁN THAM LAM II.1 Mục tiêu nghiên cứu thuật toán tham lam Mục tiêu nghiên cứu : Làm rõ chất tìm hiểu ứng dụng thuật toán thực tế.Trên sở lý thuyết nghiên cứu áp dụng vào chương trình : toán túi II.2 Các thành phần chiến lược tham lam Thuật toán tham lam có thành phần: Một tập hợp ứng viên (candidate), để từ tạo lời giải Một hàm lựa chọn, để theo đố lựa chọn ứng viên tốt để bổ sung vào lời giải Một hàm khả thi (feasibility), dùng để định ứng viên dùng để xây dựng lời giải Một hàm mục tiêu , ấn định giá trị lời giải lời giải chưa hoàn chỉnh Một hàm đánh giá, ta tìm lời giải hoàn chỉnh Có thành phần định đến tham lam: Tính lựa chọn tham lam Chúng ta lựa chọn giải pháp cho tốt thời điểm sau giải toán nảy sinh từ việc thực lựa chọn vừa Tại bước,lựa chọn thuật toán tham lam phụ thuộc vào lựa chọn trước Nhưng phụ thuộc vào lựa chọn tương lai hay phụ thuộc vào lời giải toán Thuật toán tiến triển theo kiểu thực chọn lựa theo vòng lặp, lúc thu nhỏ toán cho toán nhỏ Sự khác biệt thuật toán tham lam giải thuật quy hoạch động : Giải thuật quy hoạch động duyệt hết đảm bảo tìm thấy lời giải Tại bước thuật toán, quy hoạch động đưa định dựa định bước trước, xét lại đường bước trước hướng tới lời giải Giải thuật tham lam định sớm thay đổi đường thuật toán theo định đó, không xét lại định cũ Đối với số toán, thuật toán không xác Cấu trúc tối ưu Một toán gọi "có cấu trúc tối ưu", lời giải tối ưu toán chứa lời giải tối ưu toán Chứng minh: - Theo tính chất lựa chọn tham lam, tồn giải pháp tối ưu S chứa lựa chọn tham lam a Theo tính chất cấu trúc tối ưu, X-{a1} giải pháp tối ưu toán không chứa a1 - Áp dụng cho toán không chứa a1, theo tính chất lựa chọn tham lam, X-{a1} giải pháp tối ưu chứa lựa chọn tham lam a Theo tính chất cấu trúc tối ưu, X-{a 1,a2} giải pháp tối ưu cho toán không chứa a1 a2 - Tiếp tục thế, cuối ta có: X-{a1,a2,…,an}= ∅ Vậy giải pháp tối ưu X toán ban đầu dãy lựu chọn tham lam thực thuật toán tham lam II.3 Sơ đồ thuật toán procedure Greedy; begin C := Tập ứng cử viên; S := ∅ {S lời giải cần xây dựng theo thuật toán} while (C ≠ ∅) and not Solution(S) begin x Select(C); C := C \ x; if feasible(S ∪ x) then S := S ∪ x; end; if Solution(S) then Return S end; II.4 Một số chiến lược - Tiến trình thực – Các bước thực thuật toán tham lam Một số chiến lược tham lam: Tham lam thường đề cập đến hai chiến lược tối ưu cục bản: Chọn phương án tốt trước (‘chọn miếng ngon trước’)à lý gọi thuật toán tham lam Chiến lược thường áp dụng xây dựng dần phần nghiệm tối ưu Thuật toán đánh giá lựa chọn theo tiêu chuẩn xếp từ nhỏ tới lớn Rồi tiến hành lựa chọn theo trình tự Cải tiến có thành tốt Chiến lược thường bắt đầu hay vài phương án Sau cách thức đó, phương án điều chỉnh để có giá trị tốt Quá trình điều chỉnh dừng lại không điều chỉnh thêm cải thiện nhỏ hết thời gian cho phép… phần lớn giải thuật áp dụng chiến lược Một cách tổng quát, thực phương pháp Tham lam qua bước: Tìm lựa chọn cho bước việc giải toán Chứng minh: với lựa chọn Tham lam bước → tìm giải pháp tối ưu (cho toán ban đầu) Chỉ ra: với lựa chọn Tham lam bước → giải pháp tối ưu toán lại kết hợp với lựa chọn Tham lam đến giải pháp tối ưu (cho toán ban đầu) II.5 Chứng minh tính đắn Lập luận biến đổi (Exchange Argument) Giả sử cần chứng minh thuật toán A cho lời giải A(I) lời giải tìm thuật toán A liệu I Còn O lời giải tối ưu toán với liệu Ta cần tìm cách xây dựng phép biến đổi ⱷ để biến đổi O thành O’ cho : • • O’ tốt không O (Nghĩa O’ tối ưu) O’ giống với A(I) nhiều O Giả sử xây dựng phép biến đổi vừa nêu Để chứng minh tính đắn dựa vào hai sơ đồ chứng minh sau 1) CM phản chứng : Giả sử A không đắn, tìm liệu I cho A(I) khác với lời giải tối ưu toán Gọi O lời giải tối ưu giống với A(I) => A(I) khác O Dùng phép biến đổi ⱷ biến đổi O O’ cho O’ tối ưu O’ giống với A(I) => mâu thuẫn giả thiết O lời giải tối ưu giống với A(I) 2) CM trực tiếp : O lời giải tối u Biến đổi O O’ giống với A(I) O Nếu O’ = A(I) A(I) phương án tối u ngược lại biến đổi O’ O’’ giống với A(I) Cứ ta thu dãy O’, O’’ ,O’’’ … ngày giống hơn, có số hữu hạn điều kiện để so sánh nên sau số hữu hạn lần phép biến đổi kết thúc A(I) III- MỘT SỐ BÀI TOÁN ÁP DỤNG THUẬT TOÁN THAM LAM III.1 Bài toán người du lịch Mô tả toán Có n thành phố đánh số theo thứ tự từ đến n Người du lịch xuất phát từ thành phố ghé thăm thành phố lại, thành phố thăm lần sau trở nơi xuất phát Biết chi phí lại từ thành phố i đến thành phố j Cij Hãy tìm hành trình có chi phí thấp cho người du lịch Ý tưởng giải toán Đây toán tìm chu trình có trọng số nhỏ đơn đồ thị vô hướng có trọng số.Thuật toán tham lam cho toán chọn thành phố có chi phí nhỏ tính từ thành phố thời đến thành phố chưa qua Phân tích : • Đầu vào: số thành phố n, chi phí tử thành phố i đến thành phố j (Cij) • Đầu ra: Hành trình tối ưu chi phi tương ứng Mô tả toán thuật toán tham lam sau: Không tính tổng quát ta giả sử người du lịch xuất phát từ thành phố Mỗi chu trình đường TP1,TPi1, TPi2 ,TPi3,.,TPin, TP1 đặt tương ứng 1-1 với hoán vị (i 1,i2,… ,in) 2,3,….,n Gọi C(ikil)là chi phí từ thành phố ik đến thành phố il Khi chi phí chu trình tổng chi phí chặng: Đặt f(x) = C(1-i1)+ C(i1-i2)+… + C(in-1 - in) C(in- 1) Ký hiệu D tập tất hoán vị n-1 số 2,3,….n, phát biểu toán người du lịch dạng sau: {f(x) -> min; x thuộc D} Chương trình mã giả minh họa cho thuật toán Thủ tục minh họa: Chu_trinh:= rỗng; Chi_phi:=0; Vi_tri:=1;// xuất phát từ thành phố For k:=1 to n-1 do//thăm tất thành phố Begin //chọn thành phố X chưa tới cho chi phí C(vitri-X) nhỏ Chu_trinh:=chu_trinh +(vi_tri,X); Chi_phi:=chi_phi+C(vi_tri-x); Vi_tri := x; End; //trở nơi xuất phát Chu_trinh:=chu_trinh +(vi_tri,1); Chi_phi:=chi_phi +C(vitri-1); End Đánh giá độ phức tạp Thao tác chọn đỉnh thích hợp n đỉnh tổ chức vòng lặp để duyệt Nên chi phí cho thuật toán xác định hai vòng lặp lồng , nên T(n) O(n2) III.2.Bài toán mã Huffman Mô tả toán Mã Huffman kỹ thuật dùng phổ biến hữu hiệu cho việc nén liệu (data compression) tiết kiệm từ 20% đến 90% phụ thuộc vào đặc điểm liệu nén Xét toán mã hóa ký tự Giải thuật tham lam Huffman sử dụng bảng tần suất xuất ký tự để tạo cách tối ưu biểu diễn kí tự chuỗi nhị phân (binary string) Giả sử ta có tập tin 100 ký tự cần nén Chỉ có ký tự khác file với tần số xuất hình Trong ký tự a xuất 45 lần Ký tự a b C d e f Tần số 45 13 12 16 Từ mã có chiều dài cố 000 001 010 011 100 101 định Từ mã có chiều dài bất định 101 100 111 1101 1100 Có nhiều cách để biểu diễn thông tin Giả sử biểu diễn ký tự dạng chuỗi nhị phân Nếu dùng mã chiều dài cố định (fixed length) cần bit để biểu diễn ký tự a=000, b=001…, f=101 file có 100 ký tự cần 300 bits để mã hóa file Mã có chiều dài thay đổi (variable-length code) làm việc tốt mã có chiều dài cố định (fixed-length code), b tằng cách gán cho ký tự hay xuất mã ngắn ký tự xuất mã dài Ví dụ : mã hóa sau: a=0 , b=101, …, f=1100 Khi cần (45*1+13*3+12*3+16*3+9*4+5*4)=224 Tiết kiệm gần 25% Đây mã tối ưu cho toán Mã phi-tiền tố (prefix-free code): mã từ mã tiền tố vài từ mã khác Điều việc nén liệu tối ưu thực việc mã hoá ký tự luôn hoàn thành với mã tiền tố, không tính tổng quát việc giới hạn ý đến mã tiền tố Mã hóa mã ký tự nhị phân: Việc mã hóa luôn đơn giản mã ký tự nhị phân Ta cần ghép nối mã biểu diễn ký tự tập tin với Ví dụ: Áp dụng mã tiền tố chiều dài thay đổi để mã hóa file ký tự abc à0.101.100 =0101100 với “.” Là ký hiệu nối Quá trình giải mã (decoding) cần biểu diễn cách thích hợp mã tiền tố cho dễ dàng khôi phục lại từ mã (codeword) lúc đầu Biểu diễn mã tiền tố nhị phân Mã tiền tố biểu diễn dạng nhị phân (binary tree) mà ký tự mã hóa Mã nhị phân từ (binary codework) đường từ gốc tới Với quy ước đến trái, đến phải Ví dụ mã tiền tố nhị phân: Mã chiều dài cố định 10 Mã tiền tố bất định (mã tiền tố tối ưu) Xây dựng mã Huffman Huffman đề xuất giải thuật tham lam để xây dựng mã nhị phân tiền tố tối ưu gọi giải thuật mã hóa Huffman ( Huffman code) Nội dung- Ý tưởng giải toán • Giả sử C tập n ký tự ký tự c∈C có tần số xuất f[c] • Giải thuật Huffman xây dựng T tương ứng với mã tối ưu theo phương thức bottom-up • Giải thuật bắt đầu với tập gồm |C| thực chuỗi gồm |C|-1 thao tac “merging” (trộn) để tạo cuối • Một hàng đợi ưu tiên nhỏ Q, lập khoá f, sử dụng để nhận biết đối tượng có tần số nhỏ để kết hợp với Kết kết hợp phần tử phần tử mà tần số tổng tần số phần tử kết hợp • Cây cuối biểu diễn mã tiền tố tối ưu Mã (codeword) ký tự chuỗi (chữ cái) nhãn cạnh (edge labels) đường dẫn (path) từ gốc đến ký tự Chương trình mã giả minh họa cho thuật toán HUFFMAN(C) n← |C| Q←C fori ton - allocate a new node z left[z] ←x← EXTRACT-MIN (Q) right[z] ←y← EXTRACT-MIN (Q) f [z] ←f [x] + f [y] INSERT(Q, z) return EXTRACT-MIN(Q) ▹Return the root of the tree Minh họa bước thực hiện: 11 Đánh giá độ phức tạp Giả sử Q thực thi nhị phân (binary min-heap) Đối với tập C chứa n ký tự, việc khởi tạo Q thực thi với thời gian O(n).Vòng lặp for (3-8) thực thi xác n-1 lần, phép toán đống yêu cầu thời gian O(logn), nên vòng lặp đóng góp O(nlogn) vào thời gian chạy thuật toán.Vì , tổng thời gian chạy giải thuật Huffman tập hợp gồm n ký tự O(nlogn) III.3 Bài toán xếp lịch xếp lịch cho hoạt động Mô tả toán • Xét S = {a1,a2, an } tập hoạt động muốn sử dụng tài nguyên (vd:hội trường) • Mỗi hoạt động có thời điểm bắt đầu s i thời điểm kết thúc f i, với điều kiện ≤ si < fi < ∞ Nếu hoạt động chọn, độc chiếm tài nguyên khoảng thời gian [s i, fi) Hoạt động aj gọi tương thích lẫn khoảng thời gian [s i, fi) [sj, fj) không giao Yêu cầu: Mỗi thời điểm có hoạt động sử dụng tài nguyên chung Mục tiêu: Chọn tập lớn hoạt động tương thích với (khoảng thời gian thực không giao nhau)=>Tận dụng tối đa tài nguyên Ví dụ aj tương thích si ≥ fj sj ≥ fi Ý tưởng giải toán Xét toán khác rỗng Sij,và am hoạt động Sij có thời điểm kết thúc sớm nhất: fm = min{fk : ak ϵSij} Thì: • Hoạt động am sử dụng tập lớn hoạt động tương thích lẫn Sij • Bài toán Sim rỗng, chọn a m toán khác rỗng Smj Mục tiêu : o o Giảm số toán số cách chọn: Chỉ toán sử dụng giải pháp tối ưu (một toán khác rỗng) Chỉ cần chọn lựa cho toán con: chọn hoạt động có thời gian kết thúc sớm Sij (dễ dàng) Có thể giải toán theo pp top down (thay bottom up lập trình động) Vì chọn am chắn lời giải Smj dùng lời giải tối ưu Sij ->không cần giải Smj trước giải Sij Tóm lại =>Để giải toán S ij ,đầu tiên chọn hoạt động am Sij có thời gian kết thúc sớm tìm lời giải cho toán Smj Chương trình minh họa cho thuật toán Input: • Mảng s f biểu diễn thời điểm bắt đầu kết thúc hoạt động 12 Giả sử n hoạt động xếp theo thứ tự tăng dần thời điểm kết thúc.Theo CT(16.1): f0 ≤ f1 ≤ f2 ≤ ≤fn ≤ fn+1 Output: • Trả tập lớn hoạt động tương thích với Si,n+1 Chương trình : • RECURSIVE-ACTIVITY-SELECTOR (s ,f ,i, n) mi+1 while m < n and sm < fi ØTìm hoạt động Si,n+1 m m+1 if m < n then return {am} U RECURSIVE-ACTIVITY-SELECTOR(s ,f ,m ,n) else return Ø Đánh giá độ phức tạp Thời gian chạy RECURSIVE-ACTIVITY-SELECTOR (s,f,0,n) O(n) B THUẬT TOÁN THAM LAM VÀ BÀI TOÁN CÁI TÚI Mô tả toán Bài toán túi (hay gọi toán xếp ba lô) toán tối ưu 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 Một số cách phát biểu nội dung toán: Một kẻ trộm đột nhập vào cửa hiệu tìm thấy có n mặt hàng có khối lượng giá trị khác nhau, mang theo túi có sức chứa khối lượng tối đa M/ Vậy kẻ trộm nên bỏ vào túi số lượng để đạt giá trị cao khả mà mang Một hành khách mang theo vali có khối lượng hàng hoá tối đa M Hành khách chuẩn bị N đồ vật đánh số từ đến N để chuẩn bị mang theo Đồ vật thứ i có khối lượng a i giá trị sử dụng ci (i = 1, 2, N) Yêu cầu: Chỉ đồ vật mà hành khách cần mang theo cho tổng giá trị sử dụng lớn nhất? Phân tích toán Bài toán: Cho n đồ vật balo có khối lượng tối đa W Mỗi vật có khối lượng wi Mỗi vật có giá trị vi Gọi xi phần đồ vật ( 0[...]... RECURSIVE-ACTIVITY-SELECTOR (s,f,0,n) là O(n) B THUẬT TOÁN THAM LAM VÀ BÀI TOÁN CÁI TÚI 1 Mô tả bài toán Bài toán cái túi (hay còn gọi là bài toán sắp 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 trọng có thể nhét vừa vào một cái túi (với một giới hạn khối lượng) để mang theo một chuyến đi Một số cách phát biểu nội dung bài toán: Một kẻ trộm đột nhập vào một cửa... 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 đủ ( lớp NP-đầy đủ là một lớp các bài toán quyết định)và trong thực tế là một trong 21 bài toán NP-đầy đủ của Karp Bài toán cái túi dạng phân số Với mỗi... bài toán 0/1 - với mỗi đồ vật, chi phí bằng giá trị: C = V 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 dạng này 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. .. 2 10 5 3 3 12 4 Khối lượng tối đa của túi là 5 Phương pháp tham lam sẽ chọn đồ vật 1 và 2 với tổng giá trị là 16 Trong khi phương án tối ưu là chọn đồ vật 2 và 3 với tổng giá trị là 22 Phương án này cũng không đem lại lời giải tối ưu 5 - Tính tối ưu của thuật toán trong bài toán cái túi dạng phân số: Bài toán cái túi dạng phân số: Thuật toán: X[n]: mảng chứa các đồ vật được lấy V: giá trị lớn nhất... wi; i:=i+1; V:=V+vi; End; V:=V+ vi(w/wi); End; Chứng minh tính tối ưu: Cách 1: chứng minh trực tiếp Cách 2: chứng minh dựa vào 2 tính chất của thuật toán tham lam • Tính chất lựa chọn tham lam : cần chỉ ra rằng tồn tại phương án tối ưu chứa một lựa chọn tham lam 15 Giả sử k là đồ vật có tỉ lệ vk/wk lớn nhất, S là một giải pháp tối ưu, giá trị của S và V(S) Bằng phản chứng: Giả sử S không chứa k Tổng... dựng mã Huffman Huffman đã đề xuất một giải thuật tham lam để xây dựng một mã nhị phân tiền tố tối ưu được gọi là giải thuật mã hóa Huffman ( Huffman code) 2 3 Nội dung- Ý tưởng giải quyết bài toán • Giả sử C là tập n ký tự và mỗi ký tự c∈C có tần số xuất hiện là f[c] • Giải thuật Huffman xây dựng cây T tương ứng với mã tối ưu theo phương thức bottom-up • Giải thuật bắt đầu với một tập gồm |C| lá và thực... O(n).Vòng lặp for (3-8) được thực thi chính xác n-1 lần, và vì mỗi phép toán đống yêu cầu thời gian là O(logn), nên vòng lặp đóng góp O(nlogn) vào thời gian chạy thuật toán. Vì vậy , tổng thời gian chạy của giải thuật Huffman trên tập hợp gồm n ký tự là O(nlogn) 4 III.3 Bài toán xếp lịch xếp lịch cho các hoạt động 1 2 3 4 Mô tả bài toán • Xét S = {a1,a2, an } là tập các hoạt động muốn sử dụng tài nguyên... vật j • Bài toán bị chặn : hạn chế số đồ vật thuộc mỗi loại không được vượt quá một lượng nào đó Bài xếp ba lô bị chặn có thể được phát biểu bằng toán học như sau: Cực đại hóa sao cho Bài toán không bị chặn : không có một hạn chế nào về số lượng của mỗi loại đồ vật được chọn 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... con không chứa k Vậy , S’ {k} với k có khối lượng p sẽ tốt hơn giải pháp S cho bài toán ban đầuà mẫu thuẫn với giả thiết Vậy S’ là phương án tối ưu cho bài toán con 6 Đánh giá độ phức tạp của thuật toán Quá trình sắp xếp nếu làm theo QuickSort mất: O(nlogn) Quá trình lặp n đồ vật : O(n) Vậy tổng độ phức tạp của thuật toán là: O(nlogn) • 16 ... nhiều phần để bỏ vào ba lô) 4 Phân tích các chiến lược lựa chọn tham lam: Việc chọn đồ vật đưa vào túi có thể theo 3 chiến lược sau: • • • Ưu tiên vật nhẹ trước (với hy vọng chọn được nhiều đồ vật) Ưu tiên vật có giá trị cao trước Ưu tiên vật có tỉ số (giá trị/ khối lượng) lớn trước • • Với mỗi chiến lược trên ta có một giải thuật tham lam tương ứng: Greedy 1: ưu tiên lưạ chọn vật nhẹ trước Sắp xếp