最適化行列線形再帰加速

最初の定義を見て:

 

あなたは、読むことができませんか?説明するサイクリングの考えとそう。

まず、行とマトリックス相の列の数だけが、第2の行列の乗算が理にかなっている間ことを知っている必要があります。

その後、要素C(i、j)の上に、製品として理解することができる〜A及びBの第i行j列上への答え。

したがって、加速時マトリックスは、I、J、Kを列挙することによって計算することができる場合。

列の数は、コードを達成することをここで有名なフィボナッチ証書:

#include <ビット/ STDC ++ H>
 の#define P十億七
 使用 名前空間STDを、
長い 長い ST [ 10 ] [ 10 ]。
長い 長い TMP [ 10 ] [ 10 ]。
長い 長い [ 10 ] [ 10 ]。
ボイドcheng1()
{ 
    memsetの(TMP、0はsizeof (TMP))。
    以下のためにint型 i = 1 ; iが<= 2 ; I ++ ){
         ためINT J = 1; J <= 2、J ++ ){ 
            TMP [ 1 ] [I] + =(ST [ 1 ] [J] * [J] [I])%のP。
            TMP [I] [J]%のP; 
        } 
    } 
    のためのint型 i = 1 ; iが= < 2 ; iが++ ){
         ためINT J = 1 ; J <= 2、J ++ ){ 
            ST [i] [j]は = TMP [I] [j]を。
        } 
    } 
} 
ボイドcheng2()
{ 
    memsetの(TMP、0はsizeof(TMP))。
    以下のためにint型 i = 1 ; iは= < 2 ; iは++ ){
         ためint型の J = 1 ; J <= 2、J ++ ){
             ためのint型のk = 1 ; K <= 2 ; kは++ ){ 
                TMP [I] [ J] + =([K] [J] * [I] [K])%のP。
                TMP [I] [J]%= P。
            } 
        } 
    } 
    のためにint型 i = 1 ; iは= < 2 I ++; {)
         のためINT J = 1 ; J <= 2、J ++ ){ 
            [I] [j]は = TMP [I] [j]を。
        } 
    } 
} 
ボイド JZKSM(長い N)
{ 
    ながら(N){
         場合(N - 1 )cheng1(); 
        cheng2(); 
        N / = 2 
    } 
} 
int型のmain()
{ 
    長い N。
    cinを >> N; 
    [ 1 ] [ 1 ] = 1、[1 ] [ 2 ] = 1、[ 2 ] [ 1 ] = 1 
    ST [ 1 ] [ 1 ] = 1、STは、[ 1 ] [ 2 ] = 1 
    JZKSM(N - 2 )。
    もし(N == 1 || N == 2 ){ 
        COUT << " 1 " リターン 0 ; 
    } 
    COUT << ST [ 1 ] [ 1 ]%のP。
}

 

おすすめ

転載: www.cnblogs.com/kamimxr/p/11498317.html