快速冪的演算法理解

2021-08-13 02:38:39 字數 1015 閱讀 5733

一直聽說過快速冪,一直沒有用過。這下稍微有了點空閒時間,做個筆記自己看看。。

求乙個數的n次冪常見的是n次迴圈。例如。

double power(double base,int exponent)

while(exponent--)

return flag?1/total:total;

}

複雜度是o(n)。

快速冪演算法是怎樣的?

比如求5^13次方,分析如下:

①、13=1101(二進位制形式)

②、1101

2^3*1+ 2^2*1 +2^1*0 + 2^0*1

設算式為  a=5^(2^3),b=5^(2^2),c=5^(2^1),d= 5^(2^0)

對應的位依次為 1             1                0                1

化簡       

5^13=a   * b  * d

可以看到如果對應二進位制位為1.則其代表的算式會出現。並且d*d=c,c*c=b,b*b=a。

計算便可以這樣來看。

一開始是d,判斷d所屬未位置為1,乘上d。d-->c

判斷c所屬位置為0,不乘c,c-->b。

判斷b所屬位置為1,乘b,b-->a。

判斷a所屬位置為1,乘a,結束。

該性質具有一般性。因為整數都可以拆分成二進位制表示。

設base=d,ans=1。

從右到左依次從1101取值。如果為1,則ans*=base,否則不做變化。每輪更新base,由上面的性質知道base=base*base.則可以向上更新。

到此,所有困惑都明白了。得到如下**。

class solution 

while(exponent)

exponent>>=1;

base=base*base;//更新底數

}return flag?1/total:total;

}};

A 演算法理解

廣度優先 bfs 和深度優先 dfs 搜尋 深度優先搜尋,用俗話說就是不見棺材不回頭。演算法會朝乙個方向進發,直到遇到邊界或者障礙物,才回溯。一般在實現的時候,我們採用遞迴的方式來進行,也可以採用模擬壓棧的方式來實現。如下圖,s代表起點,e代表終點。我們如果按照右 下 左 上這樣的擴充套件順序的話,...

dijkstra 演算法理解

求有向圖中乙個源點到其他頂點的最短距離 自己的理解 剛開始的時候相當於有三個集合 v 頂點集合 s 已求得的最短距離頂點集合,假設求a到其他頂點的最短距離 s 剩餘頂點集合 d 儲存的是最短距離值 求一維陣列中的最小值的下標,這個陣列不包含已經求得的頂點 找出最小值下標後,放入到s中,然後求剩餘頂點...

KM演算法理解

二分圖帶權匹配與最佳匹配 什麼是二分圖的帶權匹配?二分圖的帶權匹配就是求出乙個匹配集合,使得集合中邊的權值之和最大或最小。而二分圖的最佳匹配則一定為完備匹配,在此基礎上,才要求匹配的邊權值之和最大或最小。二分圖的帶權匹配與最佳匹配不等價,也不互相包含。我們可以使用km演算法實現求二分圖的最佳匹配。方...