Пусть
Пусть - дискретная свертка χ A и χ B , тогда x ∈ A + B тогда и только тогда, когда f ( x ) > 0 . Следовательно, A + B может быть вычислено за O ( n log n ) с помощью дискретной свертки через FFT.
Иногда важно выяснить фактическую пару и b ∈ B, которая суммируется с x . ∈ называется свидетельство о х , если существуют б ∈ B такое , что + Ь = х . Функция w : A + B → A называется функцией-свидетелем, если w ( x ) является свидетелем x .
Можно ли вычислить функцию-свидетель за ?
O(nlogn)
convolution
fft
Чао Сюй
источник
источник
Ответы:
Здесь я объясняю, как получить рандомизированное время выполнения. Нам нужна последовательность наблюдений:O(n∗polylogn)
Свидетель из величины представляет собой пару чисел ( , Ь ) ∈ × B таким образом, что + Ь = v . Пусть P A ( x ) = ∑ i ∈ A x i и P B ( x ) определены аналогично. Заметим, что коэффициент x v в P A ( x ) ∗ P B ( xv (a,b)∈A×B a+b=v PA(x)=∑i∈Axi PB(x) xv - число свидетелей для значения v .PA(x)∗PB(x) v
Предположим, что имеет единственный свидетель ( a , b ) ∈ A × B , и рассмотрим многочлен Q A ( x ) = ∑ i ∈ A i ∗ x i . Ясно, что коэффициент x v в Q A ( x ) ∗ P B ( x ) равен a , и теперь мы знаем пару ( a , v - a )v (a,b)∈A×B QA(x)=∑i∈Ai∗xi xv QA(x)∗PB(x) a (a,v−a) и мы сделали.
Итак, мы закончили с делом, что есть один свидетель. Итак, рассмотрим случай, когда имеет k свидетелей ( a 1 , b 1 ) , … , ( a k , b k ) . Пусть i ( k ) = ⌈ lg √v k (a1,b1),…,(ak,bk) . Заметим, что2i(k)-1≤√i(k)=⌈lgk−−√⌉ . Далее, пустьRj=(Aj,Bj), дляj=1,…,m, дляm=O(logn)случайные выборки, так что каждый элемент изAвыбирается в Aiс вероятностьюp=1/2 я ( к ) . Вероятность того, чтоV2i(k)−1≤k−−√≤2i(k) Rj=(Aj,Bj) j=1,…,m m=O(logn) A Ai p=1/2i(k) v имеет одного свидетеля в является α = ( kRj , поскольку свидетелем являются непересекающиеся пары чисел (поскольку сумма каждой пары равнаv). Нетрудно проверить, чтоαявляется константой в(0,1)независимо от значенияk. Таким образом, с высокой вероятностью должно быть, чтоvимеет одного свидетеля в одном из образцовR1,…,Rm. Таким образом, путем вычисления двух полиномов, связанных с таким образцом, как описано выше, вα=(k1)p2(1−p2)k−1 v α (0,1) k v R1,…,Rm O(nlogn) time (per sample), using FFT, we can decide this in constant time.
We are almost done. Compute the above random samples for resolutionsi=1,…,⌈lgn⌉ . For each such resolution compute the random samples and associated polynomials. Also, compute the associated polynomial for A and B . This preprocessing naively takes O(nlog3n) , but I suspect that being slightly more careful a logn factor should be removable.
The algorithm: For every valuev , compute how many witness, say k, it has in constant time, by consulting the polynomial QA(x)∗PB(x) . Next, go to the relevant data-structure for 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.
Strangely enough, the preprocessing time isO(nlog3n) , but the expected time to find the witness themselves take only O(n) time, since one can stop the search as soon as one find a witness. This suggests that this algorithm should be improveable. In particular, for i(k)≪lgn , the polynomials generated are very sparse, and one should be able to do much faster FFT.
источник
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.
источник
This answer gives a determinsticO(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.
Letf 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 to1 -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 forxi 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 anO(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)
источник