在不損失精確度的情況下快速計算y = x^2
問題:
給
問題:給定一個輸入bignum x表示為無符號32 位元整數數組,盡快計算y = x^2盡可能不因乘法而損失精確度。
初始方法:問題作者提出的初始方法涉及計算 y = x*x 以消除多次乘法。然而,這有幾個缺點,包括:
這種方法可以顯著提高乘法的性能,因為它降低了時間複雜度O(n^2) 到O(n^log2(3))。
修改的 Schönhage-Strassen 乘法 (NTT):
Schönhage-Strassen 演算法,使用修改後NTT(數論乘法運算),可以進一步加速乘法運算。它依賴於在頻域中執行乘法。 但是,由於溢位問題,使用 NTT 有限制。 NTT 輸入/輸出向量大小受輸入 bignum 的最大允許大小限制。在問題作者提供的實作中,NTT 用於乘法和平方,根據運算元的大小具有不同的閾值。
結論:對於對於小數字,作者的快速平方方法是最好的選擇。對於較大的數字,Karatsuba 或 NTT 乘法變得更有效。透過各種優化,NTT 乘法在達到一定閾值後變得比 Karatsuba 更快。
未解決的問題:作者承認可能存在更有效率的演算法,被忽略了。需要進一步的研究和實驗來確定每個特定用例和資料大小範圍的最佳方法。以上是如何在不損失精度的情況下快速且準確地計算大數的平方?的詳細內容。更多資訊請關注PHP中文網其他相關文章!