Dynamic Programming Baøi toaùn choïn hoaït ñoäng (activity selection problem) Cho Moät taäp caùc hoaït ñoäng S = {1, 2, , n} Moät taøi nguyeân chung maø taïi moïi thôøi ñieåm noù ñöôïc duøng bôûi nhie[.]
Trang 1Bài toán chọn hoạt động (activity-selection
problem)
– Một tập các hoạt động S = {1, 2,…, n}
– Một tài nguyên chung mà tại mọi thời điểm
nó được dùng bởi nhiều lắm là một hoạt
động
– Hoạt động i có thời điểm bắt đầu là si và
thời điểm chấm dứt là fi
– Nếu hoạt động i được chọn thì i tiến hành trong thời gian [si , fi )
– Hai hoạt động i và j là tương thích nhau
(“compatible”) nếu
[si , fi ) và [sj , fj ) không chạm nhau.
° Bài toán chọn hoạt động là tìm một tập các
hoạt động tương thích nhau mà có số phần tử
lớn nhất.
Trang 2Giải thuật greedy cho bài toán chọn hoạt
động
° Giải thuật
– Giả sử: f1 f2 … fn
GREEDY-ACTIVITY-SELECTOR(s, f)
1 n length[s]
5 do if si fj
6 then A A {i}
7 j i
Trang 3Chạy G REEDY -A CTIVITY -S ELECTOR lên một ví dụ
1 1 4
2 3 5
3 0 6
4 5 7
5 3 8
6 5 9
7 6 10
8 8 11
9 8 12
10 2 13
11 12 14
1 1
1 1 1 1 1 1 1 1 1
4 4 4 4 4 4 4 4
8 8 8 8
11
2
4 3
5
6 7
8 9 10
11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 thời gian
i s i f i
vòng lặp for với i = 2 vòng lặp for với i = 3
Trang 4Correctness của giải thuật greedy cho bài
toán chọn hoạt động
giải tối ưu cho bài toán chọn hoạt động
– Gọi S = {1, 2,…, n} là tập hợp các hoạt động Các
hoạt động được xếp thứ tự theo thời điểm chấm dứt
Do đó hoạt động 1 có thời điểm chấm dứt sớm
nhất
– Ta chứng minh có lời giải tối ưu bắt đầu bằng hoạt động do chọn lựa greedy, tức là bắt đầu bằng hoạt động 1:
• Giả sữ A S là lời giải tối ưu, ta xếp thứ tự các hoạt động trong A theo thời điểm chấm dứt Giả sữ k là hoạt động đầu tiên trong A.
• Nếu k = 1 thì ta xong Nếu k 1, ta xét B = A {k}
– Nếu A là lời giải tối ưu cho bài toán nguyên thủy S, thì A’ = A {1} là lời giải tối ưu cho bài toán S’ = {i
S : s i f1}