O(logn)O(1)nO(1)
a1,…,anb1,…,bn1/n
∏i=1n(x−ai)=∏i=1n(x−bi).
px0∏ n i = 1 ( x - a i ) - ∏ n i = 1 ( x - b i ) a i , b i n O ( 1 ) 2 n n O ( n ) = n O ( n ) O ( n ) Ω ( n ) n 2 p n∏i=1n(x0−ai)≡∏i=1n(x0−bi)(modp).
Jika array sama, tes akan selalu berlalu, jadi mari kita berkonsentrasi pada kasus di mana array berbeda. Secara khusus, beberapa koefisien adalah tidak nol. Karena memiliki magnitudo , koefisien ini memiliki magnitudo , dan memiliki paling banyak prime faktor ukuran . Ini berarti bahwa jika kita memilih set setidaknya bilangan prima ukuran setidaknya (katakanlah), maka untuk prime acak dari set ini akan berlaku dengan probabilitas setidaknya yang
∏ni=1(x−ai)−∏ni=1(x−bi)ai,binO(1)2nnO(n)=nO(n)O(n)Ω(n)n2pn2p1−1/n∏i=1n(x−ai)−∏i=1n(x−bi)≢0(modp).
Modulo
acak akan menyaksikan ini dengan probabilitas (karena polinomial derajat paling banyak memiliki paling banyak akar).
x0p1−n/p≥1−1/nnn
Kesimpulannya, jika kita memilih ukuran acak kira-kira antara sekumpulan setidaknya bilangan prima yang berbeda, dan modulo acak , maka ketika array tidak mengandung elemen yang sama, pengujian kami akan gagal dengan probabilitas . Menjalankan tes membutuhkan waktu karena cocok dengan jumlah kata mesin yang konstan.pn2n2x0p1−O(1/n)O(n)p
Menggunakan pengujian waktu polinomial waktu dan karena densitas bilangan prima ukuran kira-kira adalah , kita dapat memilih prime waktu secara acak . Memilih acak modulo dapat diimplementasikan dalam berbagai cara, dan dibuat lebih mudah karena dalam kasus kami, kami tidak perlu acak-benar seragam .n2Ω(1/logn)p(logn)O(1)x0px0
Kesimpulannya, algoritma kami berjalan dalam waktu , selalu menampilkan YA jika array berisi elemen yang sama, dan menghasilkan TIDAK dengan probabilitas jika array tidak mengandung elemen yang sama. Kita dapat meningkatkan probabilitas kesalahan untuk untuk setiap konstan .O(n)1−O(1/n)1−O(1/nC)C