Thuật toán tham lam có đƣợc một giải pháp tối ƣu cho một bài toán bằng cách thực hiện một chuỗi các lựa chọn. Đối với mỗi quyết định chỉ ra trong thuật toán, sự lựa chọn này dƣờng nhƣ tốt nhất tại thời điểm đƣợc chọn. Chiến lƣợc phỏng đoán này không luôn tạo ra giải pháp tối ƣu. Tuy nhiên việc tìm ra một giải pháp theo phƣơng pháp tham lam luôn cho kết quả nhanh với độ phức tạp tính toán thấp.
Trong phần này chúng tôi trình bày phƣơng pháp sử dụng thuật toán tham lam để giải quyết một dạng ứng dụng của bài toán phủ tập hợp đó là bài toán phân lịch trực cho bác sĩ trong bệnh viện A đã đƣợc nêu ở phần phát biểu bài toán. Giải thuật tham lam đƣợc phát biểu nhƣ sau:
Gọi Sj,j 1,...,n là tập các dịch vụ mà bác sĩ j có thể thực hiện, biến xj dùng để xác định bác sĩ j có đang thực hiện dịch vụ cấp cứu hay không.
Input: Cho tập m danh sách các dịch vụ cấp cứu U e e1, 2,...,em , Tập danh sách các dịch vụ mà n bác sĩ có thể thực hiện: S S1, 2,...,Snvà danh sách các chi phí phải trả cj, j 1,...,n.
Output: Vectơ x 0,1 k
Thuật toán:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
2.While C U do
(a) Tìm tập các dịch vụ có chi phí phải trả là nhỏ nhất, ta gọi là S. (b) Đặt xs=1và với mỗi e S C ta gán p ic er e( ) c S( ) / S C
(c) C C S
3.Return x.
Giá trị price tại mỗi phần tử đƣợc phủ bằng với chi phí hiệu quả của tập phủ. Nhƣ vậy, trong thuật toán này mỗi bƣớc chúng ta sẽ chọn tham lam danh sách phục vụ nào mà có chi phí phải trả cho bác sĩ là thấp nhất làm đầu vào cho phƣơng án khả thi của thuật toán. Dựa vào kết quả trả về của thuật toán chúng ta sẽ biết đƣợc danh sách các bác sĩ đƣợc phân công trực và chi phí thấp nhất mà bệnh viện phải trả là bao nhiêu. Trong quá trình lặp chúng ta có thể dùng biến đánh dấu để đƣa ra danh sách những dịch vụ mà mỗi bác sĩ đƣợc chọn phải thực hiện.