Tải bản đầy đủ

Phương pháp tham lam

Phương pháp tham lam
1. Giới thiệu
Phương pháp tham lam là một mô hình thuật toán dùng để giải quyết bài toán
tối ưu tổ hợp. Phương pháp này xây dựng lời giải của bài toán qua từng bước, tại
mỗi bước luôn chọn kết quả tối ưu nhất cho bước đó.
1.1. Bài toán tối ưu tổ hợp
Là một dạng của bài toán tối ưu, nó có dạng tổng quát như sau:
• Cho hàm f(X) xác định trên một tập hữu hạn các phần tử D. Hàm f(X)
được gọi là hàm mục tiêu.
• Mỗi phần tử X thuộc D có dạng X = (x[1], x[2]... x[n]) được gọi
là một phương án.
• Cần tìm một phương án X thuộc D sao cho hàm f(X) đạt giá trị tốt nhất
(đạt min hoặc max). Phương án X như thế được gọi là phương án tối ưu.
Ví dụ:
Ghép các cặp số
Hãy ghép 2n số thành n cặp số sao cho tổng của tích các cặp số là lớn nhất biết
rằng mỗi số chỉ được chọn ghép một lần.
Dữ liệu: n và a[1], a[2],..,a[2n] nhập từ bàn phím.
Kết quả: ghi ra màn hình tổng và các cặp số.
Ví dụ:
Dữ liệu


Kết quả

2

- Tổng: 14

1342

- Các cặp: (1,2); (3,4)

5

- Tổng: 7

1 3 -4 2 0 1

- Các cặp: (-4,0), (1,1); (3,2)

1
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Mua kẹo
Siêu thị bày bán n gói kẹo, gói thứ i có giá là a[i] (1<=i<=n). Tí muốn
dùng số tiền m để mua kẹo. Hãy giúp Tí chọn các gói để mua sao cho số gói kẹo
mua được nhiều nhất. Nếu cùng mua được số gói như nhau thì chọn phương án
tốn ít nhất.
Dữ liệu: file văn bản MUAKEO.INP
- Dòng đầu ghi 2 số nguyên n và m
- Dòng thứ hai ghi n số nguyên a[1], a[2],..,a[n].
Kết quả: file văn bản MUAKEO.OUT
- Dòng đầu ghi số gói mua được
- Dòng thứ 2: ghi số tiền còn lại sau khi mua.
* Các số trong file cách nhau một dâu cách
Ví dụ:
MUAKEO.IN
P

MUAKEO.OU


T

35

2

342

0

57

3

13714

2

Một số phương pháp giải
• Vét cạn
• Tham lam
• Quy hoạch động

2
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


1.2. Phương pháp tham lam
Tư tưởng của phương pháp này là xây dựng nghiệm X = (x[1], x[2]... x[n])
theo từng bước cho đến khi hoàn chỉnh (đủ n thành phần). Tại mỗi bước thứ i, ta
luôn chọn x[i] tốt nhất từ các phần tử của tập các ứng viên Di.
Hạn chế: thuật toán tham lam không phải khi nào cũng cho kết quả tối ưu.
2. Một số ví dụ
2.1. Ghép cặp số
2.1.1. Phân tích bài toán
DLV: N, a[1],a[2],..,a[2n]
KQ: tổng S, N cặp số
2.1.2. Ý tưởng thuật toán
Tại mỗi bước chọn cặp (a,b) sao cho a*b lớn nhất có thể.
2.1.3. Thuật toán
1. Nhập N, a[1],..,a[2n] từ bàn phím.
2. Sắp xếp các a[i] giảm dần.
3. Tham
Tong:=0
For i=1 to n do Tong:=Tong+a[2i-1]*a[2i]
4. In kết quả:
Tổng lớn nhất là: Tong
Cách ghép các số là: (a[2i-1],a[2i]) với i=1…n.
2.2. Mua kẹo
2.2.1. Phân tích bài toán

3
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


