高速電力/高速電力行列

高速電力を有効式を簡略化することにより、計算量を減らすことができます。

 

8 5 ^例えば、どのような方法の簡略化においては、8×8×8×8×8であるなし。

高速電力インデックスアイデアは、それによって計算の数を減らすこと、分解することで、参照インデックスは、分離に二次システムです。

 

5ため、^ 2 ^ 2 SO 5 + 0 = 2、二つの文字列101にすることができます。

 

したがって、^ 5 = 8 * 8 ^ 1 8 ^ 4は、効果的計算の5倍に二回から計算。

INT quickpow(INT A、int型B){
     int型 RES = 1 ; // 結果を格納するための、
    INT ANS = A; // バイナリB乗格納するために使用される、
    しばらく(!B = 0 ){
         IF(B%以下2 == 1 
            RES * = ANS; 
        ANS * = ANS; 
        B / = 2 ; 
    } 
    戻りRES; 
}

 

これは、元の正方形の各サイクルは^ 2であるので、それは^ 2 * ^ 2に相当し、価値* = ANS ANSことに留意あります。

 

同じ思考力を行列と高速で、それは分解の使用を考えている、マトリックスの分解生成物は、マトリックス乗算が置換されている乗算があります。

 

ベクター<ベクトル<INT >>マルチ(ベクトル<ベクトル<INT >> M1、ベクトル<ベクトル<INT >> M2){ 
    ベクトル<ベクトル<INT >> M3。
    m3.resize(N)
    {(I ++; I <N INTがI = 0)するための
        M3 [I] .resize(N)
    } 
    ため(INT iは= 0、I <N; I ++){ 
        ため(INT J = 0であり、j <N; J ++){ 
            ための(int型のk = 0; K <N、K ++){ 
                M3 [I] [J] + = M1 [i]は[K] * M2 [K] [J]。
            } 
        } 
    } 
    M3を返します。
} 
 
ベクトル<ベクトル<INT >> quckmatrix(ベクトル<ベクトル<INT >> M){ 
    ベクトル<ベクトル<INT >> ANS = M。
    ベクトル<ベクトル<int型>> RES。
    res.resize(N)
        RES [i]は.resize(N)
    }
    用(INTがI = 0、I <N - 、I ++){ 
        //マトリックス
        。RES [I] [I] = 1; 
    } 
    ながら(K> 0){ 
        // Kバイナリ操作のために、
        IF(K = 2% 1 =){ 
            RES =マルチ(RES、ANS); 
        } 
        K / = 2; 
        ANS =マルチ(ANS、ANS); 
    } 
    戻りRES; 
}

  

 

おすすめ

転載: www.cnblogs.com/songlinxuan/p/12432042.html