Jednym podejściem do rozwiązania tego problemu byłoby zastosowanie programowania liniowego liczb całkowitych (ILP). Zajmijmy się wersją decyzyjną problemu: biorąc pod uwagę , czy istnieje sposób na zawarcie wierzchołków tego samego koloru, aby uzyskać DAG o wielkości ≤ k ?k≤k
Można to wyrazić jako instancję ILP przy użyciu standardowych technik. Kolor oryginalnego wykresu jest podany dla każdego wierzchołka. Sugeruję, aby oznaczyć każdy wierzchołek etykietą w ; wszystkie wierzchołki z tą samą etykietą i tym samym kolorem zostaną skurczone. Problemem decyzyjnym staje się zatem: czy istnieje oznakowanie, które powoduje, że skurczenie wszystkich wierzchołków tego samego koloru w ten sam sposób daje DAG?{1,2,…,k}
Aby wyrazić to jako całkowity program liniowy, wprowadź zmienną całkowitą dla każdego wierzchołka v , aby przedstawić etykietę na wierzchołku v . Dodaj nierówność 1 ≤ ℓ v ≤ k .ℓvvv1≤ℓv≤k
Następnym krokiem jest wyrażenie wymogu, że zakontraktowany wykres musi być DAG. Należy zauważyć, że jeśli jest znakowanie postaci wymienionych powyżej, bez utraty ogólności istnieje taki oznakowania, gdzie etykiety indukowania topologiczne sortuje umownej wykresie (czyli jeżeli poprzedza W umownej wykresu, a V „S etykiety jest mniejszy, niż w „s etykiecie). Tak więc, dla każdej krawędzi v → wagowo w oryginalnym wykresie dodamy ograniczenie, że albo v i w mają taką samą etykietę i tego samego koloru, albo v „s etykieta jest mniejsza niż w ” s etykietą. W szczególności dla każdej krawędzi vvwvwv→wvwvw w początkowym wykresu gdzie v , w mają ten sam kolor, dodać nierówność £ -l v ≤ £ -l wag . Dla każdej krawędzi v → w, gdzie v , w mają różne kolory, dodaj nierówność ℓ v < ℓ w .v → wv , wℓv≤ ℓwv → wv , wℓv< ℓw
Sprawdź teraz, czy istnieje jakieś realne rozwiązanie tego programu liczb całkowitych. Możliwe będzie rozwiązanie, jeśli i tylko wtedy, gdy etykietowanie będzie miało pożądaną formę (tj. Skurczenie wszystkich wierzchołków tego samego koloru o tym samym kolorze daje DAG). Innymi słowy, możliwe będzie rozwiązanie tylko i wyłącznie wtedy, gdy istnieje sposób na zawężenie oryginalnego wykresu do DAG o wielkości . Możemy użyć dowolnego liczbowego solvera do programowania liniowego; jeśli solver ILP daje nam odpowiedź, mamy odpowiedź na pierwotny problem decyzyjny.≤ k
Oczywiście nie można tego zagwarantować w czasie wielomianowym. Nie ma gwarancji. Jednak solwery ILP są całkiem niezłe. Spodziewałbym się, że dla rozsądnego wykresu masz spore szanse, że solver ILP może rozwiązać ten problem w rozsądnym czasie.
Możliwe jest również zakodowanie tego jako instancji SAT i użycie solvera SAT. Nie wiem, czy to byłoby bardziej skuteczne. Prawdopodobnie łatwiej jest myśleć o wersji ILP.
(Mam nadzieję, że to prawda. Nie sprawdziłem dokładnie każdego szczegółu, więc proszę dokładnie sprawdzić moje rozumowanie! Mam nadzieję, że gdzieś nie poszedłem źle).
Aktualizacja (10/21): Wygląda na to, że ILP tego formularza można rozwiązać w czasie liniowym, przetwarzając DAG w topologicznie posortowanej kolejności i śledząc dolną granicę etykiety dla każdego wierzchołka. To mnie podejrzewa o moje rozwiązanie: czy popełniłem gdzieś błąd?