DLV: n, m, a[1],a[2],..,a[n]
KQ: số gói S và số tiền còn lại T
2.2.2. Ý tưởng thuật toán
Khi mua một món quà ta chọn món quà ít tiền nhất có thể.
2.2.3. Thuật toán
1. Đọc N,M, a[1],..,a[n] từ file
2. Sắp xếp các a[i] tăng dần
3. Tham
S:=0; T:=M;
For i:=1,n do If T>=a[i] then
S:=S+1;
T:=T-a[i]
4. In kết quả
Ghi vào file trên mỗi dòng lần lượt S và T
2.3. Xếp lịch
Trong dịp Tết nhà hát trung tâm thành phố nhận được n yêu cầu tổ chức hoạt
động. Hoạt động thứ i bắt đầu từ a[i] và kết thúc ngay trước b[i] (a[i]Nhà hát tại một thời điểm chỉ tổ chức được tối đa một hoạt động. Hãy xác định
xem số lượng tối đa các hoạt động mà nhà hát có thể tổ chức được.
Dữ liệu: file văn bản XEPLICH.INP
- Dòng đầu ghi số nguyên n
- Dòng thứ hai ghi n số nguyên a[1], a[2],..,a[n]
- Dòng thứ ba ghi n số nguyên b[1], b[2],..,b[n]
Kết quả: file văn bản XEPLICH.OUT
- Ghi một số duy nhất là số hoạt động tối đa phục vụ được.
* Các số trong file cách nhau một dâu cách
4
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Ví dụ:
XEPLICH.INP
11

XEPLICH.OUT
4

1 0 3 6 8 12 2 8 5 5 3
4 6 8 10 12 14 13 11 9 7 5

2.3.1. Phân tích bài toán
DLV: N, a[1],..,a[n] và b[1],..,b[n]
KQ: Số hoạt động tối đa chọn được S
2.3.2. Ý tưởng thuật toán
i. Mỗi lần chọn một hoạt động bắt đầu thời điểm t (banđầu t=0)
ii. Khi chọn ta chọn hoạt động kết thúc sớm nhất
2.3.3. Thuật toán
1. Đọc N, a[1],..,a[n] và b[1],..,b[n] từ file
2. Sắp xếp các hoạt động tăng dần theo b[i]
3. Tham
S:=0; T := 0;
For i:=1,n If a[i]>=t then
S := S + 1
T := b[i]
4. In kết quả:
Ghi vào file số nguyên S
3. Một số bài tập vận dụng
3.1. Cho thuê xe
Công ty lữ hành Alpha nhận được N yêu cầu thuê xe trong cùng một thời điểm,
yêu cầu thứ i đi đoạn đường dài a[i] kilomet (i=1..N). Hiện tại công ty có M
5
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


chiếc xe có thể phục vụ (N<=M), xe thứ j đi một kilomet chi phí b[j]
(j=1..M). Để thu được lợi nhuận cao nhất công ty cần bố trí các xe phục vụ sao
cho tổng chi phí cho các chiếc xe là nhỏ nhất biết rằng mỗi xe chỉ phục vụ một yêu
cầu.
Hãy xác định giá trị chi phí nhỏ nhất đó là bao nhiêu.
Dữ liệu: file văn bản CHTHUEXE.INP
- Dòng đầu ghi số nguyên N và M
- Dòng thứ hai ghi n số nguyên a[1], a[2],..,a[N]
- Dòng thứ ba ghi m số nguyên b[1], b[2],..,b[M]
Kết quả: file văn bản CHTHUEXE.OUT
- Ghi một số duy nhất chi phí tối thiểu.
* Các số trong file cách nhau một dâu cách
Ví dụ:
CHTHUEXE.I
NP

CHTHUEXE.O
UT

45

325

10 15 18 10
5 5 10 6 10

Giới hạn:
1<=N,M<=200; 1<=a[i]<=200; 1<=b[j]<=100;

3.2. Phân tích số
Cho số nguyên dương N. Hãy phân tích N thành tổng các số nguyên dương
không lớn hơn N sao cho tích của chúng lớn nhất.
6
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Dữ liệu: file văn bản PTSO.INP
- Ghi số nguyên n
Kết quả: file văn bản PTSO.OUT
- Dòng đầu ghi m đầu là số lượng các số nguyên dương trong cách phân tích
- Dòng thứ 2 ghi m số tìm được theo thứ tự tăng dần
* Các số trong file cách nhau một dâu cách
Ví dụ:
PTSO.INP

PTSO.OUT

5

23

10

235

22

23467

Giới hạn: 1<=n<=1000000;
3.3. Nối xích
Người ta có n đoạn dây xích, mỗi đoạn dây xích là chuỗi gồm a[i]
(i=1..n) mắt xích được nối với nhau. Các đoạn dây xích này tách rời nhau.
Bằng cách cắt ra một mắt xích, sau đó hàn lại, ta có thể nối hai dây xích thành một
đoạn. Thời gian để cắt và hàn mỗi mắt xích là 1 đơn vị thời gian và được xem là
bằng nhau với mọi mắt xích. Nhiêm vụ của bạn là phải nối chúng lại thành một
đoạn dây xích duy nhất với thời gian ít nhất (hay số mắt xích bị cắt và hàn lại là ít
nhất).
Dữ liệu: file văn bản NOIXICH.INP
- Dòng đầu ghi số nguyên n
- Các dòng tiếp theo ghi n số nguyên a[1], a[2],..,a[n]
Kết quả: file văn bản NOIXICH.OUT
- Ghi duy nhất số đơn vị thời gian cần nối n đoạn xích đã cho
* Các số trong file cách nhau một dâu cách
7
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Ví dụ:
NOIXICH.INP NOIXICH.OU
T
3

2

23
4
5

3

12345
Giới hạn: 1<=n<=20000; 1<=a[i]<= 2000;

3.4. Sửa xe
Một cơ sở sửa chữa ô tô có nhận n chiếc xe để sửa. Do các nhân viên làm việc
quá lười nhác nên đã đến hạn trả cho khách hàng mà vẫn chưa tiến hành sửa được
chiếc xe nào. Theo hợp đồng đã ký kết từ trước, nếu bàn giao xe thứ i quá hạn
ngày nào thì sẽ phải trả thêm một khoản tiền phạt là a[i] (i=1..n).
Ông chủ cơ sở sửa chữa quyết định sa thải toàn bộ công nhân và thuê nhân công
mới. Với lực lượng mới này, ông ta dự định rằng để sửa chiếc xe thứ i sẽ cần b[i]
(i=1..n) ngày. Vấn đề đặt ra đối với ông là phải lập lịch sửa tuần tự các chiếc xe
sao cho tổng số tiền bị phạt là ít nhất.
Dữ liệu: file văn bản SUAXE.INP
- Dòng đầu ghi số nguyên n
- Dòng thứ hai ghi n số nguyên a[1], a[2],..,a[n]
- Dòng thứ ba ghi n số nguyên b[1], b[2],..,b[n]

8
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Kết quả: file văn bản SUAXE.OUT
- Dòng đầu ghi một số duy nhất chi phí tối thiểu.
- Dòng thứ hai ghi lần lượt số hiệu các xe cần sửa
* Các số trong file cách nhau một dâu cách
Ví dụ:
SUAXE.INP

SUAXE.OUT

4

44

1342

4231

3231

Giải thích:






Xong công việc 4 vào cuối ngày 1 => phải trả 2 * 1 = 2 .
Xong công việc 2 vào cuối ngày 3 => phải trả 3 * 3 = 9.
Xong công việc 3 vào cuối ngày 6 => phải trả 6 * 4 = 24 .
Xong công việc 1 vào cuối ngày 9 => phải trả 1 * 9 = 9 .
Vậy tổng cộng phải trả 44 .

Giới hạn: 1<=n<=1000; 1<=a[i]<=100; 1<=b[j]<=100;
3.5. Nối điểm đen trắng
Trên trục số thực cho n điểm đen và n điểm trắng hoàn toàn phân biệt. Các
điểm đen có tọa độ nguyên a[1],a[2],..,a[n] còn các điểm trắng có tọa độ
nguyên b[1],b[2],..,b[n]. Người ta muốn chọn ra k điểm đen và k điểm trắng
để nối mỗi một điểm đen với một điểm trắng sao cho k đoạn thẳng tạo được đôi
một không có điểm chung. Hãy tìm giá trị k lớn nhất thỏa mãn yêu cầu trên.
Dữ liệu: file văn bản NOIDIEM.INP
- Dòng đầu ghi số nguyên n
- Dòng thứ hai ghi n số nguyên a[1], a[2],..,a[n]
- Dòng thứ ba ghi n số nguyên b[1], b[2],..,b[n]
9
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Kết quả: file văn bản NOIDIEM.OUT
Ghi duy nhất số k tìm được.
* Các số trong file cách nhau một dâu cách
Ví dụ:
NOIDIEM.INP

NOIDIEM.O
UT

3

2

031
-3 5 -1

Giới hạn:
1<=n<=10000; |a[i]|,|b[i]|<=1000000000;

10
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn


Một số bài toán tham lam luyện thi học sinh giỏi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

http://vn.spoj.com/problems/NK2MFS/
http://vn.spoj.com/problems/NOIXICH/
http://vn.spoj.com/problems/CTNEWS/
http://vn.spoj.com/problems/CBUYING/
http://vn.spoj.com/problems/NUMCON/
http://vn.spoj.com/problems/BWPOINTS/
http://vn.spoj.com/problems/SBOOST/
http://vn.spoj.com/problems/CAR/
http://vn.spoj.com/problems/TWO/
http://vn.spoj.com/problems/MJOURNEY/
http://vn.spoj.com/problems/MCLEAN/
http://vn.spoj.com/problems/KSPREE/
http://vn.spoj.com/problems/MAJSTOR/

Trao đổi về chuyên đề và cách giải các bài tập: hvdieu.lqd@gmail.com

11
Hoàng Văn Diệu – THPT Chuyên Lê Quý Đôn



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×