Znalezienie świadka w minkowskiej sumie liczb całkowitych

16

Niech i będą podzbiorami . Interesuje nas znalezienie sumy Minkowskiego .ZAABB{0,,n}{0,,n}A+B={a+b | aA,bB}A+B={a+b | aA,bB}

χX:{0,,2n}{0,1}χX:{0,,2n}{0,1} jest charakterystyczną funkcją ifXXχX(x)={1 if xX0 otherwise

χX(x)={1 if xX0 otherwise

Niech będzie dyskretne splot i , a , wtedy i tylko wtedy, . Zatem można obliczyć w czasie poprzez dyskretne splotowanie za pomocą FFT.ffχ A χAχ BχB x A + B xA+Bf ( x ) > 0 f(x)>0A + B A+BO ( n log n )O(nlogn)

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 aAb B bBx xa AaAx xb B bBa + b = x a+b=xw : A + B Aw:A+BAw ( x ) w(x)xx

Czy można obliczyć funkcję świadka w czasie O ( n log n )O(nlogn) ?

Chao Xu
źródło
3
O(npolylogn)O(npolylogn) nie jest szczególnie trudne.
Sariel Har-Peled
2
Możesz użyć wyszukiwania binarnego. np. na dwa zestawy grubsza jednakowej wielkości i oblicz i ; sprawdź, który z tych jest w; i powtórzyć. To da ci coś takiego jak . AAAL,ARAL,ARAL+BAL+BAR+BAR+BxxO(nlg2n)O(nlg2n)
DW
@DW Można tylko znaleźć świadka dla pojedynczego , ale chcemy świadka dla każdego elementu w . (moje sformułowanie wydaje się niejasne, więc właśnie zaktualizowałem pytanie)xxA+BA+B
Chao Xu
Ale czy jesteś zainteresowany rozwiązaniem O (n polylog n)?
Sariel Har-Peled
@ SarielHar-Peled tak, interesuje mnie również deterministyczny algorytm O ( n p o l y l o g n )O(npolylogn) .
Chao Xu,

Odpowiedzi:

11

Wyjaśniam tutaj, jak uzyskać losowy czas działania O ( n p o l y l o g n )O(npolylogn) . Potrzebujemy sekwencji obserwacji:

  1. Ś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=vPA(x)=iAxiPB(x)xv) to liczba świadków o wartości v .PA(x)PB(x)v

  2. 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×BQA(x)=iAixixvQA(x)PB(x)a(a,va) i skończymy.

  3. 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 vk(a1,b1),,(ak,bk)k. Zauważ, że2i(k)-1i(k)=lgkk2 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)1k2i(k)Rj=(Aj,Bj)j=1,,mm=O(logn)AAip=1/2i(k)vzawiera jeden świadkiem w R j jest α = ( KRj1 ) 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(1p2)k1vα(0,1)kvR1,,RmO ( n log n ) czas (na próbkę), używając FFT, możemy zdecydować o tym w stałym czasie.O(nlogn)

  4. 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,,lgnABO(nlog3n)logn

  5. 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.

  6. 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

Sariel Har-Peled
źródło
12

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.

  • By choosing samples of n(1ϵ)in(1ϵ)i points, i=0,1,i=0,1,, you can get a logarithmic number of subproblems such that each sum from the original problem has constant probability of being represented uniquely in one of the subproblems (the one where the sampling cuts down the expected number of representations to near 1).
  • By repeating the sampling process a logarithmic number of times you can get all sums to have unique representations with high probability.
  • If you have a partition of AA and BB into two subsets, then by multiplying the numbers by four, adding 2 to the numbers in one of the subsets in AA, and adding 1 to the numbers in one of the subsets in BB, you can read off from the mod-4 values of the achievable sums which of the two subsets their summands come from.
  • By repeating the partition process a logarithmic number of times, using each bit position of the binary representations of the values or indices in the subproblems to select the partitions in each step, you can uniquely identify the summands of every uniquely-represented sum.

This blows up the running time by three logarithmic factors; probably that can be reduced.

David Eppstein
źródło
3
Ha ha ;). I was in the middle of writing it, and then went to lunch...
Sariel Har-Peled
5

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.

The kk-reconstruction problem

There are hidden sets S1,,Sn{1,,m}S1,,Sn{1,,m}, we have two oracles SizeSize and SumSum that take a query set QQ.

  1. Size(Q)Size(Q) returns (|S1Q|,|S2Q|,,|SnQ|)(|S1Q|,|S2Q|,,|SnQ|), the size of each intersection.
  2. Sum(Q)Sum(Q) returns (sS1Qs,sS2Qs,,sSnQs)(sS1Qs,sS2Qs,,sSnQs), the sum of elements in each intersection.

The kk-reconstruction problem asks one to find nn subsets S1,,Sn such that SiSi and |Si|=min(k,|Si|) for all i.

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,aA,bB}.

Define the polynomials χQ(x)=iQxi, IQ(x)=iQixi

The coefficient for xi in χQχB(x) is |SiQ| and in IQχB(x) is sSiQs. 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)

Chao Xu
źródło