求a的n次方的兩種演算法對比

2021-05-11 09:50:04 字數 887 閱讀 1402

一、演算法一:遞推相乘法

示例:public class testn

private static long f(int a,int n)

}解析:這種演算法累乘的次數比較多,當n比較大時,程式的執行效率不是很高。

二、演算法二:二進位制分解法

示例:public class testpower

private static long f(int a,int n)

a=a*a;

n=n>>1;

} return result;}}

解析:當用二進位制表示n時,每一位上的數或者是1或者是0。程式中,每次迴圈我們首先判斷n的最低位是1還是0,如果是1進行result*a運算,如果是0只進行a*a運算,然後將n右移一位繼續迴圈,直到n的值為0。這種演算法減少了相乘的次數,讀者朋友可以自己驗證一下,同樣是計算2的10次方,演算法一累乘的次數為10,而演算法二累乘的次數只為4。

三、兩種演算法的效率對比示例

示例:public class testpower

private static double f1(double a,int n) 

return result;}}

解析:執行上面的程式你會發現,「演算法一」執行需要十幾毫秒的時間,而「演算法二」的執行時間幾乎為0。我今天在網上看到某位仁兄的部落格,他對「二進位制分解法」的實現是自己額外的加了個棧,我覺得我的通過右移的方法比較好,感興趣的讀者可以去看一看他的實現方法,然後和我的進行一下對比。http://blog.csdn.net/cq8587/archive/2005/09/28/491677.aspx

求n次方的演算法

今天看交大的資料結構書,看到了乙個計算n次方的好演算法,它的時間複雜度只有logn,一般我們可能用迴圈,時間複雜度是o n 當這個演算法只有o logn 確切點說是o 6logn 演算法貼來.真高興 intpower intx,intn m n inty 1 while t 1 returny 原理...

求a的n次方

此題面試時常有 解答方法有以下三種 1。直接迭代求解,這個很簡單,複雜度o n 1。分治法。複雜度 logn a a n 2 a an 1 如下 intpower inta intn 3.此方法複雜度為 n的二進位制表示中最高位1的index 原理為 事先建立a的 2m m為 0,x 的表。指導找到...

求凸包的兩種演算法

凸包指的是乙個點集中的最小凸多邊形,且其包含了所有點集內的點 簡單地說,就是點集最外側的點構成的凸多邊形。求凸包有兩種方法 卷包裹法和graham scan演算法。1 卷包裹法 1 找出左下角的點 以橫縱座標為第一第二關鍵字,可以找x最小的,x相同則找y最小的 顯然這個點一定為凸包上的乙個頂點 2 ...