Thuật toán tham lam tập trung vào việc đưa ra các quyết định tại mỗi bước dựa trên thông tin có sẵn tại thời điểm đó, mà không xem xét các hệ quả tương lai hoặc tìm kiếm toàn bộ không gi
Trang 1TRƯỜNG ĐẠI HỌC HẢI PHÒNG
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN Học phần : Nhập môn trí tuệ nhân tạo
Đề tài: Thuật toán tham lam
Sinh viên thực hiện: 1 Nguyễn Hoàng Hiệp
3 Nguyễn Hải Long
4 Hoàng Ngọc Thạch
Hải Phòng, tháng 5 năm 2023
Trang 2PHẦN 1: GIỚI THIỆU VỀ THUẬT TOÁN THAM LAM 3
1. Định nghĩa về thuật toán tham lam 3
2. Đặc điểm và tính chất của thuật toán tham lam 3
3. Thuật toán tham lam trong lĩnh vực AI 4
PHẦN 2: MÔ TẢ THUẬT TOÁN THAM LAM 5
1 Nguyên lý hoạt động của thuật toán tham lam 5
2 Ưu điểm và nhược điểm của thuật toán 6
PHẦN 3: CÀI ĐẠT CODE MẪU VÀ ỨNG DỤNG 7
1 Ví dụ minh họa và cài đặt code 7
2 Ứng dụng thực tế 11
PHẦN 4: KẾT LUẬN 12
1 Kết luận 12
2 Nhân xét và đánh giá 12
3 Tài liệu tham khảo 13
Trang 3PHẦN 1: GIỚI THIỆU VỀ THUẬT TOÁN THAM LAM
Thuật toán tham lam (greedy algorithm) là một phương pháp giải quyết bài toán trong lĩnh vực khoa học máy tính và tối ưu hóa Thuật toán tham lam tập trung vào việc đưa ra các quyết định tại mỗi bước dựa trên thông tin có sẵn tại thời điểm đó, mà không xem xét các hệ quả tương lai hoặc tìm kiếm toàn bộ không gian giải pháp
Thuật toán tham lam thường được áp dụng trong các bài toán tối ưu hóa, bài toán lập lịch, bài toán tìm đường đi và các vấn đề tương tự Ví dụ, trong bài toán tìm đường đi ngắn nhất trên đồ thị, thuật toán Dijkstra dựa trên phương pháp tham lam để lựa chọn đường đi ngắn nhất từ điểm xuất phát đến các điểm khác
2 Đặc điểm và tính chất của thuật toán tham lam
2.1 Đặc điểm
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 tronghai trật tự là tăng hoặc giảm dần theo một chỉ tiêu nào đó
Giải thuật cho những bài toán tối ưu thường đi qua một số bước, với một tập hợp các chọn lựa tại mỗi bước Phương pháp tham lam luôn chọn phương án tốt nhất vào thời điểm hiện tại Nó chọn tối ưu cục bộ với hy vọng rằng lựa chọn này sẽ dẫn đến một kết quả tối ưu toàn cụ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
Trang 42.2 Tính chất
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 chọn lựa 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
3 Thuật toán tham lam trong lĩnh vực AI
Thuật toán tham lam (greedy algorithm) là một phương pháp được sử dụng trong trí tuệ nhân tạo để giải quyết các bài toán tối ưu Với mỗi bước, thuật toán tham lam luôn chọn lựa giá trị tốt nhất có thể tại thời điểm đó mà không quan tâm đến những tác động lâu dài hoặc tối ưu toàn cục Nó chỉ tập trung vào việc đưa ra quyết định tốt nhất trong từng giai đoạn cụ thể, mà không xem xét các lựa chọn tiếp theo và ảnh hưởng của chúng
Vai trò của thuật toán tham lam trong trí tuệ nhân tạo là giải quyết các bài toán tối ưu đơn giản và có cấu trúc Một số ứng dụng thường gặp của thuật toán tham lam bao gồm:
1 Bài toán đường đi ngắn nhất: Trong một đồ thị, thuật toán tham lam có thể được sử dụng để tìm đường đi ngắn nhất từ một điểm đến một điểm khác Thuật toán này chọn liên tục các cạnh có trọng số nhỏ nhất để đi từ điểm xuất phát đến điểm đích
Trang 52 Bài toán túi lưới (Knapsack problem): Thuật toán tham lam có thể được
sử dụng để giải quyết bài toán túi lưới, trong đó có một túi có khả năng chứa một trọng lượng cụ thể và một danh sách các món hàng với giá trị
và trọng lượng Mục tiêu là chọn một tập hợp con các món hàng sao cho tổng giá trị là lớn nhất và tổng trọng lượng không vượt quá khả năng chứa của túi
3 Bài toán tạo lịch (Scheduling problem): Trong bài toán lập lịch, thuật toán tham lam có thể được sử dụng để xác định thứ tự thực hiện các công việc Thuật toán này chọn liên tục công việc có thời gian hoàn thành ngắn nhất để thực hiện trước
PHẦN 2: MÔ TẢ THUẬT TOÁN THAM LAM
1 Nguyên lý hoạt động của thuật toán tham lam
Nguyên lý hoạt động của thuật toán tham lam (greedy algorithm) là lựa chọn tốt nhất tại mỗi bước, dựa trên thông tin hiện tại, mà không xem xét tác động của lựa chọn đó tới các bước sau này Thuật toán này thực hiện các quyết định cục bộ nhằm tối ưu hóa giá trị ngay tại thời điểm hiện tại, với hy vọng rằng các quyết định nhỏ này cộng lại sẽ dẫn đến kết quả tối ưu tổng thể Cách thức hoạt động cơ bản của thuật toán tham lam bao gồm các bước sau:
1 Đặt điểm khởi đầu: Bước đầu tiên của thuật toán là đặt một điểm khởi đầu, thường là một giá trị ban đầu hoặc một tập hợp ban đầu
Trang 62 Lựa chọn tốt nhất: Tại mỗi bước, thuật toán tham lam lựa chọn giá trị tốt nhất hoặc tối ưu nhất tại thời điểm đó, dựa trên các tiêu chí hoặc hàm mục tiêu đã xác định trước đó
3 Kiểm tra ràng buộc: Sau khi lựa chọn, thuật toán kiểm tra xem lựa chọn
đó có thỏa mãn các ràng buộc của bài toán hay không Nếu không, thuật toán có thể loại bỏ hoặc điều chỉnh lựa chọn và tiếp tục lựa chọn khác
4 Lặp lại: Tiếp tục lặp lại các bước 2 và 3 cho đến khi đạt được điều kiện dừng, ví dụ như đạt đến một điểm dừng hoặc không còn lựa chọn khả dĩ nào
2 Ưu điểm và nhược điểm của thuật toán
2.1 Ưu điểm
Đơn giản: Thuật toán tham lam dễ hiểu và cài đặt Không yêu cầu phức tạp trong thuật toán hoặc cấu trúc dữ liệu phức tạp
Hiệu suất tính toán: Thuật toán tham lam thường có độ phức tạp thời gian thấp hơn so với các thuật toán khác như thuật toán tìm kiếm toàn diện Điều này làm cho nó trở thành một lựa chọn tốt trong các bài toán lớn với dữ liệu lớn
Thời gian chạy nhanh: Vì thuật toán tham lam không xem xét tất cả các lựa chọn có thể, nó có thể đưa ra kết quả nhanh chóng
Có thể tìm được giải pháp gần đúng: Mặc dù thuật toán tham lam không đảm bảo tìm được giải pháp tối ưu toàn cục, nhưng nó có thể tìm được giải pháp gần đúng trong thời gian ngắn
2.2 Nhược điểm
Trang 7 Không đảm bảo tối ưu toàn cục: Thuật toán tham lam chỉ tập trung vào tối ưu hóa cục bộ tại mỗi bước và không xem xét tác động dài hạn Điều này có thể dẫn đến việc không đạt được giải pháp tối ưu toàn cục
Dễ rơi vào vết cạn: Thuật toán tham lam có thể dễ dàng rơi vào vết cạn, trong đó lựa chọn tốt nhất tại mỗi bước không dẫn đến kết quả tối ưu tổng thể
Không xem xét các ràng buộc: Thuật toán tham lam thường không xem xét các ràng buộc của bài toán Điều này có thể dẫn đến việc lựa chọn không thỏa mãn các ràng buộc, và kết quả cuối cùng không hợp lý
Phụ thuộc vào tiêu chí lựa chọn: Thuật toán tham lam dựa trên tiêu chí lựa chọn tại mỗi bước Nếu tiêu chí này không được xác định chính xác, thuật toán có thể đưa ra kết quả không tốt
PHẦN 3: CÀI ĐẠT CODE MẪU VÀ ỨNG DỤNG
1 Ví dụ minh họa và cài đặt code
Ví du1: Bài toán mua sách
Trong nhà sách đang ban một bộ sách gồm n cuốn sách mỗi cuốn sách
có giá là a[i] Nhà sách đang có ưu đãi là mua 3 cuốn thì miễn phí cho quyển sách rẻ nhất trong 3 cuốn đấy Tìm chi phí thấp nhất để mua n cuốn sách Input
7
5 3 6 9 1 2 2
Output
21
Như ví dụ trên ta mua 3 quyển thì sẽ được miễn phí rẻ nhất và đề bài yêu cầu mua 7 quyển với chi phí rẻ nhất
Ta có: Đầu tiên mua 3 quyển vs giá 5 6 9 thì ta được miễn phí quyển với giá là 5 => ta số tiền phải mất là 9 + 6 = 15
Trang 8 Ta mua 3 quyển tiếp theo với giá 3 2 2 thì quyển với giá là 2 được miễn phí => 3 +2 = 5
Còn 1 quyển với giá là 1 thì ko được ưu đã gì và số tiền cuối cùng phải mất là 15 + 5 +1 = 21(như ví dụ)
Code:
Trang 9Ví dụ 2: Bài toán bốc sỏi
Trang 10Cho n viên sỏi, bản được bốc ra 1, 2, 3, … m viên sỏi Mỗi người bốc 1 lần rồi đến người kia Đến hết lượt bốc của người nào mà số đá bang 0 thì người đó thắng
Vi du: Cho số đá là n = 10, Số đá tối đa được bốc m = 5
A: Bốc 4 viên Còn lại 6 viên đá
B: Bốc 5 viên Còn lại 1 viên đá
A: Bốc 1 viên Còn lại 0 viên đá => A thắng
Trang 11 Code:
Trang 122 Ứng dụng thực tế
Trang 13 Lập lịch công việc: Trong vấn đề lập lịch công việc, thuật toán tham lam có thể được sử dụng để tìm một lịch trình tối ưu dựa trên thời gian hoàn thành công việc và mức độ ưu tiên Thuật toán tham lam sẽ chọn công việc có thời gian hoàn thành sớm nhất hoặc mức độ ưu tiên cao nhất để xếp vào lịch trình, mà không xem xét tác động lâu dài của quyết định này
Vấn đề bao phủ tối thiểu: Trong vấn đề bao phủ tối thiểu, thuật toán tham lam được sử dụng để tìm một tập hợp nhỏ nhất các phần tử sao cho mỗi phần tử trong tập hợp đều "bảo phủ" được bởi ít nhất một phần tử khác Thuật toán tham lam có thể chọn phần tử bảo phủ được nhiều phần tử nhất
để đảm bảo tập hợp cuối cùng là tối thiểu
Bài toán túi lưới: Trong bài toán túi lưới (knapsack problem), ta có một túi
có giới hạn trọng lượng và một danh sách các vật phẩm với giá trị và trọng lượng riêng Mục tiêu là lựa chọn các vật phẩm để đạt được tổng giá trị lớn nhất mà không vượt quá trọng lượng của túi Thuật toán tham lam có thể chọn các vật phẩm có giá trị lớn nhất trước tiên, mà không xem xét trọng lượng, để đạt được kết quả gần với tối ưu
Trang 14PHẦN 4: KẾT LUẬN
Thuật toán tham lam là một phương pháp đơn giản và nhanh chóng để giải quyết một loạt vấn đề tối ưu Nó được sử dụng trong nhiều ứng dụng thực tế và thường cho kết quả tốt đối với các bài toán tối ưu cục bộ Tuy nhiên, thuật toán tham lam không đảm bảo tìm được giải pháp tối
ưu toàn cục và có thể bỏ qua thông tin quan trọng Điều này đòi hỏi cẩn trọng khi áp dụng thuật toán tham lam và xem xét các giới hạn và hạn chế của nó
Trong nhiều trường hợp, việc kết hợp thuật toán tham lam với các phương pháp khác, như tìm kiếm cục bộ hay quy hoạch động, có thể cải thiện kết quả và đảm bảo tính tối ưu hơn
Tóm lại, thuật toán tham lam là một công cụ hữu ích trong việc giải quyết các vấn đề tối ưu và một phương pháp quan trọng trong lĩnh vực khoa học máy tính Tuy nhiên, việc sử dụng nó nên được xem xét cẩn thận và kết hợp với các phương pháp khác để đạt được kết quả tốt nhất
2 Nhân xét và đánh giá
Thuật toán tham lam (greedy algorithm) là một phương pháp giải quyết vấn
đề trong lĩnh vực khoa học máy tính Nó được thiết kế để đạt được lợi ích tối
ưu tại từng bước nhỏ trong khi không xem xét tác động lâu dài hoặc toàn cục Dưới đây là một số nhận xét và đánh giá về thuật toán tham lam:
1 Ưu điểm:
Đơn giản và dễ triển khai: Thuật toán tham lam thường dễ hiểu và dễ cài đặt Không cần phải tìm kiếm và xem xét tất cả các giải pháp có thể
Trang 15 Thời gian chạy nhanh: Thường thì thuật toán tham lam có thời gian chạy rất nhanh do chỉ cần thực hiện một số lượng hữu hạn các bước
Hoạt động tốt trong một số bài toán: Thuật toán tham lam thường cho kết quả tốt trong một số bài toán đặc thù, như bài toán cây bao trùm nhỏ nhất (minimum spanning tree) hoặc bài toán túi lưới (knapsack problem) với trọng lượng đơn vị
2 Nhược điểm:
Không đảm bảo tối ưu toàn cục: Do tính chất tham lam, thuật toán tham lam có thể rơi vào các tình huống không tìm ra lời giải tối ưu toàn cục Một quyết định sai lầm ở bước đầu có thể dẫn đến lời giải không tối ưu
Không phù hợp cho một số bài toán: Thuật toán tham lam không phải lúc nào cũng là phương pháp hiệu quả Trong một số bài toán, việc chỉ quan tâm đến lợi ích ngắn hạn có thể dẫn đến kết quả không mong muốn
Không áp dụng được cho bài toán tối ưu tổ hợp: Một số bài toán tối
ưu tổ hợp đòi hỏi phải xem xét tất cả các giải pháp có thể để tìm ra lời giải tốt nhất, điều mà thuật toán tham lam không thể đảm bảo
3 Sử dụng và cải tiến:
Kết hợp với các thuật toán khác: Thuật toán tham lam có thể được kết hợp với các phương pháp tìm kiếm khác để cải thiện kết quả
3 Tài liệu tham khảo
viblo.asia/p/thuat-toan-tham-lam-greedy-algorithm-XQZGxozlvwA
Trang 16 vi.wikipedia.org/wiki/Gi%E1%BA%A3i_thu%E1%BA
%ADt_tham_lam
Sách lập trình cơ sở - TS.Lê Đắc Nhường