Danh mục

Sáng tạo trong thuật toán và lập trình với ngôn ngữ Pascal và C# Tập 1 - Chương 5

Số trang: 34      Loại file: pdf      Dung lượng: 984.65 KB      Lượt xem: 7      Lượt tải: 0    
Hoai.2512

Phí tải xuống: 4,000 VND Tải xuống file đầy đủ (34 trang) 0
Xem trước 4 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

PHƯƠNG PHÁP THAM LAM Phương pháp tham lam gợi ý chúng ta tìm một trật tự hợp lí để duyệt dữ liệu nhằm đạt được mục tiêu một cách chắc chắn và nhanh chóng. Thông thường, dữ liệu được duyệt theo một trong hai trật tự là tăng hoặc giảm dần theo một chỉ tiêu nào đó. Một số bài toán đòi hỏi những dạng thức cải biên của hai dạng nói trên.
Nội dung trích xuất từ tài liệu:
Sáng tạo trong thuật toán và lập trình với ngôn ngữ Pascal và C# Tập 1 - Chương 5 129 Sáng tạo trong Thuật toán và Lập trình Tập I } static void IdQSort(int d, int c) { int i = d; int j = c; int m = id[(i + j) / 2]; int t = 0; while (i 130 Sáng tạo trong Thuật toán và Lập trình Tập I Phương pháp tham lam gợi ý chúng ta tìm một trật tự hợp lí để duyệt dữ liệu nhằm đạt được mục tiêu một cách chắc chắn và nhanh chóng. Thông thường, dữ liệu được duyệt theo một trong hai trật tự là tăng hoặc giảm dần theo một chỉ tiêu nào đó. Một số bài toán đòi hỏi những dạng thức cải biên của hai dạng nói trên. Bài 5.1. Băng nhạc Người ta cần ghi N bài hát, được mã số từ 1 đến N, vào một bă ng nhạc có thời lượng tính theo phút đủ chứa toàn bộ các bài đã cho. Với mỗi bài hát ta biết thời lượng phát của bài đó. Băng sẽ được lắp vào một máy phát nhạc đặt trong một siêu thị. Khách hàng muốn nghe bài hát nào chỉ việc nhấn phím ứng với bài đó. Để tìm và phát bài thứ i trên băng, máy xuất phát từ đầu cuộn băng, quay băng để bỏ qua i – 1 bài ghi trước bài đó. Thời gian quay băng bỏ qua mỗi bài và thời gian phát bài đó được tính là như nhau. Tính trung bình, các bài hát trong một ngày được khách hàng l ựa chọn với số lần (tần suất) như nhau. Hãy tìm cách ghi các bài trên băng sao cho tổng thời gian quay băng trong mỗi ngày là ít nhất. Dữ liệu vào được ghi trong tệp văn bản tên BANGNHAC.INP. Dòng đầu tiên là số tự nhiên N cho biết số lượng bài hát. - Tiếp đến là N số nguyên dương thể hiện dung lượng tính theo phút của - mỗi bài. Mỗi đơn vị dữ liệu cách nhau qua dấu cách. BANGNHAC.INP BANGNHAC.OUT Thí dụ dưới đây cho biết có N = 3 bài hát: 3 22 - Bài 1 phát trong thời gian 7 phút. 723 35 - Bài 2 phát trong thời gian 2 phút. 1 12 - Bài 3 phát trong thời gian 3 phút. 19 Dữ liệu ra được ghi trong tệp văn bản BANGNHAC.OUT theo dạng thức sau: - N dòng đầu tiên thể hiện trật tự ghi bài hát trên băng: m ỗi dòng gồm hai số nguyên dương j và d cách nhau bởi dấu cách, trong đó j là mã số của bài hát cần ghi, d là thời gian tìm và phát bài đó theo trật tự ghi này. - Dòng thứ n + 1 ghi tổng số thời gian quay băng nếu mỗi bài hát được phát một lần trong ngày. Với thí dụ trên, kết quả thu được sẽ như sau: - Cần ghi lần lượt trên băng các bài theo trật tự : bài 2, bài 3, bài 1; - Để tìm và phát bài 2 cần 2 phút; - Để tìm và phát bài 3 cần 5 phút; - Để tìm và phát bài 1 cần 12 phút; - Tổng thời gian để tìm và phát mỗi bài một lần là: 19 phút. Thuật toán Giả sử ta có ba bài hát với số phút lần lượt như sau:    Mã số bài hát Thời gian phát 7 2 3 Ta xét vài tình huống ghi băng để rút ra kết luận cần thiết. 131 Sáng tạo trong Thuật toán và Lập trình Tập I Trật tự ghi trên băng Thời gian phát t(x) + t(y) + t(z); t(i): thời gian tìm và phát bài i (x, y, z) ( ,  ,  ) (7) + (7 + 2) + (7 + 2 + 3) = 28 phút ( ,  ,  ) (7) + (7 + 3) + (7 + 3 + 2) = 29 phút ( ,  ,  ) (2) + (2 + 7) + (2 + 7 + 3) = 23 phút (2) + (2 + 3) + (2 + 3 + 7) = 19 phút (phương án tối ưu) ( ,  ,  ) ( ,  ,  ) (3) + (3 + 7) + (3 + 7 + 2) = 25 phút ( ,  ,  ) (3) + (3 + 2) + (3 + 2 + 7) = 20 phút Vậy phương án tối ưu sẽ là (  ,  , ): ghi bài 2 rồi đến bài 3, cuối cùng ghi bài 1. Tổng thời gian theo phương án này là 19 phút. Để có phương án tối ưu ta chỉ cần ghi băng theo trật tự tăng dần của thời lượng. Bài toán được cho với giả thiết băng đủ lớn để ghi được toàn bộ các bài. Dễ dàng sửa chương trình để vận dụng cho trường hợp dung lượng tăng hạn chế trong M phút. Chương trình sắp xếp dữ liệu theo chỉ dẫn. (* Pascal *) (*---------------------- BangNhac.pas -----------------------*) program BangNhac; uses crt; const MN = 200; BL = #32; {dau cach} fn = 'Bangnhac.inp'; gn = 'Bangnhac.out'; var a,id: array[1..MN] of integer; f, g: text; n: integer; {------------------------------------ Doc du lieu tu input file vao mang a -------------------------------------} procedure Doc; var i,k: integer; begin assign(f,fn); reset(f); read(f,n); for i := 1 to n do read(f,a[i]); close(f); end; {--------------------------------- Khoi tri mang chi dan id quan li sap tang theo chi dan ----------------------------------} procedure InitID; var i: integer; begin for i := 1 to n do id[i] := i; end; {------------------------------- ...

Tài liệu được xem nhiều: