input: Tổng số tiềnS, tập các mệnh giá M ={m1, m2, ..., mn}.
i) Sắp xếp các mệnh giá theo thứ tự giảm dần. Giả sử đó làm1 > m2 > ... > mn. ii) Nếu mệnh giá bé nhất mn > S thì bài toán không có lời giải. Thuật toán kết
thúc.
Nếu khác (tức là mn ≤ S) thì chọn các đồng tiền theo thứ tự mệnh giá giảm cho đến khi đủ S hoặc không thể chọn thêm.
begin
k1 = [S/m1](số đồng tiền mệnh giám1). b = 0
fori= 2 ton b =b+ki−1mi−1
Si = S − b (số tiền còn lại sau khi đã chọn các đồng tiền mệnh giá m1, ..., mi−1)
ki = [Si]/mi ( số đồng tiền mệnh giámi) end;
48 Các thuật toán xấp xỉ giải các bài toán NP-C Bước Mệnh giámi Số đồng tiền Tổng giá trị đã có Giá trị còn lại
1 50 5 250 48 2 20 2 290 8 3 10 0 290 8 4 5 1 295 3 5 2 1 297 1 6 1 1 298 0
Thuật toán cho lời giải tối ưu
Thí dụ 4.2. S = 40, M ={30,20,5,2}
Bước mi ki Tổng giá trị đã có Giá trị còn lại
1 30 1 30 10
2 20 0 30 10
3 5 2 40 0
Tổng cộng: 3 tờ tiền
Phương án tối ưu hơn: 2 tờ, mỗi tờ mệnh giá 20. Thí dụ 4.3. S = 6
Thuật toán tham sau khi chọn 1 tờ mệnh giá 5 không thể chọn tiếp được, trong khi để có giá trịS= 6 có thể dùng 3 tờ mệnh giá 2.
Kết luận: Như vậy thuật toán tham không phải khi nào cũng cho lời giải tối ưu. Nhưng khi tập dữ liệu lớn thì thuật toán nhanh chóng cho lời giải tối ưu hoặc gần tối ưu.