大整數乘法——分治算法的時間復雜度


  1.1原始的低效算法

  

  我們將n位(為方便討論簡化問題,我們假設n是2的冪)十進制整數(二進制也可以)X、Y都分為2段,每段的長度是n/2位。

 

  如果現在直接用遞歸或分治進行編程,其算法復雜度為: 

  其中:T(n)代表規模為n的問題,系數4表示問題縮小到T(n/2)時,包含四次乘法(上式中AC/AD/BC/BD四次)

這是在沒有進行優化情況下的算法復雜度(注意,此處雖然用了分治思想,但分治並不會降低算法復雜度,反而因其需要使用棧,增加了算法的空間復雜度)。

  1.2高效的算法(運用了數學的小技巧)

  

  我們知道,大整數乘法的基本運算是“乘法”運算,我們可以通過減少乘法的次數來降低算法復雜度!

  從公式中可以發現,原來有四個基本乘積項:AC、AD、BC、BD,現在只有三個基本乘積項:(A-B)(C-D)、AC、BD。乘法運算的數量降低了,下面看看其復雜度變化:

復雜度從n2降到n1.59

  1.3補充

  有的小伙伴可能會問了,如果不分成兩段,分成三段,四段甚至n段的時候時間復雜度會降低,結論是:

  

  在大整數乘法中,當把大整數分為2段時,算法時間復雜度最低n1.59

  隨着段數逐漸增加,算法的時間復雜度也隨之增加,當分段增加到n段時,算法時間復雜度退化到n2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM