算法分析的一個小例子--大數乘法

x,y爲兩個長度爲n位的整數,計算它們的積
X=A2^n/2+B ,Y=C2^n/2+D。這樣,X和Y的乘積爲:算法

XY=(A2^n/2+B)(C2^n/2+D)=AC*2^n+(AD+CB)2^n/2+BD
4次n/2位整數的乘法(AC,AD,BC和BD),以及3次不超過n位的整數加法(式中的加號),此外還要作2次移位(分別對應於式中乘2n和乘2n/2)。全部這些加法和移位共用O(n)步運算
T(N)=4T(N/2)+ O(N) T(n)=O(n^log4)=O(n^2)spa

改進:
XY=(A2^n/2+B)(C2^n/2+D)=AC*2^n+(AD+CB)2^n/2+BD
=AC2^n+[(A-B)(D-C)+AC+BD]*2^n/2+BD
需作3次n/2位整數的乘法(AC,BD和(A-B)(D-C)),6次加、減法和2次移位3d

T(N)=3T(N/2)+ O(N) T(n)=O(n^log3)=O(n^1.59)
T(N)爲長度爲n的乘法運算,可變爲3個長度爲n/2的乘法運算, O(N)把3個長度爲n/2的乘法運算結果組裝起來的時間(加法和位移操做)
畫遞歸樹更容易看出時間複雜度
T(N)=AT(N/B)+ O(F(N))blog

T(N)=3T(N/2)+ O(N)

第k級子問題數爲3^k,樹的高度爲logn,最後一級k=logn,子問題數爲3^logn,工做量爲O(3^logn)=O(n^log3)=O(n^1.59),由於每一級時間成本幾何增長,因此最後一級就是整個算法的時間複雜度遞歸

注:
證實O(3^logn)=O(n^log3)it

相關文章
相關標籤/搜索