Biorąc pod uwagę zestaw zestawów, znajdź najmniejsze zestawy zawierające co najmniej jeden element z każdego zestawu

15

Biorąc pod uwagę zestaw zestawów, chciałbym znaleźć zestaw takie, że każdy zbiór w zawiera co najmniej jeden element . Chciałbym również, aby zawierał jak najmniej elementów, jednocześnie spełniając to kryterium, chociaż może istnieć więcej niż jeden najmniejszy z tą właściwością (rozwiązanie niekoniecznie jest unikalne).S.M.S.S.M.M.M.

Jako konkretny przykład, załóżmy, że zestaw jest zbiorem flag narodowych, a dla każdej flagi w elementami są kolory użyte w fladze tego kraju. Stany Zjednoczone miałyby a Maroko miałby . Następnie będzie zestaw kolorów z własności, że każdy używa flag narodowych co najmniej jeden z kolorów . ( Olimpijskie kolory: niebieski, czarny, czerwony, zielony, żółty i biały są przykładem takiego , a przynajmniej były w 1920 r.)S.S.S.S.={rmire,whjatmi,blumi}S.={rmire,solrmimin}M.M.M.

Czy istnieje ogólna nazwa tego problemu? Czy istnieje zaakceptowany algorytm „najlepszego” wyszukiwania zestawu ? (Bardziej interesuje mnie samo rozwiązanie niż optymalizacja procesu pod kątem złożoności obliczeniowej).M.

bdesham
źródło
2
Może szukasz problemu z ustawioną ochroną ?
Juho,
@Juho Niezupełnie. W moim przykładzie problem z zestawem okładek polegałby na znalezieniu takiego zestawu flag, że połączenie tych flag zawiera wszystkie kolory użyte na wszystkich flagach. Z drugiej strony szukam czegoś, co wypluje tylko listę kolorów, a nie listę flag i nie potrzebuję zestawu aby zawierał każdy możliwy kolor. Zajmę się tym obszarem na Wikipedii, ale myślę, że masz mnie na dobrej drodze. Dzięki! M.
bdesham

Odpowiedzi:

13

Problemem jest dobrze znany zestaw uderzeń NP-zupełny . Jest ściśle związany z Set-Cover . Dowód kompletności NP można znaleźć w klasycznej książce Garey and Johnson .

Jeśli chcesz to przybliżyć, możesz najpierw przetłumaczyć swoją instancję na Set-Cover, a następnie zastosować algorytm aproksymacji dla Set-Cover. Jednak Set-Cover nie może być aproksymowany stałym współczynnikiem czasu wielomianowego, chyba że P = NP, jak pokazują Lund i Yannakakis .

Jeśli jesteś zainteresowany dokładnymi rozwiązaniami, a twoje dane zachowują się ładnie, polecam użycie stałego parametru parametrycznego . Czas pracy jest tu wyrażony nie tylko jako długość wejściowa ale również jako dodatkowy parametr . Jeśli czas działania wynosi , algorytm nazywamy algorytmem FPT. Tutaj jest funkcją rosnącą. Więc jeśli jest stałe, mamy algorytm czasu policy. Pierwszy rozdział z książki Flum i Grohe , wyjaśnia się FPT algorytm za uderzenie zestaw (dokładniej nankO(fa(k)nO(1))fa(k)kpzestaw uderzeń kartą). Algorytm jest łatwy do wdrożenia i wykorzystuje metodę ograniczonych drzew wyszukiwania. Nadal potrzebuje dużo miejsca, aby wyjaśnić tutaj, w zasadzie rozkładasz niezbędne (?) Poszukiwania siły, na małe kawałki (gdy jest małe).k

A.Schulz
źródło
Dzięki. Czy możesz podać źródło informacji o rzeczywistych implementacjach? Tj. Jak mam przełożyć mój problem na problem z set-cover, a następnie jak to rozwiązać?
bdesham
1
bdesham, pomyśl o każdym elemencie jako zestawie zbiorów, do którego on należy. uruchom zestaw cover na wejściu elements-as-sets. przeczytaj także link do strony wiki, do której prowadzi link.
Sasho Nikolov
Czy jesteś zainteresowany przybliżonym rozwiązaniem, czy chcesz mieć dokładne rozwiązanie?
A.Schulz
Chciałbym dokładne rozwiązanie. Zestawy danych, z którymi pracuję, są na tyle małe, że nie sądzę, że powinien to stanowić problem.
bdesham
1
@Keyser: Masz rację. Jednak powszechną praktyką jest powiązanie problemu decyzyjnego z odpowiednim problemem optymalizacji, ponieważ są one ściśle powiązane z problemami NP-zupełnymi.
A.Schulz,
2

Pomysł, który może pomóc: jeśli przecięcie wszystkich zbiorów w nie jest puste, możesz wybrać dowolny element na przecięciu i ustawić . Jeśli przecięcie jest puste, znajdź element (kolor) którego występowanie w zestawach jest maksymalne, i zastąp wszystkie zbiory, w których występuje, przez singleton . Rób to dalej, aż liczba wystąpień każdego elementu będzie równa a następnie ustaw na sumę pozostałych zbiorów. Na przykład, jeśli jest zbiorem moc pewnego zbioru czym . Mogę się jednak mylić.S.sM.={s}do{do}1M.S.ZAM.=ZA

saadtaame
źródło
2

Spójrz na „Teorię diagnozy od pierwszych zasad” Raya Reitera, w której podaje algorytm obliczania zestawów uderzeń, a także dodatkową notatkę „Korekta ...” .

Algorytm jest ogólnie znany jako algorytm „uderzania w drzewo setów”, nie powinno być zbyt trudno znaleźć implementację. Wspomniałeś, że nie interesujesz się zbytnio środowiskiem uruchomieniowym, ale optymalizacje, takie jak wcześniejsze zakończenie gałęzi itp., Są bardzo ważne dla implementacji, a także interesujące :)

Papercutexit
źródło
2
Czy możesz streścić algorytm, aby Twoja odpowiedź była bardziej samodzielna? Linki mogą się zepsuć.
Juho
0

Praktycznie rzecz biorąc, jednym z lepszych sposobów (z pewnością jednym z najłatwiejszych) rozwiązania instancji Set Cover / Hitting Set jest mieszane programowanie liczb całkowitych. Wymaga to przekazania formuły programowania liczb całkowitych do wybranego przez ciebie solwera .

Barney
źródło