算法趣谈---karatsuba乘法 && 主定理

 

1678 * 8029  

=(16*100+78)*(80*100+29)

=16*80*10000 + (16*29+78*80)*100+78*29

(此时 Tn = 4T(n/2)+O(n))

(此时,我需要算出16*80,16*29,78*80,78*29)

=16*80*10000 + ((16+78)*(80+29)-16*80-78*29)*100+78*29

(此时近似 :Tn = 3T(n/2)+O(n))

(此时,我需要算出16*80,(16+78)*(80+29),78*29,

        感受下算(16+78)*(80+29)和算(16*29与78*80)的差距 ,貌似前者复杂度最大可能到(3*3),后者是2*2*2,所以后者貌似更优越,。。。。那karatsuba不就是扯淡了吗?非也,来看看如果题目是12345678*98765432呢?

(那么就是算(1234+5678)*(9876+5432) 和算(1234*5432与5678*9876),前者最大5*5,后者2*4*4,貌似前者开始优越了,所以。。。)

主定理: T(n) = aT(n/b)+c(n^d) 

 

算法趣谈---karatsuba乘法 && 主定理_第1张图片

W(总耗时) = \sum_{i=0}^{\log_{b}n} a^i*c*(\tfrac{n}{b^{i}})^{d}c*n^{d}*\sum_{i=0}^{\log_{b}n} (\tfrac{a}{b^{d}})^{i}

当a = b^d 时 ,W=O(n^{d}*\log_{b}n)

当a > b^d时,W=O(n^{\log_{b}a}})=O(a^{\log_{b}n})

当a < b^d时,W=O(n^{d})

算法趣谈---karatsuba乘法 && 主定理_第2张图片

你可能感兴趣的:(算法趣谈---karatsuba乘法 && 主定理)