BÀI 5: PHƯƠNG PHÁP THAM LAM

Một phần của tài liệu Giáo trình phân tích thiết kế thuật toán (nghề lập trình máy tính) (Trang 117 - 119)

Mã bài : ITPRG3_12.5

Giới thiệu

Giải quyết các bài toán tối ưu là một trong những vấn đề thường gặp trong các bài toán kinh tế, kỹ thuật, trí tuệ nhân tạọ.. Một trong những giải pháp thuật toán sử dụng hiệu quả cho lớp các bài toán này là phương pháp tham lam (greedy method). Phương pháp này được sử dụng nhiều cho các bài toán điển hình như : lập lịch làm việc theo thời gian, tìm đường đi ngắn nhất, xử lý các vấn đề liên quan đến đồ thị, câỵ..

Mục tiêu thực hiện

Học xong bài này học viên sẽ có khả năng:

 Nắm bắt được ý tưởng của phương pháp tham lam.

 Sử dụng phương pháp tham lam để giải quyết các bài toán tìm đường đi tối ưu, lập lịch phân công việc

 Áp dụng phương pháp tham lam để giải quyết một số bài toán trong thực tế.

 Thấy được lợi ra lợi thế của phương pháp tham lam trong việc xây dựng một số thuật toán.

 So sánh cách tiếp cận của phương pháp tham lam với các phương pháp khác.

5.1 Phương pháp tổng quát

Phương pháp tham lam (greedy method) là một chiến lược thiết kế thuật toán thường được sử dụng để giải quyết các bài toán tối ưụ

Nhiều vấn đề cần giải quyết có thể quy về vấn đề sau đây : Cho trước một tập các đối tượng A, chứa các đối tượng đã cho, đòi hỏi phải chọn ra một tập con S các đối tượng thỏa mãn một số điều kiện nào đó. Bất kỳ một tập con S nào của A thỏa mãn các yêu cầu đặt ra được gọi là nghiệm chấp nhận được của bài toán. Một hàm mục tiêu gắn mỗi nghiệm chấp nhận được với một giá trị nào đó. Một nghiệm chấp nhận được mà tại đó hàm mục tiêu có giá trị lớn nhất (hoặc nhỏ nhất) được gọi là nghiệm tối ưụ

Tư tưởng của phương pháp tham lam là như sau : Ta xây dựng tập S dần dần từng bước, bắt đầu từ tập rỗng. Tại mỗi bước, ta sẽ chọn một phần tử “tốt nhất” trong các phần tử còn lại của A

Phần tử được chọn sẽ bị loại khỏi tập Ạ Nếu khi thêm phần tử được chọn vào tập S mà S vẫn còn thỏa mãn điều kiện của bài toán thì ta mở rộng S bằng cách thêm vào phần tử được chọn.

procedure Greedy(A,S); {A là tập các ứng cử viên, S là nghiệm} begin S ; while A <>  do begin x  select(A); A  A – {x}; if S  {x} chấp nhận được then S  S  {x} end; end;

Trong lược đồ tổng quát trên Select là hàm chọn, nó cho phép ta chọn ra từ tập A một phần tử được xem là tốt nhất, nhiều hứa hẹn nhất là thành viên của nghiệm.

Ta có thể dễ dàng thấy tại sao các thuật toán như thế được gọi là “tham lam”. Tại mỗi bước, nó chọn “miếng ngon nhất” (được xác định bởi hàm chọn), nếu thấy có thể nuốt được (có thể đưa vào nghiệm) nó sẽ xơi ngay, nếu không nó sẽ bỏ đi, sau này không bao giờ xem xét lạị

Cần nhấn mạnh rằng, thuật toán tham lam trong một số bài toán, nếu xây dựng được hàm chọn thích hợp có thể cho nghiệm tối ưụ Trong nhiều bài toán, thuật toán tham lam chỉ tìm được nghiệm gần đúng với nghiệm tối ưụ

5.2 Xử lý các công việc theo thời gian nhất định

Cho n công việc được đánh số 1, 2, .., n. Mỗi công việc i đòi hỏi phải hoàn tất trong thời hạn di (số nguyên >0) kể từ một thời điểm nào đó. Công việc i cho ta lợi nhuận pi > 0 nếu nó được hoàn thành trong thời hạn.

Một nhà máy thực hiện các công việc này, tại mỗi thời điểm nhà máy chỉ thực hiện được một công việc, mỗi công việc được làm xong trong một đơn vị thời gian. Đương nhiên nhà máy phải chọn các công việc làm sao cho thu được nhiều lợi nhuận nhất.

Trong bài toán trên, một tập con j các công việc sao cho nhà máy có thể hoàn thành tất cả các công việc trong thời hạn của chúng là nghiệm chấp nhận được. Giá trị của nghiệm J là tổng

Một phần của tài liệu Giáo trình phân tích thiết kế thuật toán (nghề lập trình máy tính) (Trang 117 - 119)

Tải bản đầy đủ (PDF)

(186 trang)