0から算術を学び始める - 基本的なアルゴリズム(規則3.5)

  分割統治、「分割統治」の文字通りの解釈はより小さなサブ問題に同一または類似の部分問題は、副問題の2つ以上に複雑な問題である......最後のサブ問題が簡単になるまで直接的な解決策は、統合ソリューションは、元の問題の問題児であるソリューションです。コンピュータサイエンスでは、分割統治は DCを使用することです、それが重要なアルゴリズムと思いました。パーティションの方法は、このようなソートアルゴリズムとして効率的なアルゴリズムの多くの基礎(あるクイックソートマージソート)、フーリエ変換(高速フーリエ変換)などが挙げられます。

例:最大連続サブシーケンスと

溶液:配列を2つの等しい部分に分割され、最大右端点まで連続的かつ継続的な最大値、その最大連続配列が起点の左端部の各々に知られている場合、および

 

 次に図最大連続サブシーケンスのいずれかの全配列に示されるように最大連続し、左部、いずれかの最大連続の右半分のいずれかの左端点に連続最大値と右端の右端に、左の処理最大連続してスタート

各アリコート部分の処理に再び二つの部分に分けた後、この方法は、常にパーティションが分解され、各ブロックのサイズは1である知っています。

この問題は少ない時間の複雑さのアプローチを持っているので、このアプローチは、コードを与えられていません。

例2:チェス盤の問題。K

2 K * 2 Kの点が黒塗装され、全ての格子L字状のブロック(ブロックが重複することができない)、ホワイトボード上のプログラムの出力を構成します。なぜ4 のk番目の電力が3の倍数でなければなりません

 8×8のグリッドのために、それは、その場合、マーカーのみ4×4グリッドで、格子点が3 4 * 4をマークされていない4つの4×4のグリッドに分割されますL字型の位置での位相がなければならない、我々はマーカーを配置し、質問は4×4のグリッドとなり、各グリッド点は、4 * 4のそれぞれに対して、黒を持っていますグリッドは2に4つのグリッド再帰的プロセスに分かれている* 2

コード:

CONSTの INT N = 1E6の+ 5 INT A [ 100 ] [ 100 ];
 int型 CNTを= 1 ; 
 
ボイド F(int型 TR、int型 TC、INT DRは、int型 DC、INT フラグには){
     IF(フラグに== 1 のリターン;
     INT ++ CNT = T; // L型ドミノ数
    int型 S =フラグ/中2 ;   // 分割ボード
     // 左上を覆う
    IF(DR <+ S && DC TR <TC + S)// 特別この碁盤目
        F(TR、TC、DR、DC、S);
      { // いいえ特定ボックス
         // Tの右下カバーするLグリッド数の 
        [S- TR +を1。 [+ TC S-] 1。 ] = T ;
         // 残りの正方形カバー 
        F(TR、TC、TR + S-を1、TC + S- 1 、S); 
    } 
    // 右上隅を覆う
    IF(DR <&& DC TR + S> = TC + S)
        F(TR 、TC + S、DR、DC、S);
     {
         // Lグリッド数がTの左下隅カバーする 
        [S- TR + 1 ] [S + TCは] = Tは、
        F(TR、TC + S、 S- + TR 1、TC + S、S)。
    } 
    // 左下
    IF(DR> = TR + S && DC <TC + S)
        F(TR + S、TC、DR、DC、S);
     {
         // Lグリッド数は、Tの右上隅覆う 
        [TRをS +] [+ TC S- 1 ] = T; 
        F(TR + S、TC、TR S +、S- + TC 1 、S); 
    } 
    // 右下
    IF(DR> S && DC = TR +> = + TC S)
        F(TR + S、TC + S、DR、DC、S);
      {     // Tが左上カバーするLグリッド数の 
        [TR + S] [S + TC]は= Tは、
        F(TR S +、TC + S、S + TR、TC + S、S); 
    } 
 
 
}
 
 
INT メイン(){ 
    memsetの(0はsizeof (a)参照)。
    int型のk、DR、DC; 
    CIN >> K >> DR >> DC。
    INT TMP = POW(2 、k)は、
    F(00 、DR、DC、TMP)。
    以下のためにint型 i = 0 ; iはTMP <I ++は{)
         のためのint型 J = 0 ; J <TMP; J ++ ){ 
            COUT << [I] [J] << "  "を
        } 
        COUT << ENDL。
    } 
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/wz-archer/p/11718568.html