Misalkan saya memiliki dua daftar bilangan bulat positif dari manitude yang dibatasi, dan saya mengambil produk dari semua elemen dari setiap daftar. Apa cara terbaik untuk menentukan produk mana yang lebih besar?
Tentu saja saya dapat dengan mudah menghitung setiap produk, tetapi saya berharap ada pendekatan yang lebih efisien, karena jumlah digit dalam produk akan meningkat secara linear dengan jumlah syarat, sehingga seluruh perhitungan adalah kuadratik.
Jika saya menambahkan alih-alih mengalikan, saya bisa menggunakan "strategi ritsleting" dengan menambahkan entri secara bertahap dari daftar pertama dan mengurangi dari yang kedua, menghindari kebutuhan untuk menghitung jumlah keseluruhan (besar). Teknik analog untuk produk adalah dengan menjumlahkan logaritma dari entri, tetapi masalahnya sekarang adalah bahwa menghitung log membutuhkan penggunaan aritmatika yang tidak tepat. Kecuali ada beberapa cara untuk membuktikan kesalahan numerik tidak relevan?
sumber
Jawaban:
(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:
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, ... , hlmk O ( 1 ) Sebuah Sebuah O ( logn )
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
sumber