Nếu có thể chứng minh rằng một thuật toán dựa trên phương pháp tham lam cho ra kết quả tối ưu toàn cục của một lớp bài toán nào đó, thì khi ấy thuật toán ấy thường sẽ được lựa chọn, vì n
Trang 1ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Trang 2ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC
PGS TSKH NGUYỄN XUÂN HUY
Trang 3Lời cảm ơn……… i
Lời cam đoan ………ii
Mục lục ……….iii
MỞ ĐẦU ……….1
Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM 1.1 Phương pháp tham lam……….4
1.1.1 Ý tưởng phương pháp tham lam………4
1.1.2 Đặc trưng của phương pháp tham lam……….6
1.1.3 Thiết kế thuật toán dựa trên ý tưởng phương pháp tham lam….………7
1.1.3.1 Các thành phần quyết định tham lam………7
1.1.3.2 Sơ đồ chung để giải các bài toán bằng giải thuật tham lam….….…………9
1.1.3.3 Lược đồ giải thuật tham lam ……….9
1.1.3.4 Thiết kế một thuật toán dựa trên ý tưởng tham lam….….……… 11
1.1.3.5 Tiến trình thực hiện phương pháp tham lam……… … 11
1.2 Ví dụ……… 14
1.2.1 Bài toán lựa chọn công việc.……… 14
1.2.2 Xác định bài toán………14
1.2.3 Tính chất của lời giải ……….14
1.2.4 Các bước của thuật giải tham lam……… 15
Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG PHÁP THAM LAM 2.1 Bài toán người du lịch ……….18
2.1.1 Phát biểu bài toán ……… 18
Trang 42.2.1 Phát biểu bài toán ……… 21
2.2.2 Phân tích thiết kế thuật toán ……… 21
2.2.3 Xác định độ phức tạp của thuật toán ……….27
2.3 Thuật toán Dijkstra -Tìm đường đi ngắn nhất trong đồ thị có trọng số…28 2.3.1 Phát biểu bài toán ……… 28
2.3.2 Phân tích thiết kế thuật toán ……… 28
2.3.3 Xác định độ phức tạp của thuật toán ……….33
2.4 Bài toán cái ba lô ……….33
2.4.1 Phát biểu bài toán ……… 33
2.4.2 Phân tích thiết kế thuật toán ……… 33
2.4.3 Xác định độ phức tạp của thuật toán ……….35
2.5 Bài toán băng nhạc ……… ………35
2.5.1 Phát biểu bài toán ……… 35
2.5.2 Phân tích thiết kế thuật toán ……… 36
2.5.3 Xác định độ phức tạp của thuật toán ……….38
2.6 Bài toán lập lịch ……… 38
2.6.1 Phát biểu bài toán ……….38
2.6.2 Phân tích thiết kế thuật toán ……… 38
2.6.3 Xác định độ phức tạp của thuật toán ……….42
2.7 Bài toán mã hóa Huffman ……… 43
2.7.1 Phát biểu bài toán ……… 49
2.7.2 Phân tích thiết kế thuật toán ……… 49
2.8 Phương pháp tham lam trong tương quan với phương pháp khác …… 50
- Phương pháp quy hoạch động
Trang 53.2 Bài toán cây bao trùm ngắn nhất Kruskal………56
3.3 Thuật toán Dijkstra -Tìm đường đi ngắn nhất trong đồ thị có trọng số……… ………62
3.4 Bài toán mã hóa huffman………65
KẾT LUẬN ……… 69
TÀI LIỆU THAM KHẢO ……… 70
PHỤ LỤC………
Trang 6MỞ ĐẦU
1 Đặt vấn đề
Có nhiều phương pháp được dùng để thiết kế thuật toán như: chia để trị, vét cạn, quy hoạch động trong đó, mỗi phương pháp chỉ áp dụng cho những lớp bài toán phù hợp Phương pháp tham lam cũng là một trong số các phương pháp phổ biến thường được vận dụng trong thiết kế thuật toán
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ự tăng hay giảm theo một tiêu chí nào đấy
Phương pháp tham lam xây dựng các thuật toán để giải các bài toán tối ưu dựa trên tư tưởng tối ưu cục bộ theo một chiến lược tư duy kiểu con người, nhằm nhanh chóng đạt đến một lời giải "tốt" Nếu có thể chứng minh rằng một thuật toán dựa trên phương pháp tham lam cho ra kết quả tối ưu toàn cục của một lớp bài toán nào đó, thì khi ấy thuật toán ấy thường sẽ được lựa chọn, vì nó chạy nhanh hơn các phương pháp tối ưu hóa khác như quy hoạch động
Một số thuật toán dựa trên tư tưởng phương pháp tham lam đã thực sự tìm ra được phương án tối ưu như: thuật toán Kruscal tìm cây khung cực tiểu, thuật toán Prim dành cho bài toán cây bao trùm nhỏ nhất, thuật toán Dijkstra dành cho bài toán đường đi ngắn nhất và thuật toán tìm cây Huffman tối ưu
Là một giáo viên giảng dạy bộ môn Tin học ở trường PT, tôi nhận thấy việc ứng dụng phương pháp tham lam trong thiết kế thuật toán là một mảng kiến thức rất cần thiết đối với học sinh, đặc biệt là học sinh nhóm chuyên Tin và đội tuyển Vì vậy, tôi mong muốn tìm hiểu về phương pháp tham lam và ứng dụng phương pháp tham lam trong thiết kế thuật toán cho một nhóm các bài toán, nhằm tạo ra một nguồn tư liệu quan trọng cho các giáo viên, học sinh và những người quan tâm đến phương pháp này
Trang 72 Đối tượng và phạm vi nghiên cứu
- Phương pháp tham lam trong thiết kế thuật toán
- Một số bài toán đặc trưng, cơ bản
3 Hướng nghiên cứu của đề tài
- Tổng quan về phương pháp tham lam
- Thiết kế thuật toán cho một số bài toán dựa trên ý tưởng tham lam từ đó tìm ra:
+ Các kĩ thuật sử dụng trong phương pháp tham lam
+ Đối sánh phương pháp tham lam với Phương pháp khác
+ Hạn chế của phương pháp tham lam
- Cài đặt chương trình cho một số bài toán kinh điển
4 Những nội dung nghiên cứu chính
Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM
(Trong chương này, học viên sẽ tìm hiểu và trình bày phương pháp tham lam: Ý tưởng, phát biểu phương pháp, nêu ví dụ và phân tích làm rõ về phương pháp này)
Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG
PHÁP THAM LAM
(Dựa vào cơ sở lí thuyết trình bày ở chương I, trong chương này, học viên sẽ phân tích thiết kế thuật toán bằng phương pháp tham lam cho 7 bài toán cụ thể (mục 2.1 đến 2.7); Thông qua các bài tập học viên sẽ rút ra kỹ thuật sử dụng phương pháp tham lam; Đối sánh phương pháp tham lam với phương pháp khác ; Chỉ ra hạn chế của phương pháp tham lam) Các bài toán cụ thể:
- Bài toán người du lịch
- Bài toán tìm cây khung cực tiểu
- Bài toán cây bao trùm ngắn nhất
- Bài toán cái ba lô
- Bài toán băng nhạc
- Bài toán xếp lịch
- Bài toán mã hóa Huffman
Trang 8Chương 3 CÀI ĐẶT CHƯƠNG TRÌNH CHO MỘT SỐ BÀI TOÁN
(Trong chương này, dựa vào chương II, học viên sẽ xây dựng chương trình và cài đặt chương trình cho một số bài toán bằng ngôn ngữ C ++
, Free Pascal)
5 Phương pháp nghiên cứu: phân tích, liệt kê, so sánh, đối chiếu, trực quan, thực
nghiệm,…
6 Ý nghĩa khoa học của đề tài
- Đưa ra nội dung phương pháp tham lam
- Ứng dụng phương pháp tham lam trong thiết kế thuật toán cho một nhóm các bài toán, nhằm tạo ra một nguồn tư liệu quan trọng cho các giáo viên, học sinh và những người quan tâm đến phương pháp này
7 Kết cấu của đề tài
Ngoài phần mở đầu, kết luận, tài liệu tham khảo đề tài gồm 3 chương:
Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM
Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG PHÁP THAM LAM
Chương 3 CÀI ĐẶT CHƯƠNG TRÌNH CHO MỘT SỐ BÀI TOÁN
Trang 9Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM
Các bài toán trên thực thế có muôn hình muôn vẻ, không thể đưa ra một cách thức chung để tìm giải thuật cho mọi bài toán Các phương pháp vét cạn (exhaustivesearch), chia để trị (divide and conquer), quy hoạch động (dynamic programming) và tham lam (greedy) là những “chiến lược” kinh điển để tìm giải thuật cho các bài toán
Tham lam (greedy) là một phương pháp giải các bài toán tối ưu Các thuật toán tham lam dựa vào sự đánh giá tối ưu cục bộ địa phương để đưa ra quyết định tức thì tại mỗi bước lựa chọn, với hy vọng cuối cùng sẽ tìm ra được phương án tối
ưu tổng thể
Chương I trình bày về phương pháp tham lam: Ý tưởng phương pháp tham lam, nêu ví dụ và phân tích làm rõ về phương pháp này
1.1 Phương pháp tham lam
1.1.1 Ý tưởng phương pháp tham lam
Các bài toán tối ưu thường là có một số rất lớn nghiệm, việc tìm ra nghiệm tối ưu (nghiệm có giá thấp nhất) đòi hỏi rất nhiều thời gian
Một cách tiếp cận để giải quyết các bài toán tối ưu là chiến lược tham lam Trong hầu hết các bài toán tối ưu, để nhận được nghiệm tối ưu chúng ta có thể đưa về sự thực hiện một dãy quyết định Ý tưởng của chiến lược tham lam là, tại mỗi bước ta sẽ lựa chọn quyết định để thực hiện quyết định được xem là tốt nhất trong ngữ cảnh nào đó được xác định bởi bài toán Tức là, quyết định được lựa chọn
ở mỗi bước là quyết định tối ưu địa phương Tùy theo từng bài toán mà ta đưa ra tiêu chuẩn lựa chọn quyết định cho thích hợp
Các thuật toán tham lam nói chung là đơn giản và hiệu quả (vì các tính toán
để tìm ra quyết định tối ưu địa phương thường là đơn giản) Tuy nhiên, các thuật toán tham lam có thể không tìm được nghiệm tối ưu, nói chung nó chỉ cho ra
Trang 10nghiệm gần tối ưu, nghiệm tương đối tốt Nhưng cũng có nhiều thuật toán được thiết kế theo kỹ thuật tham lam cho ta nghiệm tối ưu, chẳng hạn thuật toán Dijkstra tìm đường đi ngắn nhất từ một đỉnh tới các đỉnh còn lại trong đồ thị định hướng, các thuật toán Prim và Kruskal tìm cây bao chùm ngắn nhất trong đồ thị vô hướng
Ví dụ - Bài toán trả tiền của máy rút tiền tự động ATM:
Trong máy ATM, có sẵn các loại tiền có mệnh giá 100.000 đồng, 50.000 đồng, 20.000 đồng và 10.000 đồng
Giả sử mỗi loại tiền đều có số lượng không hạn chế
Khi có một khách hàng cần rút một số tiền n đồng (tính chẵn đến 10.000 đồng, tức là n chia hết cho 10.000)
Hãy tìm một phương án trả tiền sao cho trả đủ n đồng và số tờ giấy bạc phải trả là ít nhất
Ý tưởng phương pháp tham lam để giải quyết bài toán trả tiền của máy rút tiền tự động ATM:
Gọi X = (X1, X2, X3, X4) là một phương án trả tiền
Trước hết ta chọn tối đa các tờ giấy bạc 100.000 đồng, nghĩa là X1 là số
nguyên lớn nhất sao cho X1 * 100.000 n
Tức là X1 = n DIV 100.000
Xác định số tiền cần rút còn lại là hiệu n – X1 * 100000
Trang 11Giả sử n = 1290000, phương án trả tiền như sau:
Đây là một phương án tối ưu
Tuy nhiên giả sử trong máy ATM có các loại tiền mệnh giá 50.000đ, 80.000 đồng, 10.000đ thì khi đó để rút 100.000đ theo ý tưởng tham lam sẽ có phương án rút một tờ mệnh giá 80.000đ và hai tờ mệnh giá 10.000đ Đây chưa phải là phương
án tối ưu vì phương án tối ưu nhất là rút hai tờ mệnh giá 50.000đ Song, cách lựa chọn theo ý tưởng tham lam cũng là một phương án tốt, có thể chấp nhận được trong thực tế
1.1.2 Đặc trưng của 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
Thuật toán tham lam có trường hợp luôn tìm ra đúng phương án tối ưu, có trường hợp không Nhưng trong trường hợp thuật toán tham lam không tìm ra đúng phương án tối ưu, chúng ta thường thu được một phương án khả dĩ chấp nhận được
Với một bài toán có nhiều thuật toán để giải quyết, thông thường thuật toán tham lam có tốc độ tốt hơn hẳn so với các thuật toán tối ưu tổng thể
Đặc trưng của thuật toán tham lam thường thể hiện bởi: trong mỗi bước, việc
xử lí sẽ tuân theo một sự lựa chọn trước, không kể đến tình trạng không tốt có thể
Trang 121.1.3 Thiết kế thuật toán dựa trên ý tưởng phương pháp tham lam
Khác với các kỹ thuật thiết kế thuật toán như chia để trị, liệt kê, quy hoạch động mà chúng ta đã biết, rất khó để đưa ra một quy trình chung để tiếp cận bài toán, tìm thuật toán cũng như cài đặt thuật toán tham lam
Giải thuật tham lam (Greedy algorithm) là một thuật toán giải quyết một bài
toán theo kiểu metaheuristic để tìm kiếm lựa chọn tối ưu địa phương ở mỗi bước đi với hi vọng tìm được tối ưu toàn cục Chẳng hạn áp dụng giải thuật tham lam với
bài toán hành trình của người bán hàng ta có giải thuật sau: “Ở mỗi bước hãy tìm đến thành phố gần thành phố hiện tại nhất”
Nói chung, giải thuật tham lam thường có 5 thành phần:
1 Một tập các ứng viên để từ đó tạo ra lời giải
2 Một hàm lựa chọn để theo đó chọn ứng viên tốt nhất để bổ sung vào lời giải
3 Một hàm khả thi dùng để quyết định nếu một ứng viên có thể được dùng
để xây dựng lời giải
4 Một hàm mục tiêu ấn định giá trị của lời giải hoặc một lời giải chưa hoàn chỉnh
5 Một hàm đánh giá chỉ ra khi nào ta tìm ra một lời giải hoàn chỉnh
1.1.3.1 Các thành phần quyết định tham lam
Tính chất lựa chọn tham lam
Thành phần then chốt trước tiên là tính lựa chọn tham lam: một giải pháp tối ưu toàn cục có thể đạt được bằng cách lựa chọn tối ưu cục bộ (tham lam) Nói một cách khác, khi có nhiều sự lựa chọn thì ta lựa chọn phương án nào tốt nhất ở hiện tại trong bài toán hiện tại, mà không cần quan tâm đến kết quả các bài toán con của nó Thuộc tính lựa chọn tham lam thường đạt được hiệu lực trong việc thực hiện lựa chọn của ta trong bài toán con Ví dụ, trong bài toán chọn hoạt động, giả sử rằng ta
có các hoạt động được sắp xếp sẵn theo thứ tự tăng dần của thời điểm kết thúc, ta
Trang 13ta có thể thực hiện các lựa chọn tham lam nhanh chóng, vì vậy đưa ra một thuật toán hiệu quả
Chúng ta có thể lựa chọn giải pháp nào được cho là tốt nhất ở thời điểm hiện tại và sau đó giải bài toán con nảy sinh từ việc lựa chọn vừa rồi Lựa chọn của thuật toán tham lam có thể phụ thuộc vào các lựa chọn trước đó Nhưng nó không thể phụ thuộc vào một lựa chọn nào trong tương lai hay phụ thuộc vào lời giải của các bài toán con Thuật toán tiến triển theo kiểu thực hiện các lựa chọn theo một vòng lặp, cùng lúc đó thu nhỏ bài toán đã cho về một bài toán con nhỏ hơn Giải thuật tham lam quyết định sớm và thay đổi đường đi của thuật toán theo quyết định đó, và không bao giờ xét lại các quyết định cũ Đối với một số bài toán, đây có thể là một thuật toán không chính xác
Cấu trúc con tối ưu
Một bài toán có cấu trúc con tối ưu nếu giải pháp tối ưu cho bài toán nàychứa trong nó các giải pháp tối ưu cho các bài toán con Thuộc tính này là điểm
để quyết định ta có thể giải quyết bài toán bằng phương pháp quy hoạch động cũng như tham lam được hay không Như một ví dụ của cấu trúc con tối ưu, quay về cách
ta chứng minh rằng nếu một giải pháp tối ưu đối với bài toán con Sij có chứa một
hoạt động ak, sau đó nó cũng phải chứa các giải pháp tối ưu đối với các bài
toán Sik và Skj Cấu trúc con tối ưu này được đưa ra, ta nói rằng nếu biết hoạt động nào sử dụng như ak, ta có thể xây dựng một giải pháp tối ưu đối với Sij bằng việc lựa chọn cùng với tất cả hoạt động của các giải pháp tối ưu đối với các bài toán con
Sik và Skj. Dựa trên sự quan sát này của cấu trúc con tối ưu, ta có thể đưa ra công thức đệ quy mà nó định rõ giá trị của một giải pháp tối ưu
Ta thường sử dụng thêm cấu trúc con tối ưu gần như trực tiếp, khi áp dụng
nó đối với các giải thuật tham lam Ta không cần thiết cho rằngđiđến một bài toán con bằng cách thực hiệnlựa chọn tham lam trong bài toán tối ưu Ta cần làmlà cho rằng một giải pháp tối ưu đối với bài toán con, kết hợp với lựa chọn tham lam vừa được thực hiện, mang lại một giải pháp tối ưu đối với bài toán ban đầu Sự phối hợp hoàn toàn sử dụng phương pháp quy nạp đối vớicác bài toán con để chứng minh
Trang 14rằng việc sử dụng lựa chọn tham lam tại mỗi bước tạo ra một giải pháp tối ưu
Một bài toán được gọi là có cấu trúc tối ưu nếu một lời giải tối ưu của bài toán con chứa lời giải tối ưu của bài toán lớn hơn
1.1.3.2 Sơ đồ chung để giải các bài toán bằng giải thuật tham lam
Dạng các bài toán giải bằng phương pháp tham lam
Giả sử phải chọn một tập con R của các phần tử của một tập S =(s1,s2,…,sn)
sao cho tập R thỏa mãn một điều kiện ràng buộc W(R) nào đó, và một hàm mục tiêu Z(R) đạt giá trị tối ưu
Ví dụ bài toán tối ưu tổ hợp:
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 D có dạng X = (x1, x2, ,xn) được gọi là một phương án
Cần tìm một phương án X* D sao cho f(X*) đạt min(max) Phương án X*
như thế được gọi là phương án tối ưu
Sơ đồ chung để giải các bài toán bằng giải thuật tham lam
Bước 1: Chọn một phần tử s có lợi nhất cho lời giải trong bước đó sao cho
phần tử này cùng với lời giải tối ưu của bài toán con với tập con S – {s} với ràng buộc W(R-{s}) là lời giải tối ưu cho bài toán
Bước 2: Tiếp tục tìm phần tử tiếp theo có lợi nhất với tập con S=S-{s} với ràng buộc W(R-{s}) và hàm mục tiêu Z = Z (R-{s}) Cho đến khi không tìm được phần tử như vậy hoặc tập S =
1.1.3.3 Lược đồ giải thuật tham lam
Tư tưởng của phương pháp tham lam
Ta xây dựng tập S dần từng bước, bắt đầu từ tập rỗng Tại mỗi bước ta sẽ chọn một phần tử “tốt nhất” trong các phần tử còn lại của A để đưa vào S Việc lựa
chọn một phần tử như thế ở mỗi bước được hướng dẫn bởi hàm chọn Phần tử được
chọn sẽ được loại khỏi tập A Nếu khi thêm phần tử được chọn vào tập S mà S vẫn
Trang 15Lược đồ tổng quát như sau:
Procedure Greedy(A, S) // A là một tập các ứng cử viên, S là tập quyết định –
nghiệm Begin
Trong lƣợc đồ tổng quát trên, Select là hàm chọn, nó cho phép ta chọn từ tập A một
phần tử đƣợc xem là tốt nhất, nhiều hứa hẹn nhất là thành viên của tập nghiệm
Trang 161.1.3.4 Thiết kế một thuật toán dựa trên ý tưởng tham lam
Khi tiếp cận bài toán và tìm thuật toán tham lam thì cần khảo sát kĩ bài toán
để tìm ra các tính chất đặc biệt mà ở đó ta có thể đưa ra quyết định tức thời tại từng bước dựa vào sự đánh giá tối ưu cục bộ địa phương
Ý tưởng của phương pháp tham lam trong thiết kế thuật toán được tiến hành là: Xác định trật tự xử lí để có lợi nhất, sắp xếp dữ liệu theo trật tự đó, xử lí dữ liệu theo trật tự đã nêu
1.1.3.5 Tiến trình thực hiện phương pháp tham lam
Thuật toán tham lam có được một giải pháp tối ưu cho một bài toán bằng cách thực hiện một chuỗi các lựa chọn Đối với mỗi quyết định chỉ ra trong thuật toán, sự lựa chọn này dường như tốt nhất tại thời điểm được chọn Chiến lược phỏng đoán này không luôn tạo ra giải pháp tối ưu, nhưng thỉnh thoảng nó giải quyết được Quy trình thực hiện để phát triển thuật toán tham lam đi qua từng bước như sau:
1 Xác định cấu trúc con tối ưu
2 Xây dựng giải pháp đệ quy
3 Chứng minh: tại mỗi bước đệ qui, lựa chọn tham lam là một trong những lựa chọn cho kết quả tối ưu
4 Chỉ ra: sau mỗi lựa chọn tham lam, một trong những bài toán con sẽ rỗng
5 Xây dựng giải pháp đệ quy cho chiến lược tham lam
6 Khử đệ quy
Qua các bước này, ta đã thấy chi tiết cơ bản nguồn gốc quy hoạch động của thuật toán tham lam Trong thực tế, ta thường tổ chức hiệu quả các bước trên khi thiết kế giải thuật tham lam Ta phát triển cấu trúc con với một cái nhìn hướng đến thực hiện lựa chọn tham lam mà để lại một bài toán con được giải quyết một cách
Trang 17Ví dụ - bài toán chọn hoạt động:
Bài toán sắp xếp lịch cho nhiều hoạt động với ý nghĩa để có thể sử dụng chung một tài nguyên (mỗi thời điểm chỉ có một hoạt động sử dụng tài nguyên chung), với mục tiêu là sắp xếp sao càng có nhiều hoạt động tương thích sử dụng tài nguyên càng tốt
Giả sử ta có một tập hợp S = {a1, a2, , an } là tập các hoạt động muốn sử dụng tài nguyên, ví dụ một hội trường, chỉ mỗi một hoạt động tại mỗi thời điểm Mỗi
hoạt động ai sẽ có thời điểm bắt đầu là si và thời điểm kết thúc là fi, với điều kiện
0 ≤ si < fi < ∞ Nếuhoạt động ai đượcchọn, thì nó sẽ độc chiếm tài nguyên trong
khoảng thời gian [si, fi) Hoạt động ai và aj đượcgọi là tương thích lẫn nhau nếu như
khoảng thời gian [si, fi) và [aj, fj) là không giao nhau (Ví dụ ai và aj là tương thích
nếu si ≥ fj hoặc sj ≥ fi ) Trong bài toánchọn hoạt động ta phải chọn tập con lớn nhất
của các hoạt động tương thích lẫn nhau Chẳng hạn, xem tập S của các hoạt động
sau, mà ta có thể sắp xếp tăng dần theo thời điểm kết thúc
Ta sẽ thấy một cách ngắn gọn là tại sao nó thuận lợi để xem xét các hoạt
động trong trình tự sắp xếp Chẳng hạn như, một tập con {a3, a9, a11 } bao gồm những hoạt động tương thích lẫn nhau Nó không phải là tập con lớn nhất, vì một
tập con {a1, a4, a8, a11} là lớn hơn Thật ra {a1, a4, a8, a11} là tập con lớn nhất của
các hoạt động tương thích lẫn nhau; một tập con lớn nhất khác là {a2, a4, a9, a11}
Ta sẽ giải quyết bài toán này trong một vài bước Bắt đầu bởi việc đưa ra công thức của giải pháp quy hoạch động đối với bài toán này trong đó ta tổng hợp
i 1 2 3 4 5 6 7 8 9 10 11
Si 1 3 0 5 3 5 6 8 8 2 12
Fi 4 5 6 7 8 9 10 11 12 13 14
Trang 18các giải pháp tối ưu đối với hai bài toán con để thiết lập giải pháp tối ưu của bài toán gốc Ta có các lựa chọn khi quyết định các bài toán để sử dụng trong một giải pháp tối ưu Sau đó, ta sẽ nhận thấy rằng ta chỉ cần một lựa chọn duy nhất - lựa chọn tham lam - và sau khi ta lựa chọn chỉ còn một bài toán con, một bài toán con còn lại sẽ rỗng
Dựa trên những nhận xét này, ta sẽ xây dựng một giải thuật tham lam đệ quy
để giải quyết bài toán lập lịch hoạt động Ta sẽ hoàn thành quá trình xây dựng giải thuật tham lam bởi việc biến đổi giải thuật đệ quy sang giải thuật lặp Mặc dù những bước ta thực hiện trong phần này thể hiện mối liên quan nhiều hơn là tiêu biểu cho
sự phát triển của phương pháp tham lam, chúng minh hoạ cho mối quan hệ của phương pháp tham lam và quy hoạch động
Ta trước tiên định nghĩa bài toán con Sij, mà cả hai i và j khác nhau Ta đã thấy rằng nếu ta luôn thực hiện lựa chọn tham lam, ta có thể giới hạn các bài toán
con được thành lập bởi Si,n+1
Như một sự lựa chọn, ta có thể tạo nên cấu trúc con tối ưu với một lựa chọn tham lam có nghĩa Điều đó là, ta có thể bỏ qua chỉ số dưới thứ hai và định nghĩa
các bài toán con của công thức Si = {ak S : fi ≤ Sk} Sau đó, ta có thể chứng minh
rằng một lựa chọn tham lam (hoạt động đầu tiên am để kết thúc Si ), kết hợp với một
giải pháp tối ưu để đi đến tập còn lại Sm của các hoạt động tương thích, mang lại
một giải pháp tối ưu đối với Si Tổng quát hơn, ta thiết kế thuật toán tham lam theo chuỗi các bước:
1 Tìm lựa chọn sao cho bước tiếp theo chỉ việc giải quyết một bài toán con
2 Chứng minh rằngvới sự lựa chọn tham lam tại mỗi bước ta luôn tìm được một giải pháp tối ưu của bài toán ban đầu
3 Chỉ ra rằng, với sự lựa chọn tham lam tại mỗi bước, giải pháp tối ưu của bài
Trang 19Có thể nói một cách như thế nào nếu một giải thuật tham lam sẽ giải quyết được một bài toán tối ưu riêng biệt? Không có cách tổng quát, nhưng chiến lược lựa chọn tham lam và cấu trúc con tối ưu là hai thành phần then chốt Nếu ta có thể chứng minh rằng bài toán có các thuộc tínhnày, sau đó ta thuận lợi trong cách xây dựng một thuật toán tham lam cho nó
1.2 Ví dụ
1.2.1 Bài toán lựa chọn công việc
Giả sử rằng ta có một tập S = { 1,2, , n} của n công việc sử dụng cùng một
tài nguyên, ví dụ như một phòng họp, tại một thời điểm chỉ có một công việc được
tiến hành Các công việc i được bắt đầu tại thời điểm si và kết thúc tại thời điểm f
Hãy lựa chọn các công việc không mâu thuẫn nhau (nghĩa là hoạt động i và j
là tương thích nếu khoảng thời gian [s
INPUT: Thời gian khởi đầu s[1 n]; Thời gian kết thúc f[1 n]
OUTPUT: Lựa chọn các công việc không mâu thuẫn nhau sao cho số công việc được chọn là nhiều nhất
1.2.3 Tính chất của lời giải
Giả sử dãy công việc được sắp xếp tăng dần theo thời điểm kết thúc :
f
1 f
2 f
n
1 Luôn tồn tại một lời giải tối ưu chứa công việc thứ nhất
2 Nếu A S là lời giải tối của bài toán có chứa việc 1 thì A – {1} là lời giải tối ưu của bài toán với tập S’ gồm các công việc bắt đầu từ thời điểm f
1
trở đi
Trang 201.2.4 Các bước của thuật giải tham lam
1 Xác định cấu trúc tối ưu của bài toán
Tìm cấu trúc tối ưu để xây dựng một lời giải tối ưu cho bài toán từ những lời giải tối ưu của các bài toán con
Gọi Sij là tập con của các hoạt động trong S có thể bắt đầu sau khi hoạt động a
i kết thúc và trước khi hoạt động a
j bắt đầu
Sij chứa các hoạt động tương thích với ai và aj và cũng tương thích với tất cả
các hoạt động kết thúc không muộn hơn và bắt đầu không sớm hơn bắt đầu của aj
Giả sử các hoạt động được sắp xếp theo thứ tự tăng thời gian kết thúc của các hoạt động
Để tìm cấu trúc con cho bài toán xếp lịch, khảo sát các bài toán con Sij khác
rỗng và giả thuyết lời giải Sij chứa một số hoạt động ak sao cho:
kj, mỗi bài toán con chứa một
tập con các hoạt động Sij Lời giải cho Sij là tổ hợp của lời giải S
ik và S
kj cùng với chính hoạt động a
kj mà được dùng cho lời giải tối ưu cho tập Sij
cũng phải tối ưu
2 Xây dựng lời giải đệ qui
Tìm các tập con kích cỡ tối đa Aik và Akj chứa các hoạt động tương thích nhau cho mỗi bài toán con
Trang 21Ta có công thức đệ qui để tìm c[i, j]
Chọn hoạt động am trong Sij có thời gian hoàn thành sớm nhất, rồi tìm lời giải
cho bài toán con Smj Hoạt động đƣợc chọn theo cách tham lam nghĩa là nó làm tối
đa thời gian còn lại chƣa đƣợc xếp lịch để đƣợc xếp lịch cho nhiều hoạt động khác
Loại bỏ những hoạt động chƣa đƣợc xếp lịch (bị trùng lặp)
Lặp lại quá trình trên
3 Chứng minh với bất kỳ lời gọi đệ qui, một lựa chọn tối ƣu là một lựa chọn tham lam Vì vậy nó luôn đảm bảo để tạo một lựa chọn tham lam
Chứng minh giải thuật sử dụng hai thuộc tính sau:
Bài toán có cấu trúc tối ƣu
Thuật giải thỏa mãn thuộc tính chọn tham lam
Một bài toán thể hiện cấu trúc tối ƣu nếu lời giải tối ƣu của bài toán lớn luôn chứa trong nó những lời giải tối ƣu của bài toán con
Nếu A S là lời giải tối của bài toán có chứa việc một thì A’ = A – {1} là lời giải tối ƣu của bài toán với tập S’ gồm các công việc bắt đầu từ thời điểm f
từ lựa chọn đó
Trang 22Lựa chọn đƣợc tạo ra bởi giải thuật tham lam có thể phụ thuộc vào những lựa chọn ở xa nhƣng nó không thể phụ thuộc vào bất kỳ lựa chọn sẽ đƣợc phát sinh hay những lời giải của bài toán con
4 Chỉ ra rằng duy nhất một bài toán con sau khi chọn tham lam là khác rỗng
5 Phát triển lời giải đệ qui để thực hiện giải thuật tham lam
Giải thuật tham lam giải bài toán lựa chọn công việc
A:= A{i};
K:= i;
End;
Return A
Trang 23Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG PHÁP
2.1 Bài toán người du lịch
2.1.1 Phát biểu bài toán
Một người du lịch muốn tham quan n thành phố T1, T2,…,Tn Xuất phát từ một thành phố nào đó người du lịch muốn đi qua tất cả các thành phố còn lại, mỗi thành phố đi qua đúng một lần rồi quay lại đúng thành phố xuất phát Giả thiết luôn
có đường đi giữa hai thành phố bất kì
Gọi CP(i,j) là chi phí đi từ thành phố Ti đến Tj Hãy tìm hành trình thỏa mãn yêu cầu bài toán sao cho chi phí là nhỏ nhất
2.1.2 Phân tích thiết kế thuật toán
2.1.2.1 Xác định bài toán
INPUT: n thành phố, CP(i,j) _ chi phí đi từ thành phố Ti đến Tj
OUTPUT: Hành trình tối ưu và chi phí tương ứng
2.1.2.2 Ý tưởng
Đây là bài toán tìm chu trình có trọng số nhỏ nhất trong một đơn đồ thị vô hướng có trọng số
Thuật toán tham lam cho bài toán là chọn thành phố có chi phí nhỏ nhất tính
từ thành phố hiện thời đến thành phố chưa qua
2.1.2.3 Xây dựng thuật toán
Input: n thành phố, C= (Cij)
Output: TOUR //Hành trình tối ưu,
COST;//Chi phí tương ứng
Trang 24- COST := COST + Cvw ;//Cập nhật chi phí
// Chuyến đi hoàn thành - khi hành trình trở về thành phố xuất phát ban đầu
TOUR := TOUR + <v, u>;
Trang 25∈ O(n2
)
Trang 262.2 Bài toán cây bao trùm ngắn nhất
2.2.1 Phát biểu bài toán
Cho một đồ thị liên thông G vô hướng bao gồm n đỉnh, mã số từ 1 đến n, và m
cạnh nối hai đỉnh với nhau Mỗi cạnh có chiều dài cho trước Tính liên thông của đồ thị cho biết với hai đỉnh cho trước tuỳ ý ta luôn tìm được các cạnh gối đầu nhau để đi
từ đỉnh này đến đỉnh kia Hãy chỉ ra một phần P của đồ thị thoả các tính chất sau:
(i) P chứa tất cả các đỉnh của G;
(ii) P chứa một số ít nhất các cạnh của G;
(iii) P là đồ thị liên thông;
(iv) Tổng chiều dài các cạnh của P là ngắn nhất
Đồ thị P thoả ba tính chất (i), (ii) và (iii) được gọi là cây bao trùm của đồ thị G Nếu P thoả thêm tính chất (iv) thì P được gọi là cây bao trùm ngắn nhất của G Một
số tài liệu dùng thuật ngữ cây khung thay cho cây bao trùm và cây khung cực tiểu
thay cho cây bao trùm ngắn nhất
Dữ liệu vào: tệp văn bản tên DOTHI.INP
- Dòng đầu tiên ghi hai số tự nhiên n và m cách nhau qua dấu cách, biểu thị số đỉnh (n) và số cạnh (m) của đồ thị
- Mỗi dòng thứ i = 1, 2, , m trong số m dòng tiếp theo ghi ba giá trị x y và d cách nhau qua dấu cách với ý nghĩa cạnh (x, y) của đồ thị có chiều dài d
Dữ liệu ra: tệp văn bản tên DOTHI.OUT bao gồm:
- Danh sách các cạnh được chọn
- Dòng cuối cùng ghi tổng chiều dài tìm được
2.2.2 Phân tích thiết kế thuật toán
2.2.2.1 Xác định bài toán
Input: Đồ thị có trọng số liên thông G vô hướng bao gồm n đỉnh, m cạnh
Output: Cây bao trùm ngắn nhất P của đồ thị G
Trang 272.1.2.3 Xây dựng thuật toán
Bước 1: Sắp xếp các cạnh theo thứ tự trọng số tăng dần và khởi tạo T := Ø
Bước 2: Duyệt theo cạnh e thuộc danh sách đã sắp xếp
+ Nếu T + {e} không chứa chu trình thì ghép e vào cây T:= T + {e}
Trang 28Tổng chiều dài 7 cạnh đã chọn và tổng độ dài các cạnh đã chọn là: 14
Đồ thị đầu
vào
Đồ thị đầu vào
Trang 29Mô tả thuật toán với ví dụ minh họa trên như sau:
Bước 2: Duyệt theo cạnh e thuộc danh sách đã sắp xếp
+ Vì T + {(1, 5)} không chứa chu trình thì ghép cạnh (1,5) vào cây T:= T + {(1,5)}
1
1
1
Trang 30+ Vì T + {(4, 8)} không chứa chu trình thì ghép cạnh (4,8) vào cây T:= T + {(4, 8)}
+ Vì T + {(7, 8)} không chứa chu trình thì ghép cạnh (7,8) vào cây T:= T + {(7, 8)}
+ Vì T + {(1, 6)} không chứa chu trình thì ghép cạnh (1,6) vào cây T:= T + {(1, 6)}
Trang 31+ Vì T + {(2, 3)} không chứa chu trình thì ghép cạnh (2,3) vào cây
Trang 32+ Vì T + {(1, 3)} không chứa chu trình thì ghép cạnh (1,3) vào cây
T:= T + {(1, 3)}
+ Vì T có đủ n -1 cạnh ( 7 cạnh) nên dừng
Cây khung cần tìm có 7 cạnh (đã chọn) và tổng độ dài các cạnh là: 14
Lưu ý đồ thị kết quả thu được ở các bước trung gian có thể không liên thông mà
bao gồm nhiều mảnh liên thông (cây con) Loại đồ thị này được gọi là rừng Kết quả
cuối cùng sẽ là cây vì nó liên thông và được tạo thành từ n - 1 cạnh Ta vận dụng tổ
chức find-union cho các tập đỉnh rời nhau để quản lí các tập đỉnh được chọn nhằm
phát hiện chu trình Cạnh (x, y) khi được ghép vào đồ thị trung gian sẽ tạo thành chu trình khi và chỉ khi các đỉnh x và y cùng nằm trong một cây của đồ thị (rừng) trung
gian đó Như vậy mỗi cây con của đồ thị trung gian được quản lí như một tập con
của tập các đỉnh 1 n của đồ thị ban đầu Tập con này có phần tử đại diện chính là
gốc của cây tương ứng Phần tử này được chọn theo mã số nhỏ nhất Các đỉnh còn lại của cây con đều trỏ đến gốc đó
Dễ thấy cây bao trùm luôn luôn có n đỉnh và n - 1 cạnh
2.2.3 Xác định độ phức tạp của thuật toán
Trang 332.3 Thuật toán Dijkstra -Tìm đường đi ngắn nhất trong đồ thị có trọng số
2.3.1 Phát biểu bài toán
Cho G = (V, E) là đơn đồ thị liên thông (vô hướng hoặc có hướng) có trọng
số, V = {1, , n} là tập các đỉnh , E là tập các cạnh (cung)
Cho s0 ∈ E Tìm đường đi ngắn nhất đi từ s0 đến các đỉnh còn lại Giải bài toán trên bằng thuật toán Dijkstra
2.3.2 Phân tích thiết kế thuật toán
2.3.2.1 Ý tưởng thuật toán Dijkstra
Thuật toán Dijkstra cho phép tìm đường đi ngắn nhất từ một đỉnh s đến các
đỉnh còn lại của đồ thị và chiều dài (trọng số ) tương ứng
Phương pháp của thuật toán là xác định tuần tự đỉnh có chiều dài đến s theo thứ tự tăng dần
Thuật toán được xây dựng trên cơ sở gán cho mỗi đỉnh các nhãn tạm thời
Nhãn tạm thời của các đỉnh cho biết cận trên của chiều dài đường đi ngắn nhất từ s đến đỉnh đó Nhãn của các đỉnh sẽ biến đổi trong các bước lặp, mà ở mỗi bước lặp sẽ có một nhãn tạm thời trở thành chính thức Nếu nhãn của một đỉnh nào
đó trở thành chính thức thì đó cũng chính là chiều dài ngắn nhất của đường đi từ s
Trang 35Nếu v kề với si-1 thì L(v) = Min{L(v), L(si-1) + m(si-1,v)};
- Tìm si ∉ S và kề với sj, j = 0, i − 1 sao cho :
Thuật toán dừng khi i = n-1;
Khi thuật toán kết thúc, ta có :
0 = d(s0,s0) ≤ d(s0,s1) ≤ d(s0,s2) ≤ ≤ d(s0,sn-1)
Nếu chỉ tìm đường đi ngắn nhất từ s0 đến t, thì thuật toán dừng khi có t ∈ S
Tính chất tham lam của thuật toán Dijkstra
Tại mỗi bước, chọn si ∉ S và si là đỉnh kề với sj, với j = 0, i − 1 sao cho L(si )
= Min{L(v) : ∀v ∉ S }
Minh hoạ : Xét đồ thị có hướng G (hình dưới)
Đường đi ngắn nhất từ đỉnh s = 1 đến các đỉnh còn lại :
Trang 38- Tìm s5 ∉ S và kề với 1, 3,2, 6 hoặc 4 sao cho :
2.3.3 Xác định độ phức tạp của thuật toán
Thuật toán mô tả bởi 2 vòng lặp lồng nhau nên T(n) O(n2)
2.4 Bài toán cái ba lô
2.4.1 Phát biểu bài toán
Có n vật, mỗi vật i, i{1, ,n} đƣợc đặc trƣng bởi trọng lƣợng wi(kg) và giá trị vi(US) Có một chiếc túi xách có khả năng mang m(kg) Giả sử wi, vi,
m N* i{1, ,n}
Hãy chọn vật xếp vào ba lô sao cho ba lô thu đƣợc có giá trị nhất
2.4.2 Phân tích thiết kế thuật toán
Các wi của n vật có thể đƣợc biểu diễn bằng mảng: w=(w1, w2,…,wn)
Trang 39Output: c[1 n] đánh dấu các vật được chọn
Vmax: giá trị lớn nhất của chiếc túi xách
Mô tả:
Bước 1: Tính đơn giá cho các loại đồ vật
Bước 2: Xét các loại đồ vật theo thứ tự đơn giá từ lớn đến nhỏ
Bước 3: Với mỗi đồ vật được xét sẽ lấy một số lượng tối đa mà trọng lượng
còn lại của ba lô cho phép
Bước 4: Xác định trọng luợng còn lại của ba lô và quay lại bước 3 cho đến khi không còn có thể chọn được đồ vật nào nữa
Trang 40Theo đó thì thứ tự ưu tiên để chọn đồ vật là: B, A, D và cuối cùng là C Vật B được xét đầu tiên và ta chọn tối đa 3 cái vì mỗi cái vì trọng lượng mỗi cái là 10 và ba lô có trọng lượng 37 Sau khi đã chọn 3 vât loại B, trọng lượng còn lại trong ba lô là 37 - 3*10 = 7
Xét đến vật A, vì A có trọng lượng 15 mà trọng lượng còn lại của ba lô chỉ còn 7 nên không thể chọn vật A
Xét vật D và ta thấy có thể chọn 1 vật D, khi đó trọng lượng còn lại của ba lô
2.4.3 Xác định độ phức tạp của thuật toán
Thuật toán mô tả bởi 1 vòng lặp lồng nhau nên T(n) O(n)
2.5 Bài toán băng nhạc
2.5.1 Phát biểu bài toán
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 hát đã cho Với mỗi bài hát ta biết thời lượng phát của mỗi bài hát đó 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ỉ cần nhấn phím tương ứng với bài hát đó Để tìm và phát bài hát 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 đó Thời gian quay băng bỏ qua mỗi bài hát và thời gian phát bài hát đó đượ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 ) là 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