Questo è un problema aperto.
Forse una forma debole di durezza 3SUM potrebbe essere dimostrata adattando un risultato del documento STOC 2010 di Mihai Pătrașcu " Verso limiti inferiori polinomiali per problemi dinamici ". Innanzitutto, vorrei definire una sequenza di problemi strettamente correlati. L'input per ciascun problema è un array ordinato di interi distinti.A [ 1 .. n ]
3SUM: ci sono indici distinti tali che A [ i ] + A [ j ] = A [ k ] ?io , j , kA [ i ] + A [ j ] = A [ k ]
Convolution3SUM: ci sono indici tali che A [ i ] + A [ j ] = A [ i + j ] ?i < jA [ i ] + A [ j ] = A [ i + j ]
Media: ci sono indici distinti tali che A [ i ] + A [ j ] = 2 A [ k ] ?io , j , kA [ i ] + A [ j ] = 2 A [ k ]
ConvolutionAverage: ci sono indici tali che A [ i ] + A [ j ] = 2 A [ ( i + j ) / 2 ] ? (Questo è il problema che stai chiedendo.)i < jA [ i ] + A [ j ] = 2 A [ ( i + j ) / 2 ]
Nella mia tesi di dottorato, ho dimostrato che tutti e quattro questi problemi richiedono tempo in un modello di calcolo dell'albero delle decisioni che consente solo query della forma "Is α A [ i ] + β A [ j ] + γ A [ k ] + δ positivo, negativo o zero? ", Dove α , β , γ , δ sono numeri reali (che non dipendono dall'input). In particolare, qualsiasi algoritmo 3SUM in questo modello deve porre la domanda "Is A [ iΩ ( n2)α A [ i ] + βA [ j ] + γA [ k ] + δα , β, γ, δ più grande, più piccolo o uguale a A [ k ] ? "Almeno Ω ( n 2 ) volte. Quel limite inferiore non esclude algoritmi subquadratici in un modello di calcolo più generale - anzi, è possibileradere alcuni fattori di login vari modelli di RAM interi, ma nessuno sa quale tipo di modello più generale potrebbe aiutare in modo più significativo.A [ i ] + A [ j ]A [ k ]Ω ( n2)
Usando un'attenta riduzione dell'hash, Pǎtrașcu ha dimostrato che se 3SUM richiede tempo previsto, per qualsiasi funzione f , Convolution3SUM richiede Ω ( n 2 / f 2 ( n ⋅ f ( n ) ) ) previsto tempo. Pertanto, è ragionevole affermare che Convolution3SUM è "debolmente 3SUM-difficile". Ad esempio, se Convolution3SUM può essere risolto in O ( n 1.8 ) tempo, allora 3SUM può essere risolto in O (Ω ( n2/ f( n ) )fΩ ( n2/ f2( n ⋅ f( n ) ) )O ( n1.8) tempo.O ( n1.9)
Non ho approfondito i dettagli, ma scommetto che un argomento parallelo implica che se Average richiede tempo previsto, per qualsiasi funzione f , allora ConvolutionAverage richiede Ω ( n 2 / f 2 ( n ⋅ f ( n ) ) ) tempo previsto. In altre parole, ConvolutionAverage è "debolmente medio-difficile".Ω ( n2/ f( n ) )fΩ ( n2/ f2(n ⋅ f( n ) ) )
Sfortunatamente, non è noto se Average sia (anche debolmente) 3SUM difficile! Ho il sospetto che media è in realtà non 3sum-duri, se non altro perché l' limite inferiore per mediaΩ( n2) è considerevolmente più difficile da dimostrare che l' limite inferiore per 3sumΩ (n2) .
Fare anche per il caso particolare in cui elementi dell'array adiacenti differiscono di meno di alcuni fisso intero . Per 3SUM e Average, questa variante può essere risolta nel tempo O ( n log n ) usando le trasformazioni Fast Fourier come segue. (Questa osservazione è dovuta a Raimund Seidel.) KO ( n logn )
Costruire un vettore di bit , dove B [ i ] = 1 se e solo se il numero intero A [ 1 ] + i appare nella matrice di ingresso A . Calcola la convoluzione di B con se stessa in O ( K n log K n ) = O ( n log n ) tempo usando gli FFT. L'array risultante ha un valore diverso da zero in jB [ 0 .. Kn ]B [ i ] = 1A [ 1 ] + iUNBO ( Kn logKn ) = O ( n logn )jposizione se e solo se una coppia di elementi in somma a 2 A [ 1 ] + j . Pertanto, possiamo estrarre un elenco ordinato di somme A [ i ] + A [ j ] dalla convoluzione nel tempo O ( n ) . Da qui, è facile risolvere Average o 3SUM in O ( n ) time.UN2 A [ 1 ] + jA [ i ] + A [ j ]O ( n )O ( n )
Ma non conosco un trucco simile per Convolution3SUM o ConvolutionAverage!