欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中如何編寫一個(gè)數(shù)的n次方(冪運(yùn)算)?

 更新時(shí)間:2024年07月13日 15:14:30   作者:拼搏@  
本文介紹了使用pow函數(shù)和自定義for循環(huán)計(jì)算冪的O(n)時(shí)間復(fù)雜度方法,然后重點(diǎn)講解了快速冪算法的分治思想,以及從二進(jìn)制角度的解釋,包括如何通過位運(yùn)算和循環(huán)迭代實(shí)現(xiàn)高效計(jì)算,給出了Java代碼實(shí)現(xiàn)

本文介紹了使用pow函數(shù)和自定義for循環(huán)計(jì)算冪的O(n)時(shí)間復(fù)雜度方法,然后重點(diǎn)講解了快速冪算法的分治思想,以及從二進(jìn)制角度的解釋,包括如何通過位運(yùn)算和循環(huán)迭代實(shí)現(xiàn)高效計(jì)算,給出了Java代碼實(shí)現(xiàn),

一、算法簡介

1.使用pow函數(shù)和自定義的for循環(huán)的時(shí)間復(fù)雜度為O(n)

/**計(jì)算x的y次方**/
//1.使用Pow函數(shù)
double res = Math.pow(x,y);
//2.自定義for循環(huán)
double res=x;
for(int i=1;i<y;i++){
     res=res*x;
}

2.快速冪的時(shí)間復(fù)雜度為O(log n)

二、快速冪的思想

(1)從分冶的角度出發(fā),計(jì)算 x^{y}

①假設(shè)y為偶數(shù),即計(jì)算 3^{8}

3^{8}=3^{2*4}=9^{4}=9^{2*2}=81^{2}=6561^{1}

我們將指數(shù) y,每次劃分為 \frac{y}{2},上述式子不需要進(jìn)行8次循環(huán),而只需要三步即可完 成,注 3^{2*4}9^{2*2}是為了讓讀者好理解,而重復(fù)寫的。

②假設(shè)y為奇數(shù),即計(jì)算 3^{11}

3^{11}=3^{1+10}=3*3^{10}=3*9^{5}=3*9^{1+4}=3*9*81^{2}=3*9*6561^{1}

指數(shù)部分為奇數(shù)是可以化解成(1+偶數(shù))的形式的,這樣我們可以把指數(shù)為1的底 拿出來當(dāng)答案來乘,偶數(shù)部分同①繼續(xù)化解即可

偽代碼
    x=3,y=10,res=1
   while(指數(shù)y不等于0){
    if(指數(shù)y為奇數(shù)){
        res = res * x //提取底數(shù)出來,作為乘積
    }
    y=y/2 //指數(shù)二分
    x=x*x //底數(shù)平方

}

(2) 從二進(jìn)制的角度出發(fā)

如8的二進(jìn)制位:8=1000_{2};

二進(jìn)制轉(zhuǎn)十進(jìn)制:1000_{2}=1*2^3+0*2^2+0*2^1+0*2^0=8

那么3^8=3^{(1000)_{2}}=3^{1*2^3+0*2^2+0*2^1+0*2^0}=3^{0*2^0}*3^{0*2^1}*3^{0*2^2}*3^{1*2^3}(倒序?qū)?

觀察發(fā)現(xiàn):指數(shù)部分是由兩部分組成,第一部分是0001,第二部分2^0,2^1,2^2,2^3,發(fā)現(xiàn)2是循環(huán)增大的(用代碼x=x*x,循環(huán)迭代出來,但是否使用則看二進(jìn)制位是否為‘1’),由于二進(jìn)制要么為0要么為1(用代碼 y&1==1,來判斷)

再舉個(gè)詳細(xì)的例子(計(jì)算3^{11}):

11=1011

3^{11}=3^{1*2^{0}}*3^{1*2^{1}}*3^{0*2^{2}}*3^{1*2^{3}}=3^{1*1}*3^{1*2}*3^{0*4}*3^{1*8}

