Một cách tiếp cận để giải quyết vấn đề này là sử dụng lập trình tuyến tính số nguyên (ILP). Chúng ta hãy giải quyết phiên bản quyết định của vấn đề: cho , có cách nào để hợp đồng các đỉnh cùng màu để có DAG có kích thước không?≤ kk≤ k
Điều này có thể được thể hiện như là một ví dụ ILP bằng cách sử dụng các kỹ thuật tiêu chuẩn. Chúng tôi đã đưa ra màu sắc của từng đỉnh trong biểu đồ ban đầu. Tôi đề nghị chúng ta nên gắn nhãn cho mỗi đỉnh bằng một nhãn trong ; tất cả các đỉnh có cùng nhãn và cùng màu sẽ được ký hợp đồng. Vì vậy, vấn đề quyết định trở thành: có tồn tại một nhãn, sao cho việc ký kết tất cả các đỉnh cùng nhãn có cùng màu tạo ra một DAG không?{ 1 , 2 , ... , k }
Để biểu thị điều này dưới dạng một chương trình tuyến tính số nguyên, hãy giới thiệu một biến số nguyên cho mỗi đỉnh , để thể hiện nhãn trên đỉnh . Thêm bất đẳng thức . v v 1 ≤ ℓ v ≤ kℓvvv1≤ℓv≤k
Bước tiếp theo là thể hiện yêu cầu rằng đồ thị được ký hợp đồng phải là DAG. Lưu ý rằng nếu có một nhãn của biểu mẫu được liệt kê ở trên, mà không mất tính tổng quát thì sẽ tồn tại một nhãn như vậy trong đó các nhãn tạo ra một loại cấu trúc liên kết trên biểu đồ được ký hợp đồng (nghĩa là, nếu đứng trước trong biểu đồ được ký hợp đồng, thì nhãn của nhỏ hơn nhãn của ). Vì vậy, đối với mỗi cạnh trong biểu đồ ban đầu, chúng ta sẽ thêm ràng buộc rằng và có cùng nhãn và cùng màu, hoặc nhãn khác của nhỏ hơn nhãn của . Cụ thể, với mỗi cạnhw v w v → w v w v w v → w v , w ℓ v ≤ ℓ w v → w v , w ℓ v < ℓ wvwvwv→wvwvwv→wtrong biểu đồ ban đầu trong đó có cùng màu, hãy thêm bất đẳng thức . Đối với mỗi cạnh trong đó có các màu khác nhau, hãy thêm bất đẳng thức .v,wℓv≤ℓwv→wv,wℓv<ℓw
Bây giờ hãy xem nếu có bất kỳ giải pháp khả thi cho chương trình tuyến tính số nguyên này. Sẽ có một giải pháp khả thi nếu và chỉ khi việc ghi nhãn có dạng mong muốn (nghĩa là ký hợp đồng với tất cả các đỉnh cùng nhãn có cùng màu mang lại DAG). Nói cách khác, sẽ có một giải pháp khả thi nếu và chỉ khi có cách hợp đồng biểu đồ gốc với DAG có kích thước . Chúng ta có thể sử dụng bất kỳ bộ giải lập trình tuyến tính số nguyên; nếu người giải ILP cho chúng tôi câu trả lời, chúng tôi có câu trả lời cho vấn đề quyết định ban đầu.≤k
Tất nhiên, điều này không được đảm bảo để hoàn thành trong thời gian đa thức. Không có gì đảm bảo. Tuy nhiên, người giải quyết ILP đã nhận được khá tốt. Tôi hy vọng rằng, đối với một biểu đồ có kích thước hợp lý, bạn đã có cơ hội tốt rằng người giải ILP có thể giải quyết vấn đề này trong một khoảng thời gian hợp lý.
Cũng có thể mã hóa đây là một ví dụ SAT và sử dụng bộ giải SAT. Tôi không biết liệu điều đó sẽ hiệu quả hơn. Phiên bản ILP có lẽ dễ nghĩ hơn, mặc dù.
(Tôi hy vọng điều này đúng. Tôi đã không kiểm tra từng chi tiết một cách cẩn thận, vì vậy vui lòng kiểm tra lại lý do của tôi! Tôi hy vọng tôi đã không đi đâu đó.)
Cập nhật (21/10): Dường như ILP của hình thức này có thể được giải quyết theo thời gian tuyến tính, bằng cách xử lý DAG theo thứ tự sắp xếp theo cấu trúc liên kết và theo dõi giới hạn dưới trên nhãn cho mỗi đỉnh. Điều này khiến tôi nghi ngờ về giải pháp của mình: tôi đã phạm sai lầm ở đâu đó chưa?