Karatsuba算法(更快的乘法)

Karatsuba算法(更快的乘法)

25*63

傳統的算法:

A:20*60 B:5*3 C:20*3 D:60*5       答案E=A+B+C+D=1575

Karatsuba算法

A:將乘數拆分成幾個部分

25------2  5

63------6  3

B:將每個乘數的十位數彼此相乘

2*6=12

C:將每個乘數的個位數彼此相乘

5*3=15

D:將每個乘數的十位數和個位數相加

2+5=7

6+3=9

E:將上一步的相加結果相乘

7*9=63

F:用e步得到的結果去減b和c的步驟的結果

63-15-12=36

G:將上面的b,f,c的結果按照一定的秩序排列好,然後相加

                  12

               +    36

               +      15

              =   1575

後者看似步驟比較多,但其優勢在特大數相乘時就顯現出來了,主要體現在節省個位數之間相乘的次數上:當乘數的位數很多時,可以重複進行 Karatsuba過程,將原來的乘數拆分成更小的部分。所進行的拆分的次數越多,相比傳統算法,你就節省了越多次個位數之間的相乘。

賓夕法尼亞州立大學數學家 Martin Fürer 說道:“另外,比起豎式計算方法,你可以在學校裏提前一年學會這種方法,因爲這種方法更容易,你可以在線性的時間內快速完成運算,這幾乎和從右到往左閱讀數字一樣快”。Martin Fürer 在 2007 年也創造了當時世界上最快的乘法算法。在處理大數乘法時,可以重複進行 Karatsuba 過程,將原始數字拆分爲幾乎與數字的位數一樣多個部分。通過每一次拆分,你都可以將本需要許多許多次的乘法以需要的運算次數少的加法和減法來替代。新南威爾士大學的數學家,同時也是這篇新論文的共同作者之一 David Harvey 說:“Karatsuba 算法可以把一些乘法變成加法,而對於計算機來說加法會更快。”使用 Karatsuba 的方法,可以達到在 n 的 1.58 次方次個位數的乘法後,完成兩個 n 位數的乘數之間的相乘。然後在 1971 年,Arnold Schönhage 和 Volker Strassen 發表了一種能夠以 n×log n×log(log n)次個位數的相乘來完成大數相乘方法,其中 log n 是 n 的對數。而利用 Karatsuba 的方法進行兩個 10 億位數字之間的相乘時,則大約需要 165 萬億個額外的步驟.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章