Niech i będą podzbiorami . Interesuje nas znalezienie sumy Minkowskiego .ZA
χX:{0,…,2n}→{0,1}
Niech będzie dyskretne splot i , a , wtedy i tylko wtedy, . Zatem można obliczyć w czasie poprzez dyskretne splotowanie za pomocą FFT.f
Czasami ważne jest znalezienie rzeczywistej pary i która sumuje się do x . A \ w A nazywany jest świadectwem z X , jeśli istnieją b \ B w taki sposób, że a + b = X . Funkcja w: A + B \ do A nazywa się funkcją świadka, jeśli w (x) jest świadkiem x .a ∈ A
Czy można obliczyć funkcję świadka w czasie O ( n log n )
O(nlogn) ?
źródło
Odpowiedzi:
Wyjaśniam tutaj, jak uzyskać losowy czas działania O ( n ∗ p o l y l o g n )O(n∗polylogn) . Potrzebujemy sekwencji obserwacji:
Świadczyć o wartości Vv jest para numerów ( , b ) ∈ x B(a,b)∈A×B , tak że + b = V . Niech P A ( x ) = ∑ i ∈ A x i i P B ( x ) zostaną zdefiniowane analogicznie. Zauważ, że współczynnik x v w P A ( x ) ∗ P B ( xa+b=v PA(x)=∑i∈Axi PB(x) xv ) to liczba świadków o wartości v .PA(x)∗PB(x) v
Załóżmy, v ma jeden świadka ( a , b ) ∈ A × B i rozważyć wielomian Q A ( x ) = Σ i ∈ i * x ı . Oczywiście współczynnik x v w Q A ( x ) ∗ P B ( x ) wynosi a , i jako taki, znamy teraz parę ( a , v - a )v (a,b)∈A×B QA(x)=∑i∈Ai∗xi xv QA(x)∗PB(x) a (a,v−a) i skończymy.
Skończyliśmy już ze sprawą, że jest jeden świadek. Rozważmy więc przypadek, w którym v ma k świadków ( a 1 , b 1 ) , … , ( a k , b k ) . Niech i ( k ) = ⌈ lg √v k (a1,b1),…,(ak,bk) k ⌉. Zauważ, że2i(k)-1≤√i(k)=⌈lgk−−√⌉ k ≤2 i ( k ) . Następnie pozwolićRj=(j,Bj)dlaj=1,...,m, dlam=O(logn)są losowymi próbki, tak, że każdy elementAjest Choosen do Aız prawdopodobieństwemp=1/2 I ( k ) . Prawdopodobieństwo, żev2i(k)−1≤k−−√≤2i(k) Rj=(Aj,Bj) j=1,…,m m=O(logn) A Ai p=1/2i(k) v zawiera jeden świadkiem w R j jest α = ( KRj 1 ) p2(1-p2)k-1, ponieważ świadkiem są rozłączne pary liczb (ponieważ suma każdej pary wynosiv). Łatwo jest sprawdzić, czyαjest stałą w(0,1)niezależną od wartościk. Jako taka, musi być z dużym prawdopodobieństwem, żeVjest pojedynczy świadkiem w jednej z próbekR1,...,Rm. Jako taki, obliczając dwa wielomiany związane z taką próbką, jak opisano powyżej, wα=(k1)p2(1−p2)k−1 v α (0,1) k v R1,…,Rm O ( n log n ) czas (na próbkę), używając FFT, możemy zdecydować o tym w stałym czasie.O(nlogn)
Prawie skończyliśmy. Oblicz powyższe losowe próbki dla rozdzielczości i = 1 , … , ⌈ lg n ⌉ . Dla każdej takiej rozdzielczości oblicz losowe próbki i powiązane wielomiany. Również wyliczy wielomianu dla A i B . To wstępne przetwarzanie naiwnie zajmuje O ( n log 3 n ) , ale podejrzewam, że przy nieco większej ostrożności współczynnik log n powinien być możliwy do usunięcia.i=1,…,⌈lgn⌉ A B O(nlog3n) logn
The algorithm: For every value vv , compute how many witness, say k, it has in constant time, by consulting the polynomial QA(x)∗PB(x)QA(x)∗PB(x) . Next, go to the relevant data-structure for i(k)i(k) . Then, it finds the random sample that has it as a single witness, and it extract the pair that is this witness in constant time.
O dziwo, czas wstępnego przetwarzania wynosi O ( n log 3 n ) , ale oczekiwany czas znalezienia samego świadka zajmuje tylko O ( n ) , ponieważ można zatrzymać poszukiwania, gdy tylko znajdzie się świadka. Sugeruje to, że ten algorytm powinien być możliwy do ulepszenia. W szczególności, dla i ( k ) ≪ lg n , generowane wielomiany są bardzo rzadkie i powinno być możliwe wykonanie znacznie szybszej FFT.O(nlog3n) O(n) i(k)≪lgn
źródło
Ok, I've been holding off since really Sariel should get credit for an answer, but I'm tired of waiting, so here is my cut at a near-linear randomized algorithm.
This blows up the running time by three logarithmic factors; probably that can be reduced.
źródło
This answer gives a determinstic O(n polylogn)O(n polylogn) algorithm.
It appears that Sariel and David's algorithm can be derandomized through an approach similar to this paper. [2] While going through the process I found there is a more general problem that implies this result.
Let f be the running time of calling the oracles, and assume f=Ω(m+n), then one can find the sets in deterministic O(fklogn polylog(m)) time. [1]
Now we can reduce the finding witness problem to 1-reconstruction problem. Here S1,…,S2n⊂{1,…,2n} where Si={a|a+b=i,a∈A,b∈B}.
Define the polynomials χQ(x)=∑i∈Qxi, IQ(x)=∑i∈Qixi
The coefficient for xi in χQχB(x) is |Si∩Q| and in IQχB(x) is ∑s∈Si∩Qs. Hence the oracles take O(nlogn) time per call.
This gives us an O(n polylog(n)) time deterministic algorithm.
[1] Yonatan Aumann, Moshe Lewenstein, Noa Lewenstein, Dekel Tsur: Finding witnesses by peeling. ACM Transactions on Algorithms 7(2): 24 (2011)
[2] Noga Alon, Moni Naor: Derandomization, witnesses for Boolean matrix multiplication and construction of perfect hash functions. Algorithmica 16(4-5) (1996)
źródło