Trong bài tiểu luận này, chúng tôi sẽ tập trung vào một trong những phương pháp tiếp cận phổ biến nhất để giải quyết vấn đề tô màu đồ thị, đó là thuật toán tham lam tô màu đồ thị Greedy
Trang 1BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA VIỄN THÔNG
- -BÀI TẬP LỚN THUẬT TOÁN THAM LAM TÔ MÀU ĐỒ THỊ
Giảng viên: PGS.TS Lê Hải Châu
Học phần: Cấu trúc dữ liệu và giải thuật
Nhóm: 4
Sinh viên thực hiện: B21DCVT077 Nguyễn Trọng Bình B21DCVT357 Nguyễn Minh Quân
B21DCVT149 Dương Văn Dương B21DCVT105 Tạ Văn Đăng
B21DCVT197 Vũ Minh Hiếu
Hà Nội, 5/2024
Trang 2Greedy Coloring Mục Lục
MỤC LỤC
MỤC LỤC……… ………2
LỜI NÓI ĐẦU……….… 3
I ĐỘNG LỰC, LÍ DO THỰC HIỆN……….…….……… 4
II LÝ THUYẾT, NGUYÊN LÝ HOẠT ĐỘNG……….……… …….5
2.1 Thuật toán tham lam……….……5
2.1.1 Khái niệm……… 5
2.1.2 Tính chất của thuật toán và áp dụng thuật toán……….….5
2.2 Tô màu đồ thị trong lí thuyết đồ thị……… ….6
2.2.1 Một số khái niệm về tô màu đồ thị……….………6
2.2.2 Ứng dụng tô màu đồ thị……….7
2.3 Áp dụng thuật toán tham lam trong tô màu đồ thị ……… 7
2.3.1 Khái niệm……… 7
2.3.2 Tư tưởng thuật toán ……….……… 7
2.3.3 Nguyên lý hoạt động ……….8
III MÃ GIẢ ……… 8
IV CÀI ĐẶT THUẬT TOÁN, PHÂN TÍCH VÀ ĐÁNH GIÁ………9
4.1 Cài đặt thuật toán ………9
4.2 Phân tích và đánh giá ………12
V TÀI LIỆU THAM KHẢO……….…… 13
Trang 3Greedy Coloring Lời nói đầu
Lời nói đầu
Trong lĩnh vực lý thuyết đồ thị, việc tô màu đồ thị là một vấn đề quan trọng có ứng dụng rộng rãi trong nhiều lĩnh vực thực tế như lập lịch, tối ưu hóa mạng, và phân tích mạng xã hội Trong bài tiểu luận này, chúng tôi sẽ tập trung vào một trong những
phương pháp tiếp cận phổ biến nhất để giải quyết vấn đề tô màu đồ thị, đó là thuật toán
tham lam tô màu đồ thị ( Greedy coloring)
Thuật toán tham lam là một phương pháp đơn giản và hiệu quả để tô màu đồ thị bằng cách thăm dò từng đỉnh và gán màu cho đỉnh đó sao cho không có hai đỉnh kề nhau có cùng màu Trong phần này, chúng tôi sẽ trình bày cách hoạt động của thuật toán tham lam, bao gồm cách chọn màu cho từng đỉnh và cách áp dụng thuật toán để tô màu cho toàn bộ đồ thị
Ngoài ra, chúng tôi sẽ đi sâu vào phân tích độ phức tạp và hiệu suất của thuật toán tham lam tô màu đồ thị, cũng như các ứng dụng và hạn chế của nó trong thực tế Bằng cách nắm vững kiến thức về thuật toán này, chúng ta sẽ hiểu rõ hơn về cách tối ưu hóa việc tô màu cho đồ thị và áp dụng nó vào các vấn đề thực tế
Cuối cùng, chúng tôi hy vọng rằng bài tiểu luận này sẽ cung cấp cho độc giả cái nhìn tổng quan về thuật toán tham lam tô màu đồ thị cũng như khả năng ứng dụng của nó trong nhiều lĩnh vực khác nhau Do kiến thức còn hạn hẹp, trong quá trình thực hiện khó tránh khỏi những sai xót, mong thầy và các bạn độc giả có thể bỏ qua
Trang 4Greedy Coloring Động lực, lí do thực hiện
I Động lực, lí do thực hiện
Tô màu đồ thị là bài toán quan trọng trong lĩnh vực đồ thị Một số động lực và lí do chính để đi sâu vào nghiên cứu thuật toán kể đến như:
- Hiểu sâu hơn về lí thuyết đồ thị: Khi thực hiện tô màu đồ thị, cần hiểu rõ các khái
niệm cơ bản về đồ thị như đỉnh, cạnh, đồ thị liên thông, đồ thị không định hướng và định hướng, và các loại đồ thị khác Thuật toán tô màu đồ thị sẽ yêu cầu tìm cách gán màu cho mỗi đỉnh sao cho không có hai đỉnh kề nhau nào có cùng màu Điều này đòi hỏi chúng ta phải hiểu cách các đỉnh trong đồ thị tương tác với nhau thông qua các cạnh
- Áp dụng thực tế: Tô màu đồ thị được áp dụng rộng rãi trong thực tế, từ lập lịch công
việc đến tối ưu hóa mạng lưới vận chuyển, hay một số các trò chơi như Sodoku,
Trong lập lịch mỗi công việc có thể được biểu diễn bằng một đỉnh, và các ràng buộc giữa chúng (một công việc phải hoàn thành trước khi công việc khác bắt đầu) được biểu diễn bằng các cạnh Việc tô màu đồ thị sẽ giúp bạn lập lịch công việc một cách hiệu quả Trong mạng lưới vận chuyển, tô màu đồ thị có thể được sử dụng để tối ưu hóa bảng định tuyến Thực hiện tìm các đường dẫn tối ưu sao cho không có hai đường dẫn nào chia sẻ cùng một tài nguyên (ví dụ như băng thông) trong mạng Mỗi màu có thể tương ứng với một tài nguyên và các đường dẫn có thể được gán màu tương ứng với tài nguyên mà chúng sử dụng Bên cạnh việc tối ưu hóa bảng định tuyến, còn áp dụng tô màu đồ thị trong việc tối ưu hóa lưu lượng giao thông trong mạng
- Nền tảng nghiên cứu: Việc nghiên cứu và áp dụng thuật toán tham lam vào bài toán tô
màu đồ thị có thể làm nền tảng cho các nghiên cứu tiếp theo trong lĩnh vực này Có thể tìm hiểu và phát triển thuật toán mới, cải tiến thuật toán hiện có để giải quyết các vấn đề phức tạp hơn, hoặc áp dụng vào các lĩnh vực mới Điều này có thể đóng góp vào sự phát triển của cả lý thuyết và ứng dụng của đồ thị trong khoa học máy tính
- Phát triển kỹ năng lập trình và tư duy thuật toán: Triển khai thuật toán tô màu đồ
thị bằng lập trình sẽ giúp ta cải thiện kỹ năng lập trình của mình Cần phải tối ưu hóa thuật toán để giải quyết vấn đề một cách hiệu quả, điều này yêu cầu chúng ta phải có
tư duy thuật toán và khả năng áp dụng kiến thức lý thuyết vào thực tiễn
Trang 5Greedy Coloring Thuật toán tham lam
II Lý thuyết, nguyên lý hoạt động
2.1 Thuật toán tham lam
2.1.1 Khái niệm
Thuật toán tham lam, còn được gọi là Greedy Algorithm, là một phương pháp giải
quyết bài toán tối ưu bằng cách lựa chọn các lựa chọn tốt nhất tại mỗi bước để đạt được tối ưu toàn cục
Giải thuật tham lam gồm năm thành phần:
- Một tập hợp các ứng viên, để từ đó tạo ra lời giải
- Một hàm lựa chọn, để theo đó lựa chọ ứng viên tốt nhất để bổ sung và lời giải
- 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
- 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
- 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.
2.1.2 Tính chất của thuật toán và áp dụng thuật toán
Tính chất: Lựa chọn giải thuật 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 các lựa chọn 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ề bài toán con nhỏ hơn Đấy là sự khác biệt giữa thuật toán này và giải thuật quy hoạch động Giải thuật quy hoạch động duyệt hết và luôn đảm bảo tìm thấy lời giải Tại mỗi bước của thuật toán, quy hoạch động đưa
ra quyết định dựa trên các quyết định của bước trước, và có thể xét lại đường đi của bước trước hướng tới lời giải Giải thuật tham lam quyết định sớm và thay đổi đường đi 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
Áp dụng: Đối với nhiều bài toán giải thuật tham lam đôi khi không cho ra lời giải tối
ưu toàn cục, vì chúng thường không chạy trên tất cả các trường hơp Chúng có thể bám chặt lấy một số lựa chọn nhất định một cách quá sớm, điều này dẫn đến hậu quả là trong giai đoạn sau, các thuật toán này không thể tìm ra các lời giải toàn cục tốt nhất Ví dụ, đối với bài toán tô màu đồ thị và tất cả các bài toán NP-đầy đủ khác, không một thuật
Trang 6Greedy Coloring Tô màu đồ thị trong lí thuyết đồ thị
toán tham lam đã được biết nào đảm bảo tìm thấy các lời giải tối ưu. Tuy nhiên giải thuật này vẫn hữu ích vì chúng dễ thiết kế và cho ra các ước lượng tốt về lời giải tối ưu Nếu có thể chứng minh rằng một thuật toán tham lam cho ra kết quả tối ưu toàn cục cho một lớp bài toán nào đó, thì thuật toán thường sẽ trở thành phương pháp được chọn lựa, 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
2.2 Tô màu đồ thị trong lí thuyết đồ thị
2.2.1 Một số khái niệm về tô màu đồ thị
Trong lí thuyết đồ thị, tô màu đồ thị (graph coloring) là một trường hợp đặc biệt của
gán nhãn đồ thị, trong đó mỗi đỉnh, cạnh hay miền của đồ thị có thể được gán bởi một màu hay một tập hợp các màu
Có ba loại tô màu đồ thị chính:
- Tô màu đỉnh: Mỗi đỉnh của đồ thị được gán một màu sao cho không có hai đỉnh liền kề
trùng màu
- Tô màu cạnh: Mỗi cạnh của đồ thị được gán một màu sao cho không có hai cạnh liền kề
trùng màu
- Tô màu miền: Mỗi miền của đồ thị phẳng được gán một màu sao cho không có hai miền
có chung đường biên cùng màu
Số màu cạnh của một đồ thị là số màu ít nhất dùng để tô các cạnh
Sắc tố của một đồ thị là số màu ít nhất để tô các đỉnh
Hình 2.1: Đồ thị có sắc tố bằng 3
Định lý: Sắc tố của một đồ thị sẽ không bao giờ vượt quá số đỉnh của nó.
Trang 7Greedy Coloring Áp dụng thuật toán tham lam trong tô màu đồ thị
2.2.2 Ứng dụng của tô màu đồ thị
Thực hiện tô màu bản đồ:
Trên các bản đồ, các miền khác nhau (miền ở đây được hiểu là các quốc gia trên bản đồ thế giới hay các tỉnh trong một bản đồ hành chính quốc gia) được tô màu sao cho 2 miền
có chung biên giới không trùng màu nhau Đối với bản đồ có nhiều miền, nếu ta dùng một số lượng lớn màu thì sẽ rất khó phân biệt các miền có màu gần giống nhau, vì thế người ta chỉ dùng một số lượng màu nhất định để tô màu bản đồ Một bài toán được đặt
ra là: có thể dùng ít nhất bao nhiêu màu để tô màu một bản đồ sao cho các miền kề nhau không cùng một màu
Bài toán này dẫn đến định lý bốn màu nổi tiếng và định lý năm màu Các dạng bài toán tô màu bản đồ có thể áp dụng Thuật toán tô màu Greedy để tìm ra số màu ít nhất để tô cho các miền trên bản đồ
2.3 Áp dụng thuật toán tham lam trong tô màu đồ thị
2.3.1 Khái niệm
Trong lý thuyết đồ thị, thuật toán tham lam tô màu đồ thị (greedy coloring) là một trong những phương pháp tô màu đồ thị áp dụng giải thuật tham lam Trong tô màu đồ thị, thuật toán này sẽ lựa chọn từng đỉnh một cách tham lam (tức là lựa chọn màu sẽ làm giảm khả năng xung đột màu với các đỉnh kề)
2.3.2 Tư tưởng thuật toán
Xét đồ thị G(V) với tập hợp các đỉnh V = [v1 , v2, v3, …, vn] và tập các đỉnh kề Avj Sử dụng giải thuật tham lam tô màu các đỉnh của đồ thị
Đầu tiên ta xét các đỉnh theo thứ tự và và gán cho mỗi đỉnh một màu riêng theo nguyên tắc: các đỉnh không kề với đỉnh đang xét (không có cạnh nối trực tiếp) thì được phép tô cùng một màu, cấm tô màu đó cho các đỉnh có cạnh kề với đỉnh đang xét Thuật toán lặp lại cho đến khi tất cả các đỉnh được tô màu
2.3.3 Nguyên lý hoạt động
Thuật toán hoạt động theo nguyên lý cơ bản sau:
Sắp xếp các đỉnh: Bắt đầu bằng cách sắp xếp các đỉnh của đồ thị theo một thứ tự nào đó
Trang 8Greedy Coloring Mã giả
Duyệt từng đỉnh: Duyệt qua từng đỉnh theo thứ tự đã sắp xếp
Chọn màu thích hợp: Với mỗi đỉnh, chọn màu nhỏ nhất mà không trùng với màu của bất
kỳ đỉnh kề nào đã được tô
Hình 2.2: Tuần tự các bước tô màu các đỉnh của đồ thị
III Mã giả
Ý tưởng chính của thuật toán sẽ được minh họa trong đoạn mã giả dưới đây:
Trang 9Greedy Coloring Cài đặt thuật toán
IV Cài đặt thuật toán, phân tích và đánh giá
4.1 Cài đặt thuật toán
Các bước cài đặt thuật toán:
Việc đầu tiên mà ta cần làm là xây dựng một lớp Graph đại diện cho một đồ thị vô hướng, có thể được biểu diễn dưới dạng danh sách kề hoặc ma trận kề với thuộc tính V là
số đỉnh trong đồ thị Tiếp theo cần xây dựng một mảng động các danh sách liên kết, mỗi phần tử của mảng là một danh sách liên kết, đại diện cho các đỉnh kề của mỗi đỉnh
Thực hiện tô màu đồ thị bằng giải thuật tham lam:
- Tô màu đỉnh đầu tiên bằng màu đầu tiên.
- Thực hiện theo các đỉnh V – 1 còn lại:
Xem xét đỉnh hiện được chọn và tô màu nó bằng màu được đánh số thấp nhất chưa được sử dụng trên bất kì đỉnh nào đã được tô màu trước đó liền kề với nó Nếu tất cả các màu đã sử dụng trước đó xuất hiện trên các đỉnh liền kề với đỉnh đang xét v thì hãy gán một màu mới cho nó
Sau khi đã thực hiện tô màu cho tất cả các đỉnh thuộc đồ thị, thực hiện in ra kết quả
Khẳng định: Không bao giờ sử dụng nhiều hơn d + 1 màu trong đó d là bậc tối đa của
một đỉnh trong đồ thị
Dưới đây là chương trình cài đặt thuật toán:
Trang 10Greedy Coloring Cài đặt thuật toán
Input (Đầu vào được cho dưới dạng danh sách kề)
#1: #2:
Trang 11
Greedy Coloring Cài đặt thuật toán
Output (Một số đại diện cho một màu)
#1: #2:
Hình vẽ minh họa:
Trang 12Greedy Coloring Cài đặt thuật toán
Hình 4.1: Kết quả minh họa
Độ phức tạp về thời gian: Trong trường hợp xấu nhất, O(V ^ 2 + E)
Trong đó: V, E lần lượt là số đỉnh và cạnh của đồ thị
Trang 13Greedy Coloring Phân tích và đánh giá
4.2 Phân tích và đánh giá
Đây là bài toán NP – Complete vì vậy không có thuật toán nào hiệu quả để tô màu đồ thị với số lượng màu là tối thiểu
- Thuật toán tham lam không đảm bảo sử dụng số lượng màu tối thiểu Ngoài ra, số
lượng màu đã được sử dụng đôi khi phụ thuộc vào thứ tự xử lý các đỉnh Ví dụ, hãy xem xét hai biểu đồ ở trên (Hình 4.1) Lưu ý rằng trong đồ thị bên phải, đỉnh 3 và 4 được hoán đổi cho nhau Nếu xét các đỉnh 0, 1, 2, 3, 4 ở đồ thị bên trái, chúng ta có thể tô màu
đồ thị bằng 3 màu Nhưng nếu xét các đỉnh 0, 1, 2, 3, 4 ở đồ thị bên phải thì chúng ta cần
4 màu Do vậy kết quả của thuật toán tham lam có thể phụ thuộc vào thứ tự các đỉnh được duyệt qua Một thứ tự không tốt có thể dẫn đến kết quả không tối ưu
- Thuật toán tham lam đảm bảo giới hạn trên về số lượng màu Với d là mức độ tối đa
trong biểu đồ đã cho Vì d là bậc lớn nhất nên một đỉnh không thể gắn nhiều hơn d đỉnh Khi chúng ta tô màu một đỉnh, nhiều nhất d màu có thể đã được sử dụng bởi các màu liền kề của nó Để tô màu cho đỉnh này, chúng ta cần chọn màu được đánh số nhỏ nhất
mà các đỉnh liền kề không sử dụng. Nếu các màu được đánh số như 1, 2, … thì giá trị của số nhỏ nhất đó phải nằm trong khoảng từ 1 đến d+1 (lưu ý rằng các số d đã được chọn bởi các đỉnh liền kề)
Tô màu đồ thị bằng giải thuật tham lam cho ra kết quả khá nhanh, thuật toán dễ thiết
kế, có khả năng hoạt động tốt trên các đồ thị lớn mà không gây ra quá nhiều độ trễ, nhưng không phải lúc nào cũng đúng Như đã trình bày trong phần nội dung thứ hai, bản chất thuật toán tham lam đôi khi không cho ra lời giải tối ưu toàn cục, vì chúng thường không chạy trên tất cả các trường hợp.Chúng có thể bám chặt lấy một số lựa chọn nhất định một cách quá sớm, điều này dẫn đến hậu quả là trong giai đoạn sau, các thuật toán này không thể tìm ra các lời giải toàn cục tốt nhất Ngoài ra, thuật toán có thể
sẽ không hiệu quả với một số loại đồ thị như đồ thị có chu trình lớn hoặc đồ thị không liên thông
Trang 14Greedy Coloring Tài liệu tham khảo
V Tài liệu tham khảo
1 Kučera, Luděk (1991), “The greedy coloring is a bad probabilistic algorithm”, Journal
of Algorithms
2 Irani, Sandy (1994), “Coloring inductive graphs on-line”, Algorithmica.
3 Giải thuật và lập trình, Lê Minh Hoàng, Đại học sư phạm Hà Nội, 2002
4 Wikipedia
5 Geeksforgeeks