我已經實現了兩個字節數組的乘法,它工作正常。更確切地說,我需要將一個64字節的操作數與一個32字節的操作數相乘。字節數組Karatsuba乘法優化
我實現了它最簡單的方法:我做了一個雙循環,並計算每個數組中每個字節的產品。 因此,對於具體的值,它需要64 * 32 = 2048
步驟。
我試圖用Karatsuba
方法對其進行優化。 所以我按照以下方式進行:
a
的長度爲64字節,而b
的長度爲32字節。 a = p * 16^(32) + q
(所以p
和q
兼得的32個字節的長度)和計算:a * b = p * b * 16^(32) + q * b
(與之前描述了我的函數的產品計算)
我們在分裂a
。
我得到正確的結果,但它需要相同的時間來計算:兩個32字節數組的乘法:32 * 32 * 2 = 64 * 32 = 2048
。
我的問題是以下內容:使用Karatsuba
優化我的乘法,我應該完全遞歸編程嗎?以其他方式永遠不會更快?
謝謝您提前:) :)
爲什麼不使用'BigInteger'來表示大數? – isnot2bad
那麼,我編程它在Java測試我的電腦,但目的是要切換它在Java卡 – Raoul722
你通常應該遞歸編程,直到你得到足夠小的子問題,迭代解決它們會比遞歸解決它們更快(即對於Karatsuba而言,額外增加的成本將超過少一倍的收益)。對於Karatsuba乘法,截止點可能應該是三位或四位數字,但它可能會根據您的實現而有所不同(例如,這適用於Timsort的不同問題)。 –