Seja e subconjuntos de . Estamos interessados em encontrar a soma de Minkowski .
é uma função característica de se
Seja a convolução discreta de e , então se e somente se . Portanto, pode ser calculado em tempo por convolução discreta via FFT.
Às vezes, é importante descobrir o par real e que soma . é chamado testemunha de , se existir modo que . Uma função w: A + B \ a A é chamada função de testemunha se w (x) for uma testemunha de x .
É possível calcular uma função de testemunha no tempo ?
convolution
fft
Chao Xu
fonte
fonte
Respostas:
Aqui estou explicando como obter o tempo de execução aleatório . Precisamos de uma sequência de observações:O(n∗polylogn)
Uma testemunha de um valor é um par de números modo que . Deixe e ser definido de forma análoga. Observe que o coeficiente de em é o número de testemunhas que existem para o valor .( a , b ) ∈ A × B a + b = v P A ( x ) = ∑ i ∈ A x i P B ( x ) x v P A ( x ) ∗ P B ( x ) vv (a,b)∈A×B a+b=v PA(x)=∑i∈Axi PB(x) xv PUMA( x ) ∗ PB( X ) v
Suponha que tenha uma única testemunha e considere o polinômio . Claramente, o coeficiente de em é e, como tal, agora conhecemos o par e terminamos.( um , b ) ∈ Um × B Q A ( x ) = Σ i ∈ Um i * x i x v Q A ( x ) * P B ( x ) um ( um , v - um )v ( a , b ) ∈ A × B QUMA( x ) = ∑eu ∈ Ai * xEu xv QUMA( x ) ∗ PB( X ) uma ( a , v - a )
Então, acabamos com o caso de que há uma única testemunha. Portanto, considere o caso em que possui testemunhas . Seja . Observe que . Em seguida, sejam , para , para , amostras aleatórias, de modo que cada elemento de seja escolhido em com probabilidade . A probabilidade de ter uma única testemunha em ék ( a 1 , b 1 ) , … , ( a k , b k ) i ( k ) = ⌈ lg √v k ( a1 1, b1 1) , … , ( Umk, bk) 2i(k)-1≤√i ( k ) = ⌈ lgk--√⌉ Rj=(Aj,Bj)j=1,...,mm=S(logn)AAip=1/2 i ( k ) vRJα= ( k2i ( k ) - 1≤ k--√≤ 2i ( k ) Rj=(Aj,Bj) j=1,…,m m=O(logn) A Ai p=1/2i(k) v Rj α=(k1)p2(1−p2)k−1 , uma vez que a testemunha são pares de números separados (já que a soma de cada par é ). É fácil verificar se é uma constante em independente do valor de . Como tal, deve ser, com alta probabilidade, que tenha uma única testemunha em uma das amostras . Assim, calculando os dois polinômios associados a essa amostra, conforme descrito acima, em tempo (por amostra), usando a FFT, podemos decidir isso em tempo constante.α ( 0 , 1 ) k v R 1 , … , R m O ( n log n )v α (0,1) k v R1,…,Rm O(nlogn)
Estamos quase terminando. Calcule as amostras aleatórias acima para as resoluções . Para cada uma dessas resoluções, calcule as amostras aleatórias e os polinômios associados. Além disso, calcula-se o polinómio associado para e . Esse pré-processamento ingenuamente leva , mas suspeito que, sendo um pouco mais cuidadoso, um fator deve ser removível.A B O ( N log 3 n ) log ni=1,…,⌈lgn⌉ A B O(nlog3n) logn
O algoritmo: para cada valor , calcule quantas testemunhas, digamos, k, ela tem em tempo constante, consultando o polinômio . Em seguida, vá para a estrutura de dados relevante para . Em seguida, encontra a amostra aleatória que a possui como testemunha única e extrai o par que é essa testemunha em tempo constante.Q A ( x ) ∗ P B ( x ) i ( k )v QA(x)∗PB(x) i(k)
Curiosamente, o tempo de pré-processamento é , mas o tempo esperado para encontrar a testemunha leva apenas tempo, pois é possível interromper a pesquisa assim que encontrar uma testemunha. Isso sugere que esse algoritmo deve ser improvável. Em particular, para , os polinômios gerados são muito escassos e deve-se conseguir fazer FFT muito mais rápido.O ( n ) i ( k ) ≪ lg nO(nlog3n) O(n) i(k)≪lgn
fonte
Ok, estou adiando, já que realmente Sariel deve receber crédito por uma resposta, mas estou cansado de esperar, então aqui está o meu corte em um algoritmo aleatório quase linear.
Isso aumenta o tempo de execução por três fatores logarítmicos; provavelmente isso pode ser reduzido.
fonte
Esta resposta fornece um algoritmo determinístico .O(n polylogn)
Parece que o algoritmo de Sariel e David pode ser des randomizado através de uma abordagem semelhante a este artigo . [2] Durante o processo, descobri que há um problema mais geral que implica esse resultado.
Seja o tempo de execução dos oráculos e assuma , então é possível encontrar os conjuntos no tempo determinístico . [1]f = Ω ( m + n ) O ( f k log n p o l y L o g ( m ) )f f=Ω(m+n) O(fklogn polylog(m))
Agora podemos reduzir o problema da testemunha de localização para o problema de reconstrução. Aqui que .S 1 , … , S 2 n ⊂ { 1 , … , 2 n } S i = { a | a + b = i , a ∈ A , b ∈ B }1 S1,…,S2n⊂{1,…,2n} Si={a|a+b=i,a∈A,b∈B}
Defina os polinômios ,χQ(x)=∑i∈Qxi IQ(x)=∑i∈Qixi
O coeficiente para em ée em é . Portanto, os oráculos levam tempo por chamada.xi χQχB(x) |Si∩Q| IQχB(x) ∑s∈Si∩Qs O(nlogn)
Isso nos fornece um algoritmo determinístico de tempo .O(n polylog(n))
[1] Yonatan Aumann, Moshe Lewenstein, Noa Lewenstein, Dekel Tsur: Encontrando testemunhas descascando . Transações ACM nos algoritmos 7 (2): 24 (2011)
[2] Noga Alon, Moni Naor: Derandomization, testemunha da multiplicação da matriz booleana e construção de funções perfeitas de hash . Algoritmica 16 (4-5) (1996)
fonte