Biorąc pod uwagę określoną rodzinę podzbiorów uniwersum . Niech a my chcemy odpowiedzieć to .
Szukam struktury danych, która pozwoli mi szybko odpowiedzieć na to pytanie. Moja aplikacja pochodzi z teorii grafów, w której chcę sprawdzić, czy usunięcie wierzchołka i jego sąsiedztwa pozostawia izolowane wierzchołki, a dla każdej listy wierzchołków pozostawia wszystkie izolowane wierzchołki.
Chcę utworzyć kompletny zestaw pojęć lub ostatecznie tabelę przechowującą prawdziwe fałszywe powiedzenie, które zestawy są wzajemnie podzbiórami.
Niech,i, zakładamy,
Możemy wygenerować macierz (dwuczęściowy) w czasie a następnie stworzyć tabelę wszystkich porównań w czasie dla każdego zestawu , pętli wszystkich składników innych pakietów i oznaczyć jako zestaw nie podzbiór wtedy, gdy element nie jest w . Całkowity czas .
Czy możemy zrobić coś szybciej? W szczególności, czy czas możliwy, czy nie?
Znalazłem kilka powiązanych artykułów:
Prosty algorytm subkwadratowy do obliczania podzbioru częściowej kolejności (1995), który daje algorytm .
Podzbiór częściowej kolejności: Obliczenia i kombinatoryka nieznacznie poprawia powyższe, ale również twierdzi, że powyższy artykuł rozwiązuje problem w czasie gdzie jest maksymalną liczbą zbiorów dzielących wspólny element, ale nie mogłem zrozumieć tego wyniku.
W artykule Pomiędzy i autorzy pokazują, jak na wykresie znaleźć połączone komponenty po usunięciu zamkniętego sąsiedztwa wierzchołka za pomocą mnożenia macierzy. Można tego użyć do obliczenia zestawu punktów włączenia przez znalezienie wszystkich składników, które są singletonami, w środowisku wykonawczym .
Powiązana jest także ta dyskusja na forum: Jaki jest najszybszy sposób sprawdzenia włączenia zestawu? co implikuje dolną granicę .
źródło
Odpowiedzi:
Jeśli losowość jest w granicach, jednym z grubszych pomysłów byłoby wygenerowanie szeregu funkcji „losowej sygnatury monotonicznej” i wykorzystanie ich do przybliżenia relacji podzbioru (filtry la Blooma). Niestety nie wiem, jak zrobić z tego praktyczny algorytm, ale oto kilka szacunków, które nie od razu dowodzą, że pomysł jest niemożliwy. Jest to bardzo dalekie od użytecznego rozwiązania, ale napiszę to na wypadek, gdyby to pomogło.
Załóżmy dla uproszczenia, że wszystkie zestawy są prawie tego samego rozmiaru, powiedzmy , a to . Możemy założyć , w przeciwnym razie skończymy. Zdefiniuj Pamiętaj, że .s = o ( u ) 1 ≪ s q|S|=s±O(1) s=o(u) 1≪s p≫1
Oto bardzo niepraktyczna część. Losowo wybierz podzestawy z zamiennikiem, każdy o rozmiarze , i zdefiniuj funkcję przez iff dla niektórych . Przy stałej i zmieniających się losowo, mamy Ponieważ jest monotoniczny, implikacjaA 1 , … , A p ⊂ U q f : 2 U → { 0 , 1 } f ( S ) = 1 A i ⊂ S i S A i , f Pr ( f ( S ) = 0 )p A1,…,Ap⊂U q f:2U→{0,1} f(S)=1 Ai⊂S i S Ai,f f(S)S⊂Tf(S)≤f(T)T⊄St∈T-SfT⊄S Pr ( f ( S ) = 0 < 1 = f ( T ) )
Nawet jeśli powyższe obliczenia są prawidłowe, nie mam pojęcia, jak szybko wygenerować monotoniczne funkcje podpisu o pożądanych cechach. Jest również prawdopodobne, że ta technika nie rozciąga się na znacząco różne rozmiary zestawu.
źródło