冪次方的四種快速取法(不使用pow函式)

2022-01-10 13:22:10 字數 1508 閱讀 3107

pow(x, n)

方法一:暴力法

思路

只需模擬將x相乘n次的過程。

如果 \(n < 0\),我們可以直接用 \(\dfrac\), \(-n\) 來替換 \(x , n\) 以保證 \(n \ge 0\)。該限制可以簡化我們的進一步討論。

但我們需要注意極端情況,尤其是負整數和正整數的不同範圍限制。

演算法

我們可以用乙個簡單的迴圈來計算結果。

class solution 

double ans = 1;

for (long long i = 0; i < n; i++)

ans = ans * x;

return ans;}};

複雜度分析方法二:遞迴快速冪演算法

複雜度分析方法三:迭代快速冪演算法

遞迴或迭代的快速冪實際上是實現同一目標的不同方式。

class solution 

double ans = 1;

double current_product = x;

for (long long i = n; i ; i /= 2)

current_product = current_product * current_product;

}return ans;}};

複雜度分析位運算實現pow(x,n)

根據暴力法的思路來看特別簡單,但通過位運算呢?

位運算技巧

我舉個例子吧,例如 n = 13,則 n 的二進位制表示為 1101, 那麼 m 的 13 次方可以拆解為:

\(m^ = m^ * m^ * m^\)。

我們可以通過 & 1和 >>1 來逐位讀取 1101,為1時將該位代表的乘數累乘到最終結果。直接看**吧,反而容易理解:

int pow(int n)

tmp *= tmp;

n = n >> 1;

}return sum;

}

時間複雜度近為 \(o(logn)\),而且看起來很

快速排序的四種優化方式

本文只講述概念。選用基準值 不在四種優化方式中 選用基準值有三種方式,選用的基準值較好,快速排序的效能也會較好。1.當資料量到達一定大小是,選擇使用插入排序或者堆排序 插入排序 當遞迴之後序列到達某一大小時,相對每個遞迴陣列中的資料元素較少 一般 16時 在使用遞迴顯然會增加遞迴的深度,所以可以選用...

v for的四種使用方式

在vue中使用v for遍歷陣列時v for最常見的一種使用方式。1 先在data中定義陣列 arr 1 2,3 4,5 2 在標籤中遍歷 for item,index in arr 數值 索引 物件陣列,其實說到底也是陣列,使用方式上和陣列一模一樣。1 先在data中定義陣列 objarr 2 在...

管道使用的四種特殊方式

程序之間通訊最簡單的方式 管道通訊 使用管道需要注意以下4種特殊情況 假設都是阻塞i o操作,沒有設定o nonblock標誌 如果所有指向管道寫端的檔案描述符都關閉了 管道寫端的引用計數等於0 而仍然有程序從管道的讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會返回0,就像讀到檔案末尾一...