典型的減小時間複雜度的做法是記住程式已經做的事情,避免在做重複的事情,比如使用n-1個迴圈乘法就是一直在做重複的乘x。通過記住x,x2,x4,…,等資料,可以大大減小時間的複雜度。程式如下:
按照遞迴程式執行,時間複雜度為o(log2n)。//包含標頭檔案
#include
#include
using
namespace std;
double
pow(
int x,
unsigned
int n)
在冪上做加法,相當於同底相乘,比如:
x2+2=x2*x2=x4
因此還有乙個辦法就是直接將冪轉換為二進位制數,從最後一位開始,依次代表x1, x2, x4, , ,xm的係數。若某位為0,則冪的分解中沒有該位代表的冪。例如:
3=2+1,3的二進位制表示為11,即,
x3=x2*x1,因此,使用陣列c儲存x,x2, x4, , ,然後根據二進位制選擇位上為1對應的陣列c的項進行相乘即可。
按照非遞迴的方法,時間複雜度為o(log2n)。#include
#include
#include
using
namespace std;
intpowers
(int x,
int n)
for(
int i=
0;isize()
;++i)
return poly;
}//轉為二進位制的程式
bool
dtob
(int
&x, vector<
int>
&bb)
bb.push_back
(x);
reverse
(bb.
begin()
, bb.
end())
;//順序需要換一下
return
true;}
}
歡迎批評指正。
兩種方法求x的n次冪
分析 在求乙個數x的n次冪時,可分為偶數和奇數兩種情況來討論,若x為偶數,則x n x n 2 x n 2,若果x為奇數,則x n x n 1 2 x n 1 2 x。它的基準情況 無需遞迴即能解出 很明顯,就是n 0和n 1時,n 0時,則任何數的0次冪均為1,n 1時,任何數的1次冪均為它本身。...
快速冪求x的n次方
o logn 的時間複雜度求x的n次方,x為自然數,n為整數?如果 power 5 為奇數,result儲存當前的多餘的乙個4,並在返回結果時一併與結果相乘。2 10 2 2 2 2 2 2 2 2 2 2 4 5 4 4 4 4 4 4 4 4 4 16 2 16 2 16 16 256 如果 p...
python實現pow函式(求n次冪,求n次方)
目錄實現 pow x,n 即計算 x 的 n 次冪函式。其中n為整數。pow函式的實現 leetcode 解法1 暴力法 不是常規意義上的暴力,過程中通過動態調整底數的大小來加快求解。如下 class solution def mypow self,x float,n int float judge...