như tên gọi cua nó, đó là luôn luôn làm một sự lựa chọn tốt nhất tại thời điểm hiện tại.. Điều này có nghĩa rằng, sự.[r]
Trang 1Thuật toán tham lam (Greedy algorithms)
Giáo viên: Nguyễn Ngọc Huy Trường TH&THCS Bùi Dục Tài
Trang 2 Gọi là thuật toán tham
lam nhưng thực chất tham lam không được gọi là
thuật toán, mà nó là một
kỹ thuật, một phương pháp
để ta tiến hành giải một
bài toán lập trình.
Trang 3Vậy thì thuật toán tham lam là gì?
Trang 4Một thuật toán tham lam,
như tên gọi cua nó, đó là luôn luôn làm một sự lựa chọn tốt nhất tại thời điểm hiện tại
Điều này có nghĩa rằng, sự
lựa chọn tốt nhất ở mỗi bước
sẽ dẫn tới lời giải tối ưu nhất
Trang 5Vậy bạn chọn lựa tối ưu hóa bằng cách nào?
Trang 6Giả sử bạn có một hàm cần
để tối ưu hóa (hoặc cực đại
hóa, hoặc cực tiểu hóa hàm
đó) Một thuật toán tham lam
sẽ thực hiện các lựa chọn
tham lam ở mỗi bước để đảm bảo rằng hàm đã cho là tối
ưu Thuật toán tham lam chỉ
có một lần tính toán lời giải
tối ưu với mục đích nó không bao giờ trở lại và đảo ngược
quyết định
Trang 7Thuật toán tham lam có một vài sự thuận lợi
1/ Khá dễ để tiến hành
một thuật toán tham lam cho một bài toán
2/ Phân tích thời gian
chạy của thuật toán
tham lam sẽ dễ dàng hơn
Trang 8Khó khăn
Khó khăn của tham lam là bạn rất vất vả để hiểu chính xác vấn
đề Thậm chí với giải thuật chính xác rồi, cũng rất khó khăn để
chứng minh tại sao nó đúng
Chứng minh một giải thuật tham lam là đúng có cảm giác là cả
một nghệ thuật hơn là một khoa học, vì nó đòi hỏi rất nhiều sự
sáng tạo
Trang 9Lưu ý: Hầu như các giải
thuật tham lam đều không
chính xác Và không phải lúc nào cũng cho kết quả đúng.
Trang 10Tạo ra một Giải thuật
tham lam như thế nào?
Trang 11 Bài toán: Là một người bận rộn, bạn có đúng T thời gian để làm một vài thứ thú vị và bạn muốn làm nhiều thứ nhất có
thể.
Trang 12Tổ chức dữ liệu – yêu cầu
Cho một mảng A gồm các số
có kiểu int, trong đó mỗi
phần tử biểu thị thời gian
hoàn thiện thứ đó Hãy tính
toán số thứ bạn có thể làm
với thời gian giới hạn
Trang 13 Nhận định:
Đây là một bài toán tham lam
đơn giản Ở mỗi bước, ta phải
chọn lựa tham lam bằng cách
chọn các công việc có thời gian hoàn thành ít nhất ở đây ta có hai biến là thời gian hiện tại
(currentTime) và số công việc (number of Things)
Trang 14Thuật toán – Kỹ thuật
Sắp xếp mảng A theo chiều không giảm
Chọn lựa mỗi công việc để làm
Cộng thời gian để hoàn thành vào biến current time
Công một tới số lượng công việc
Lặp lại điều này trong khi biến
currenttimem nhỏ hơn hoặc bằng T