Greedy Algos Bài toán chọn hoạt động (activity-selection problem) ° Cho – Một tập hoạt động S = {1, 2,…, n} – Một tài nguyên chung mà thời điểm dùng nhiều hoạt động – Hoạt động i có thời điểm bắt đầu si thời điểm chấm dứt fi – Nếu hoạt động i chọn i tiến hành thời gian [si , fi ) – Hai hoạt động i j tương thích (“compatible”) [si , fi ) [sj , fj ) không chạm ° Bài toán chọn hoạt động tìm tập hoạt động tương thích mà có số phần tử lớn Giải thuật greedy cho toán chọn hoạt động ° Giải thuật – Giả sử: f1 f2 … fn GREEDY-ACTIVITY-SELECTOR(s, f) n length[s] A {1} j1 for i to n if si fj then A A {i} ji return A Chaïy GREEDY-ACTIVITY-SELECTOR lên ví dụ vòng lặp for với i = i si fi 1 10 8 11 12 10 13 11 12 14 vòng lặp for với i = 10 11 8 11 10 11 12 13 14 thời gian Correctness giải thuật greedy cho toán chọn hoạt động ° ° Định lý Giải thuật GREEDY-ACTIVITY-SELECTOR tìm lời giải tối ưu cho toán chọn hoạt động Chứng minh – Gọi S = {1, 2,…, n} tập hợp hoạt động Các hoạt động xếp thứ tự theo thời điểm chấm dứt Do hoạt động có thời điểm chấm dứt sớm – Ta chứng minh có lời giải tối ưu bắt đầu hoạt động chọn lựa greedy, tức bắt đầu hoạt động 1: • Giả sữ A S lời giải tối ưu, ta xếp thứ tự hoạt động A theo thời điểm chấm dứt Giả sữ k hoạt động A • Nếu k = ta xong Nếu k 1, ta xét B = A {k} {1} Vì f1 fk, nên B lời giải tối ưu – Nếu A lời giải tối ưu cho toán nguyên thủy S, A’ = A {1} lời giải tối ưu cho toán S’ = {i S : si f1} ... tìm tập hoạt động tương thích mà có số phần tử lớn Giải thuật greedy cho toán chọn hoạt động ° Giải thuật – Giả sử: f1 f2 … fn GREEDY- ACTIVITY-SELECTOR(s, f) n length[s] A {1} j1... return A Chạy GREEDY- ACTIVITY-SELECTOR lên ví dụ vòng lặp for với i = i si fi 1 10 8 11 12 10 13 11 12 14 vòng lặp for với i = 10 11 8 11 10 11 12 13 14 thời gian Correctness giải thuật greedy cho... lý Giải thuật GREEDY- ACTIVITY-SELECTOR tìm lời giải tối ưu cho toán chọn hoạt động Chứng minh – Gọi S = {1, 2,…, n} tập hợp hoạt động Các hoạt động xếp thứ tự theo thời điểm chấm dứt Do hoạt