Трудно ли определить «двойные» арифметические прогрессии 3SUM?

20

Это вдохновлено вопросом интервью .

Нам дан массив целых чисел и мы должны определить, существуют ли различные i < j < k такие, чтоa1,,ani<j<k

  • akaj=ajai
  • kj=ji

т.е. последовательности и { i , j , k } находятся в арифметической прогрессии.{ai,aj,ak}{i,j,k}

Для этого существует простой алгоритм , но поиск субквадратичного алгоритма кажется неуловимым.O(n2)

Это известная проблема? Можем ли мы доказать 3SUM-твердость этого? (или, может быть, предоставить суб-квадратичный алгоритм?)

Если вам нравится, вы можете принять и что г + 1 - гK для некоторой известной постоянной K > 2 . (В задаче собеседования K = 9 ).0<a1<a2<...<anar+1arKK>2K=9

Knoothe
источник

Ответы:

12

Это открытая проблема.

A[1..n]

  • i,j,kA[i]+A[j]=A[k]

  • Convolution3SUM: существуют ли такие индексы , что A [ i ] + A [ j ] = A [ i + j ] ?i<jA[i]+A[j]=A[i+j]

  • Среднее: существуют ли разные индексы такие, что A [ i ] + A [ j ] = 2 A [ k ] ?i,j,kA[i]+A[j]=2A[k]

  • i<jA[i]+A[j]=2A[(i+j)/2]

Ω(n2)αA[i]+βA[j]+γA[k]+δα,β,γ,δ больше, меньше или равно A [ k ] ? ", По крайней мере, в Ω ( n 2 ) раз. Эта нижняя граница не исключает субквадратичные алгоритмы в более общей модели вычислений - действительно, это Можносократить некоторые логарифмические коэффициентыв различных целочисленных моделях оперативной памяти, но никто не знает, какая более общая модель поможет более значительно.A[i]+A[j]A[k]Ω(n2)

Ω(n2/f(n))fΩ(n2/f2(nf(n)))O(n1.8)O(n1.9)

Ω(n2/f(n))fΩ(n2/f2(nf(n)))

Ω(n2)Ω(n2)


KO(nlogn)

B[0..Kn]B[i]=1A[1]+iABO(KnlogKn)=O(nlogn)jA2A[1]+jA[i]+A[j]O(n)O(n)

Но я не знаю подобного трюка для Convolution3SUM или ConvolutionAverage!

JeffE
источник