Oto problem. Biorąc pod uwagę , gdzie każdy T i ⊆ { 1 , … , n } . Czy istnieje podzbiór S ⊆ { 1 , … , n } o rozmiarze co najwyżej k taki, że S ∩ T i ≠ ∅ dla wszystkich ja ? Próbuję zredukować ten problem do SAT. Moim pomysłem na rozwiązanie byłoby posiadanie zmiennej x idla każdego z 1 do . Dla każdego T i utwórz klauzulę ( x i 1 ∨ ⋯ ∨ x i k ), jeśli T i = { i 1 , … , i k } . Następnie i wszystkie te klauzule razem. Ale to wyraźnie nie jest kompletne rozwiązanie, ponieważ nie reprezentuje ograniczenia, które S musi mieć co najwyżej k elementów. Wiem, że muszę tworzyć więcej zmiennych, ale po prostu nie jestem pewien, jak to zrobić. Mam więc dwa pytania:
- Czy mój pomysł na rozwiązanie jest właściwy?
- Jak należy utworzyć nowe zmienne, aby można je było wykorzystać do przedstawienia ograniczenia liczności ?
complexity-theory
reductions
np-hard
Aden Dong
źródło
źródło
Odpowiedzi:
Wygląda na to, że próbujesz obliczyć przekrój poprzeczny wielkości . Oznacza to, że { T 1 , … , T m } jest twoim hipergrrafem, a S jest twoim poprzecznym. Tłumaczenie standardowe polega na wyrażeniu istniejących klauzul, a następnie przetłumaczeniu ograniczenia długości na ograniczenie liczności.k {T1,…,Tm} S
Jeśli faktycznie jesteś zainteresowany rozwiązaniem takich problemów, być może lepiej sformułować je jako problemy pseudo-boolowskie (zobacz artykuł wiki na temat problemów pseudo-boolean ) i użyć solverów pseudo-boolean (patrz konkurencja pseudo-boolean ). W ten sposób ograniczenia liczności są tylko ograniczeniami pseudo-boolowskimi i są częścią języka - miejmy nadzieję, że solver pseudo-boolowski obsługuje je bezpośrednio, a zatem bardziej wydajnie.
źródło
Zakładam, że szukasz wyraźnej redukcji, ale jeśli nie, zawsze możesz po prostu wrócić do twierdzenia Cooka-Levina .
źródło