偽代碼:

 x=3,y=11,res=1

 while( (1011)y從尾往頭讀取){

  if( (y&1)==1){

     res=res*x;  //二進(jìn)制位不為0,則相乘

     //如第一個(gè)1:res=1*3,    

     //第二個(gè)1:res=res*3^2

     //第三個(gè)數(shù)為0:不相乘,但x是不斷平方的,此時(shí)是x^4

     //第四個(gè)數(shù)為1:res=res*3^8  ,注意哦,平方是在if后面

       }

    二進(jìn)制右移一位

    x=x*x; //依次迭代3^0,3^1,3^2,3^4,3^8................

 }

三、代碼實(shí)現(xiàn)

   public static double FastPow(int x,int y){
        double res= 1;
        while (y!=0){ 
            if(y%2 == 1){ //指數(shù)為奇數(shù),也可以利用位運(yùn)算:(y&1)==1 (與操作): 判斷 n 二進(jìn)制最右一位是否為 1
                res *= x;
            }
            y=y/2;  //指數(shù)循環(huán)二分,y>>=1 (移位操作): n 右移一位(可理解為刪除最后一位,即除以2)。
            x=x*x;  //底數(shù)平分

        }
        return res;
    }

 

到此這篇關(guān)于Java中如何編寫一個(gè)數(shù)的n次方(冪運(yùn)算)?的文章就介紹到這了,更多相關(guān)Java中的冪運(yùn)算(冪函數(shù))內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis連接數(shù)據(jù)庫實(shí)現(xiàn)雙表查詢

    mybatis連接數(shù)據(jù)庫實(shí)現(xiàn)雙表查詢

    本文主要介紹了mybatis連接數(shù)據(jù)庫實(shí)現(xiàn)雙表查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 關(guān)于spring?aop兩種代理混用的問題

    關(guān)于spring?aop兩種代理混用的問題

    這篇文章主要介紹了關(guān)于spring?aop兩種代理混用的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java利用時(shí)間格式生成唯一文件名的方法

    java利用時(shí)間格式生成唯一文件名的方法

    這篇文章主要介紹了java利用時(shí)間格式生成唯一文件名的方法,需要的朋友可以參考下
    2017-01-01
  • 基于Java代碼實(shí)現(xiàn)支付充值的通用流程

    基于Java代碼實(shí)現(xiàn)支付充值的通用流程

    本文給大家分享一段java核心代碼實(shí)現(xiàn)支付充值的通用流程,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-05-05
  • Java中的static--靜態(tài)變量你了解嗎

    Java中的static--靜態(tài)變量你了解嗎

    Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員。它屬于整個(gè)類所有,而不是某個(gè)對象所有,即被類的所有對象所共享。靜態(tài)成員可以使用類名直接訪問,也可以使用對象名進(jìn)行訪問,.下面我們來詳細(xì)了解一下吧
    2021-09-09
  • 如何在java中使用Jython

    如何在java中使用Jython

    這篇文章主要介紹了如何在java中使用Jython,由于項(xiàng)目中需要用到Java調(diào)用Python的腳本,來實(shí)現(xiàn)一些功能,就對jython做了一些了解,通過jython可以實(shí)現(xiàn)java對python腳本的調(diào)用,需要的朋友可以參考一下
    2022-03-03
  • Java使用EasyExcel動態(tài)添加自增序號列

    Java使用EasyExcel動態(tài)添加自增序號列

    本文將介紹如何通過使用EasyExcel自定義攔截器實(shí)現(xiàn)在最終的Excel文件中新增一列自增的序號列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java面試題沖刺第三天--集合框架篇

    Java面試題沖刺第三天--集合框架篇

    這篇文章主要為大家分享了最有價(jià)值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 深入了解Java核心類庫--Math類

    深入了解Java核心類庫--Math類

    本文是小編最新給大家整理的關(guān)于Java中Math類常用方法的知識,通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧,
    2021-07-07
  • 解決執(zhí)行maven命令時(shí)提示Process terminated的問題

    解決執(zhí)行maven命令時(shí)提示Process terminated的問題

    這篇文章主要介紹了解決執(zhí)行maven命令時(shí)提示Process terminated的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論