Bài giảng Giải thuật - Chương 2: Greedy Algos
° Bài toán chọn hoạt động (activity-selection problem)
° Cho
– 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.
Bài toán chọn hoạt động (activity-selection problem)
Cho
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à s i và thời điểm chấm dứt là f i
Nếu hoạt động i được chọn thì i tiến hành trong thời gian [ s i , f i )
Hai hoạt động i và j là tương thích nhau (“ compatible ”) nếu
[ s i , f i ) và [ s j , f j ) 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.
29.01.04
1
Giải thuật greedy cho bài toán chọn hoạt động
Giải thuật
Giả sử: f 1 f 2 f n .
G REEDY -A CTIVITY -S ELECTOR ( s , f )
1 n length [ s ]
2 A {1}
3 j 1
4 for i 2 to n
5 do if s i f j
6 then A A { i }
7 j i
8 return A
29.01.04
2
Chạ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
29.01.04
3
Correctness của giải thuật greedy cho bài toán chọn hoạt động
Định lý Giải thuật G REEDY -A CTIVITY -S ELECTOR tìm được lời giải tối ưu cho bài toán chọn hoạt động.
Chứng minh
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 } {1}. Vì f 1 f k , nên B cũng là lời giải tối ưu.
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 f 1 }.
29.01.04
4
File đính kèm:
bai_giang_giai_thuat_chuong_2_greedy_algos.ppt



