Pengiraan kuasa dua bignum yang pantas
Masalah:
Memandangkan dua nama besar yang diwakili sebagai tatasusunan dinamik DWORD yang tidak ditandatangani, hitung y = x^2 secepat mungkin tanpa ketepatan kerugian.
Konteks:
Masalah timbul dalam konteks mempercepatkan pembahagian bignum, di mana operasi segi empat sama adalah penting.
Soalan:
Cara mengira y = x^2 dengan cara yang paling cekap cara?
Jawapan:
Pendekatan Awal:
Pendekatan awal menggunakan pendaraban y = xx, mengelakkan berbilang pendaraban dengan mengurangkan NN pendaraban kepada (N 1)*(N/2) pendaraban.
Pendaraban Karatsuba:
Algoritma pendaraban Karatsuba digunakan untuk mengoptimumkan lagi operasi pendaraban. Ia menggunakan divide-and-conquer untuk mempercepatkan pendaraban dengan memecahkan nombor yang besar kepada bahagian yang lebih kecil.
Pengukuran Prestasi:
Ujian menunjukkan bahawa pendaraban Karatsuba yang dioptimumkan mengatasi prestasi O( N^2) algoritma pendaraban untuk nombor yang lebih besar (sekitar 32*98 bit).
Pendaraban Schönhage-Strassen yang diubah suai untuk pelaksanaan SQR:
Pendaraban Schönhage-Strassen yang diubah suai, dikenali sebagai FFT (Fast Fourier Transform), dilaksanakan untuk mempercepatkan operasi SQR . Walau bagaimanapun, disebabkan kehilangan ketepatan, ia dianggap tidak boleh digunakan.
Pengoptimuman NTT:
NTT (Number Theoretic Transform) digunakan untuk mengoptimumkan operasi pendaraban dan SQR. Ia lebih pantas daripada FFT tetapi memerlukan aritmetik modular dan dihadkan oleh saiz nombor.
Keadaan Semasa:
Pelaksanaan semasa menggunakan algoritma Karatsuba yang dioptimumkan untuk operasi SQR apabila saiz nombor melebihi ambang tertentu, dan pendekatan SQR pantas awal untuk nombor yang lebih kecil.
Luar biasa Soalan:
Penulis mengakui bahawa mungkin ada penyelesaian yang lebih remeh atau cekap yang telah diabaikan. Pencarian algoritma yang lebih baik diteruskan.
Atas ialah kandungan terperinci Bagaimana Kita Boleh Mencapai Petak Kuasa Bignum Terpantas Mungkin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!