大整數乘法 分治演算法的時間複雜度

2022-06-12 03:18:12 字數 908 閱讀 3634

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

演算法時間複雜度 分治與遞迴

演算法時間複雜度之分治與遞迴 演算法是解決問題的辦法或法則,而 速度 就是演算法之魂,在計算機中所謂的 速度 就是 時間 空間。在大家初期的演算法學習中,往往感覺演算法這東西摸不著頭腦,會感覺 它為什麼會這麼用,這種用法究竟有什麼不同,我自己的解法就不好嗎?所以要想解決這種困惑,要想真正的理解演算法...

分治演算法 大整數乘法

用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。分析 用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。演算法描述 兩個十進位制的數 x y x a 10 n1 b y c 10 n2 d 則 x y a 10 n1 b c 10 n2 d 設乙個陣列,將其看做10000 進製...

大整數的乘法(遞迴方程 複雜度分析)

背景介紹 設x和y都是n位二進位制整數,現在需要計算它們的乘積xy,如果使用小學的思路設計演算法,那麼需要n2次乘法和n 1次加法,效率太低,那麼能夠設計出一種演算法能夠提高效率?方案一將n位二進位制整數x和y都分為兩段,每段的長度為n 2,如下圖所示 此時,x a 2n 2 bx a2 b x a...