Thành thật mà nói, tôi không thể tin rằng điều này chưa được hỏi, nhưng đây là
Lý lịch
Với một mặt phẳng vô hướng đơn giản (đồ thị có thể được vẽ trong mặt phẳng không có giao điểm), một định lý đã được chứng minh rằng đồ thị có 4 màu, một thuật ngữ chúng ta sẽ khám phá trong một chút. Tuy nhiên, việc vẽ đồ thị 5 màu dễ dàng hơn nhiều, đó là những gì chúng ta sẽ tập trung vào thử thách ngày hôm nay.
Màu k hợp lệ của biểu đồ là việc gán "màu" cho các nút của biểu đồ với các thuộc tính sau
- Nếu hai nút được kết nối bởi một cạnh, các nút được tô màu với các màu khác nhau.
- Trên biểu đồ, có tối đa 5 màu.
Với điều này, tôi sẽ trình bày cho bạn một thuật toán khá cơ bản để 5 màu cho bất kỳ đồ thị phẳng không mong muốn đơn giản nào. Thuật toán này yêu cầu các định nghĩa sau
Khả năng tiếp cận : Nếu nút 1 có thể truy cập được từ nút 2, điều đó có nghĩa là có một chuỗi các nút, mỗi nút được kết nối với cạnh tiếp theo, sao cho nút đầu tiên là nút 2 và nút cuối cùng là nút 1. Lưu ý rằng vì đồ thị vô hướng là đối xứng, nếu nút 1 có thể truy cập được từ nút 2, thì nút 2 có thể truy cập được từ nút 1.
Đồ thị con : Một đồ thị con của một đồ thị của một tập hợp các nút N là một đồ thị nơi các nút của đồ thị con là tất cả trong N, và một cạnh từ biểu đồ ban đầu là trong đồ thị con khi và chỉ khi cả hai nút được nối với nhau bằng cạnh đang ở N.
Đặt Color (N) là một hàm để tô màu đồ thị phẳng với N nút có 5 màu. Chúng tôi xác định chức năng dưới đây
- Tìm nút có số lượng nút ít nhất được kết nối với nó. Nút này sẽ có tối đa 5 nút được kết nối với nó.
- Loại bỏ nút này khỏi biểu đồ.
- Gọi Màu (N-1) trên biểu đồ mới này để tô màu.
- Thêm nút bị xóa trở lại biểu đồ.
- Nếu có thể, tô màu cho nút được thêm một màu mà không có nút nào được kết nối của nó có.
- Nếu không thể, thì tất cả 5 nút lân cận cho nút được thêm có 5 màu khác nhau, vì vậy chúng ta phải thử quy trình sau.
- Đánh số các nút xung quanh nút được thêm n1 ... n5
- Hãy xem xét sơ đồ con của tất cả các nút trong biểu đồ gốc có màu giống như n1 hoặc n3.
- Nếu trong sơ đồ con này, n3 không thể truy cập được từ n1, trong tập hợp các nút có thể truy cập từ n1 (bao gồm n1), thay thế tất cả các lần xuất hiện của màu n1 bằng n3 và ngược lại. Bây giờ tô màu màu gốc của nút n1.
- Nếu n3 có thể truy cập từ n1 trong biểu đồ mới này, hãy thực hiện quy trình từ bước 9 trên các nút n2 và n4, thay vì n1 và n3.
Thử thách
Đưa ra một đầu vào của một edgelist (đại diện cho một biểu đồ), tô màu cho biểu đồ, bằng cách gán cho mỗi nút một giá trị.
Đầu vào : Một danh sách các cạnh trong biểu đồ (nghĩa là [('a','b'),('b','c')...]
)
Lưu ý rằng edgelist đầu vào sẽ sao cho nếu (a, b) nằm trong danh sách, (b, a) KHÔNG có trong danh sách.
Đầu ra : Một đối tượng chứa các cặp giá trị, trong đó phần tử đầu tiên của mỗi cặp là một nút và màu thứ hai của nó, nghĩa là, [('a',1),('b',2)...]
hoặc{'a':1,'b':2,...}
Bạn có thể sử dụng bất cứ thứ gì để thể hiện màu sắc, từ số, đến ký tự, cho bất cứ thứ gì khác.
Đầu vào và đầu ra khá linh hoạt, miễn là nó khá rõ ràng đầu vào và đầu ra là gì.
Quy tắc
- Đây là một thử thách chơi gôn
- Bạn không phải sử dụng thuật toán mà tôi đã mô tả ở trên. Nó chỉ đơn giản là có để tham khảo.
- Đối với bất kỳ biểu đồ, thường có nhiều phương pháp tô màu hợp lệ. Miễn là màu mà thuật toán của bạn tạo ra là hợp lệ, điều đó có thể chấp nhận được.
- Hãy nhớ rằng đồ thị phải có 5 màu.
Các trường hợp thử nghiệm
Sử dụng mã sau đây để kiểm tra tính hợp lệ của kết quả tô màu của bạn. Vì có nhiều màu biểu đồ hợp lệ trên mỗi biểu đồ, thuật toán này chỉ đơn giản là kiểm tra tính hợp lệ của màu. Xem chuỗi doc để xem cách sử dụng mã.
Một số trường hợp thử nghiệm ngẫu nhiên (và khá ngớ ngẩn) :
Trường hợp thử nghiệm 2: Đồ thị diều Krackhardt
[(0, 1), (0, 2), (0, 3), (0, 5), (1, 3), (1, 4), (1, 6), (2, 3), (2, 5), (3, 4), (3, 5), (3, 6), (4, 6), (5, 6), (5, 7), (6, 7), (7, 8), (8, 9)]
Một đầu ra hợp lệ:
{0: 4, 1: 3, 2: 3, 3: 2, 4: 4, 5: 1, 6: 0, 7: 4, 8: 3, 9: 4}
Lưu ý : Những trường hợp thử nghiệm này quá nhỏ để kiểm tra hành vi nhiều sắc thái của thuật toán tô màu, do đó, việc xây dựng biểu đồ của riêng bạn có lẽ là một thử nghiệm tốt về tính hợp lệ của công việc của bạn.
Lưu ý 2 : Tôi sẽ thêm một đoạn mã khác sẽ sớm vẽ biểu đồ giải pháp tô màu của bạn.
Lưu ý 3 : Tôi đã không thấy các thuật toán tô màu ngẫu nhiên đã được trình bày, đó là điều tuyệt vời về PPCG! Tuy nhiên, nếu bất cứ ai cũng có thể chơi một thuật toán xác định hơn, điều đó cũng sẽ rất tuyệt.
5
đến 4
, và gửi lại chúng.