(Saya mengerti deskripsi masalah sehingga angka-angka input dibatasi oleh konstanta, jadi saya tidak akan melacak ketergantungan pada terikat.)
Masalahnya dipecahkan dalam waktu linier dan ruang logaritmik menggunakan jumlah logaritma. Secara lebih rinci, algoritma ini adalah sebagai berikut:
- Menggunakan penghitung biner, hitung jumlah kemunculan dari setiap nomor input yang mungkin ada di kedua daftar.
Ini membutuhkan waktu , dan penghitung menggunakan ruang O ( log n ) , karena setiap penghitung dibatasi oleh nilai n .O ( n )O ( logn )n
Biarkan menjadi bilangan prima di bawah batas O ( 1 ) . Dengan mendistribusikan setiap penghitung untuk bilangan a ke faktor utama a (dengan kelipatan yang sesuai), dan mengurangkan penghitungan untuk satu daftar dari daftar lainnya, kami memperoleh yang berikut ini dalam waktu O ( log n ) :hal1, ... , hlmkO ( 1 )SebuahSebuahO ( logn )
Bilangan bulat menghitung dengan O ( log n ) bit sehingga masalahnya adalah setara dengan menentukan tanda Λ : = Σ k i = 1 β i log p i .β1, ... , βkO ( logn )Λ : = ¢ki = 1βsayacatatanhalsaya
Jika , jawab bahwa produknya sama.β1= ⋯ = βk= 0
Kalau tidak, . Dengan teorema Baker , kita dapat menurunkan batas
| | Λ | > 2 - C log n
untuk konstanta tertentu C . Dengan demikian, yang berikut ini dengan benar menghitung tanda Λ :Λ ≠ 0
| Λ | > 2- Ccatatann
CΛ
- Keluarkan tanda , di mana π i adalah perkiraan log p i to m : = C log n + k + 1 bit akurasi.∑ki = 1βsayaπsayaπsayacatatanhalsayam : = Ccatatann + k + 1
M.( m )mM.( m ) = O ( mcatatanm2O ( log∗m ))O ( m2)catatanhalsayamO ( M( m ) logm )∑sayaβsayaπsayaO ( M( m ) )O ( M( m ) logm ) ⊆ O ( lognp o l y (logcatatann ) )
O ( n )