“İki kat” aritmetik ilerleme 3SUM'u tespit etmek zor mu?


20

Bu bir röportaj sorusundan esinlenmiştir .

Biz tamsayı dizisi verilir ve varsa ayrı belirlemek zorunda i < j < k öylea1,,ani<j<k

  • akaj=ajai
  • kj=ji

yani diziler ve { i , j , k } aritmetik her ikisi de.{ai,aj,ak}{i,j,k}

Bunun için kolay bir algoritması vardır, ancak alt-karesel bir algoritma bulmak zor görünmektedir.O(n2)

Bu bilinen bir sorun mu? Bunun 3SUM sertliğini kanıtlayabilir miyiz? (veya belki ikinci dereceden bir algoritma sağlayabilir?)

İsterseniz, olduğunu varsayabilirsiniz . . . < Bir n ve bir r + 1 - Bir rK bazı bilinen sabiti K > 2 . (Görüşme probleminde, K = 9 ).0<a1<a2<...<anar+1arKK>2K=9

Yanıtlar:


12

Bu açık bir sorundur.

Mihai Pătrașcu'nun STOC 2010 " Dinamik Sorunlar için Polinom Alt Sınırlarına Doğru " makalesinin bir sonucunun uyarlanmasıyla muhtemelen 3SUM sertliğinin zayıf bir şekli kanıtlanabilir . İlk olarak, yakından ilişkili problemlerin bir dizisini tanımlayayım. Her problemin girdisi , farklı tamsayılardan oluşan sıralı bir dizisidir .A[1..n]

  • 3sum: orada farklı bir indeksi olan , öyle ki bir [ ı ] + Bir [ j ] = A [ k ] ?i,j,kA[i]+A[j]=A[k]

  • Convolution3SUM: orada bir indeksi olan böyle bir [ ı ] + Bir [ j ] = A [ i + j ] ?i<jA[i]+A[j]=A[i+j]

  • Ortalama: orada farklı bir indeksi olan bu tür bir [ ı ] + Bir [ j ] = 2 bir [ k ] ?i,j,kA[i]+A[j]=2A[k]

  • ConvolutionAverage: orada bir indeksi olan bu şekilde bir [ ı ] + Bir [ J ] = 2 bir [ ( i + j ) / 2 ] ? (Sorduğunuz sorun bu.)i<jA[i]+A[j]=2A[(i+j)/2]

Doktora tezimde, bu sorunların dördünün de , yalnızca "Is α A [ i ] + β A [ j ] + γ şeklinde sorgulara izin veren bir karar ağacı hesaplama modelinde zaman gerektirdiğini kanıtladım. bir [ k ] + δ pozitif, negatif veya sıfır?", burada α , β , γ , δ (giriş bağımlı olmayan) reel sayılardır. Özellikle, bu modeldeki herhangi bir 3SUM algoritması " A [ iΩ(n2)αA[i]+βA[j]+γA[k]+δα,β,γ,δ daha büyük, daha küçük ya da ona eşit , A [ k ] ", en az? Q ( n 2 ) katı Bu düşük hesaplama daha genel bir modelde subquadratic algoritmaları dışlamaz bağlanmış -. Gerçekten de, bununçeşitli tamsayı RAM modellerindebazı log faktörlerini tıraşetmek mümkündür,ancak kimse ne tür daha genel bir modelin daha önemli bir şekilde yardımcı olacağını bilmez.A[i]+A[j]A[k]Ω(n2)

Dikkatli bir karma azalma kullanarak, Pǎtraşcu 3sum gerektiriyorsa kanıtladı beklenen zaman, her işlev için f , daha sonra Convolution3SUM gerektirir Q'dan ( n 2 / f 2 ( n f ( n ) ) ) beklenen saati. Bu nedenle, Convolution3SUM'un "zayıf 3SUM-sert" olduğunu söylemek mantıklıdır. Örneğin, Convolution3SUM O ( n 1.8 ) zamanda çözülebilirse, 3SUM O (Ω(n2/f(n))fΩ(n2/f2(nf(n)))O(n1.8) zaman.O(n1.9)

Ayrıntıları temel almadım, ancak paralel bir argümanın Ortalama beklenen süre gerektiriyorsa, herhangi bir f fonksiyonu için , o zaman ConvolutionAverage Ω ( n 2 / f gerektirdiğini ima ettiğini iddia ediyorum. 2 ( n f ( n ) ) ) beklenen süre. Başka bir deyişle, ConvolutionAverage "zayıf Ortalama-zor".Ω(n2/f(n))fΩ(n2/f2(nf(n)))

Ne yazık ki, Ortalama (zayıf) 3SUM-sert olup olmadığı bilinmemektedir! Ben Ortalama aslında olduğundan şüpheleniyorsanız değil sadece çünkü eğer, 3sum sert Ortalama gitmekte düşük değerlerΩ(n2) olduğu ölçüde daha kanıtlamak için zor 3sum gitmekte düşük değerlerΩ(n2) .


Ayrıca, bitişik dizi öğelerinin bazı sabit tamsayı daha az farklı olduğu özel durumu da sorarsınız . 3SUM ve Ortalama için bu varyant, Fast Fourier dönüşümleri kullanılarak O ( n log n ) zamanında aşağıdaki gibi çözülebilir . (Bu gözlem Raimund Seidel'e bağlıdır.) KO(nlogn)

Bir bit vektör inşa , burada B : [ i ] = 1 ise ve tamsayı, yalnızca bir [ 1 ] + i , giriş dizi görünür A . Hesaplamak kıvrım arasında B kendisi ile O ( K n log K , n ) = O ( n log n ) FFTs kullanarak zamanı. Elde edilen dizi içinde sıfır olmayan bir değeri vardır jB[0..Kn]B[i]=1A[1]+iABO(KnlogKn)=O(nlogn)jinci pozisyon, ancak ve ancak, eğer eleman bir çift üzere toplam 2 A [ 1 ] + j . Böylece, A [ i ] + A [ j ] toplamlarının sıralanmış bir listesini O ( n ) zamanındaki evrişimden çıkarabiliriz . Buradan, Ortalama veya 3SUM değerini O ( n ) zamanda çözmek kolaydır .A2A[1]+jA[i]+A[j]O(n)O(n)

Ama Convolution3SUM veya ConvolutionAverage için benzer bir numara bilmiyorum!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.