Apakah mendeteksi perkembangan aritmatika "ganda" 3SUM-keras?

20

Ini terinspirasi oleh pertanyaan wawancara .

Kami diberi array bilangan bulat dan harus menentukan apakah ada yang berbeda sedemikian rupa sehingga i < j < ka1,,ani<j<k

  • akaj=ajai
  • kj=ji

yaitu, urutan dan keduanya dalam deret aritmatika.{ i , j , k }{ai,aj,ak}{i,j,k}

Ada algoritma yang mudah untuk ini, tetapi menemukan algoritma sub-kuadrat tampaknya sulit dipahami.O(n2)

Apakah ini masalah yang diketahui? Bisakah kita membuktikan 3SUM-kekerasan ini? (atau mungkin menyediakan algoritma sub-kuadrat?)

Jika Anda suka, Anda dapat mengasumsikan dan untuk beberapa konstanta dikenal . (Dalam masalah wawancara, ).a r + 1 - a rK K > 2 K = 90<a1<a2<...<anar+1arKK>2K=9

Knoothe
sumber

Jawaban:

12

Ini masalah terbuka.

Mungkin beberapa bentuk kekerasan 3SUM yang lemah dapat dibuktikan dengan mengadaptasi hasil dari makalah STOC 2010 Mihai Pătrașcu " Menuju Batas Bawah Polinomial untuk Masalah Dinamis ". Pertama, izinkan saya mendefinisikan urutan masalah yang terkait erat. Input untuk setiap masalah adalah array yang diurutkan dari bilangan bulat yang berbeda.A[1..n]

  • 3SUM: Apakah ada indeks berbeda sedemikian rupa sehingga ?A [ i ] + A [ j ] = A [ k ]i,j,kA[i]+A[j]=A[k]

  • Convolution3SUM: Apakah ada indeks sehingga ?A [ i ] + A [ j ] = A [ i + j ]i<jA[i]+A[j]=A[i+j]

  • Rata-rata: Apakah ada indeks berbeda sedemikian sehingga ?A [ i ] + A [ j ] = 2 A [ k ]i,j,kA[i]+A[j]=2A[k]

  • ConvolutionAverage: Apakah ada indeks sehingga ? (Ini masalah yang Anda tanyakan.)A [ i ] + A [ j ] = 2 A [ ( i + j ) / 2 ]i<jA[i]+A[j]=2A[(i+j)/2]

Dalam tesis PhD saya, saya membuktikan bahwa keempat masalah ini memerlukan waktu dalam model perhitungan pohon-keputusan yang hanya memungkinkan pertanyaan dari formulir "Is positif, negatif, atau nol? ", di mana adalah bilangan real (yang tidak bergantung pada input). Secara khusus, setiap algoritma 3SUM dalam model ini harus mengajukan pertanyaan "Apakah lebih besar, lebih kecil, atau sama dengan ?" setidaknya kali. Batas bawah itu tidak mengesampingkan algoritma subquadratic dalam model komputasi yang lebih umum - memang, dimungkinkan untuk mengurangi beberapa faktor logα A [ i ] + β A [ j ] + γ A [ k ] + δ α , β , γ , δ A [ i ] + A [ j ] A [ k ] Ω ( n 2 )Ω(n2)αA[i]+βA[j]+γA[k]+δα,β,γ,δA[i]+A[j]A[k]Ω(n2)dalam berbagai model RAM integer. Tetapi tidak ada yang tahu model seperti apa yang lebih umum akan membantu lebih signifikan.

Dengan menggunakan pengurangan hashing yang cermat, Pǎtrașcu membuktikan bahwa jika 3SUM membutuhkan waktu yang diharapkan, untuk fungsi apa pun , maka Convolution3SUM membutuhkan waktu yang diharapkan. Dengan demikian, masuk akal untuk mengatakan bahwa Convolution3SUM "lemah 3SUM-keras". Misalnya, jika Convolution3SUM dapat diselesaikan dalam waktu , maka 3SUM dapat diselesaikan dalam waktu waktu.f Ω ( n 2 / f 2 ( n f ( n ) ) ) O ( n 1.8 ) O ( n 1.9 )Ω(n2/f(n))fΩ(n2/f2(nf(n)))O(n1.8)O(n1.9)

Saya belum menjelaskan detailnya, tetapi saya berani bertaruh bahwa argumen paralel menyiratkan bahwa jika rata-rata membutuhkan waktu yang diharapkan, untuk fungsi apa pun , maka ConvolutionAverage memerlukan diharapkan waktu. Dengan kata lain, ConvolutionAverage adalah "lemah rata-rata".f Ω ( n 2 / f 2 ( n f ( n ) ) )Ω(n2/f(n))fΩ(n2/f2(nf(n)))

Sayangnya, tidak diketahui apakah Average sedang (bahkan lemah) 3SUM-hard! Saya menduga bahwa rata sebenarnya tidak 3SUM-keras, jika hanya karena batas bawah untuk rata-rata adalah jauh lebih sulit untuk membuktikan dari menurunkan menuju 3SUM .Ω(n2)Ω ( n 2 )Ω(n2)


Anda juga bertanya tentang kasus khusus di mana elemen array yang berdekatan berbeda dengan kurang dari beberapa tetap bilangan bulat . Untuk 3SUM dan Rata-rata, varian ini dapat diselesaikan dalam waktu menggunakan transformasi Fast Fourier sebagai berikut. (Pengamatan ini karena Raimund Seidel.) O ( n log n )KHAI(ncatatann)

Membangun sedikit vektor , di mana jika dan hanya jika integer muncul di masukan berbagai . Menghitung konvolusi dari dengan dirinya sendiri di waktu menggunakan FFTs. Array yang dihasilkan memiliki non-nol nilai dalam posisi th jika dan hanya jika beberapa sepasang elemen dalam sum untuk . Jadi, kita bisa mengekstrak daftar jumlah yang diurutkan dari dari konvolusi dalam waktu . Dari sini, mudah untuk menyelesaikan Rata-rata atau 3SUM dalam waktu .B [ i ] = 1 A [ 1 ] + i A B O ( K n log K n ) = O ( n log n ) j A 2 A [ 1 ] + j A [ i ] + A [ j ] O ( n ) O ( n )B[0 ..Kn]B[saya]=1SEBUAH[1]+sayaSEBUAHBHAI(KncatatanKn)=HAI(ncatatann)jSEBUAH2SEBUAH[1]+jSEBUAH[saya]+SEBUAH[j]HAI(n)HAI(n)

Tapi saya tidak tahu trik serupa untuk Convolution3SUM atau ConvolutionAverage!

JeffE
sumber