比較pow x,y 的實現演算法

2021-10-09 09:10:46 字數 3372 閱讀 6280

用python,比較pow的實現演算法

主要對比遞迴和while迴圈。powcircle2函式和powcircle類似,powcircle2更容易理解一些。

from time import ctime

from math import

*def

powrecursion

(x,y):if

(y==0)

:return1if

(y==1)

:return x

t = powrecursion(x,

(int

)(y /2)

)if y&1==

1:return x * t * t

else

:return t * t

defpowcircle

(x,y)

: r=1if

(y&1==1

):r=x

y=y-

1 y = y>>

1while y>0:

x = x*x

y = y >>

1return r*x

defpowcircle2

(x,y)

: r=1if

(y&1==1

):r=x

y=y-

1 i=

2while ix = x*x

i = i*

2return r*x

defpowinternet

(a, b)

: r =

1while b >1:

if b &1==

1:#與運算一般可以用於取某位數,這裡就是取最後一位。

r *= a

a *= a

b = b >>

1#這裡等價於b//=2

return r * a

x =9

y =9

count=

5000000

defmain_recursion()

:print

('%s main_recursion start'

% ctime())

for i in

range

(count)

: powrecursion(x, y)

print

('%s main_recursion end\n'

% ctime())

defmain_pow()

:print

('%s main_pow start'

% ctime())

for i in

range

(count)

:pow

(x, y)

print

('%s main_pow end\n'

% ctime())

defmain_circle()

:print

('%s main_circle start'

% ctime())

for i in

range

(count)

: powcircle(x, y)

print

('%s main_circle end\n'

% ctime())

defmain_circle2()

:print

('%s main_circle2 start'

% ctime())

for i in

range

(count)

: powcircle2(x, y)

print

('%s main_circle2 end\n'

% ctime())

defmain_internet()

:print

('%s main_internet start'

% ctime())

for i in

range

(count)

: powinternet(x, y)

print

('%s main_internet end\n'

% ctime())

if __name__==

'__main__'

:print

('powrecursion(x, y)'

,powrecursion(x, y)

)print

('pow(x, y)'

,pow

(x, y)

)print

('powcircle(x, y)'

, powcircle(x, y)

)print

('powcircle2(x, y)'

, powcircle2(x, y)

)print

('powinternet(x, y)'

, powinternet(x, y)

) main_recursion(

) main_pow(

) main_circle(

) main_circle2(

) main_internet(

)

powrecursion(x, y) 387420489

pow(x, y) 387420489.0

powcircle(x, y) 387420489

powcircle2(x, y) 59049

powinternet(x, y) 387420489

fri sep 11 17:31:39 2020 main_recursion start

fri sep 11 17:31:46 2020 main_recursion end

fri sep 11 17:31:46 2020 main_pow start

fri sep 11 17:31:47 2020 main_pow end

fri sep 11 17:31:47 2020 main_circle start

fri sep 11 17:31:50 2020 main_circle end

fri sep 11 17:31:50 2020 main_circle2 start

fri sep 11 17:31:52 2020 main_circle2 end

fri sep 11 17:31:52 2020 main_internet start

fri sep 11 17:31:56 2020 main_internet end

1、遞迴的函式呼叫要消耗時間,比while要慢

2、python內部的pow介面最快,待進一步研究?!

pow x,y 函式的實現演算法

函式pow x,y 實現運算x y,即x的y次方,這裡x和y都為整數。這裡有演算法的原理剖析 演算法的基本思想是,減少乘法次數,重複利用結算結果,例如 x 4,如果逐個相乘的話,需要四次乘法。如果我們這樣分解 x 2 x 2 就只需要2兩次乘法,因為x 2的結果我們可以重複利用。所以我們最好做對稱的...

文字比較演算法的實現

這段時間很忙,呵呵,沒時間寫blog。前兩天看了乙個文字比較的演算法,演算法的思路我就不多說了,主要說下我的實現。演算法參考 文字比較演算法剖析 1 如何確定最大匹配率 文字比較演算法剖析 2 如何確定最優匹配路徑 我的實現步驟是 1 計算出所有可行的路徑 如下圖中,n l,r 所在的位置如果該位置...

幾種排序演算法的實現與比較

排序演算法比較 利用隨機函式產生n個隨機整數,利用直接插入排序 折半插入排序,起泡排序 快速排序 選擇排序 堆排序,基數排序七種排序方法進行排序 結果為由小到大的順序 並比較次數和交換次數。這裡是源 include using namespace std include include includ...