0

多くの if-else チェックを実行し、多くの時間を消費している次のコードがあります。

 while(i<1000) {

                if ( a == x1)
               {
                     if(b == y1)
                    {
                       array[i] = z1;
                    }
                    else if( b = y2)
                    {
                       array[i] = z2;
                    }
                    else if (b = z3);
                    {
                         array[i] = z3;
                    }
                    -
                    -
                    -
                    -
                    -
                   some 20 else --

                  }/*end of first if*/
                 else if (a == xx1)
                 {

                           if(b == yy1)
                          {
                               array[i] = zz1;
                          }
                          else (b == yyy3)
                         {
                              array[i] = zz2;
                         }
                         else ( b == yy4)
                        {
                           array[i] = zz3;
                        }
                          -
                          -
                          -
                          -
              -
             some 20 else --
        }
        else if(/*more conditions*/)
        {
            /* same as above with too many else loops */
        }
        -
        -
        -
        -
        -
        -
        -some 100 else-ifs
        -
        -
        -
        -
        -
        i++;
 }/*end of while*/

時間の消費を最小限に抑えるにはどうすればよいですか。 if else を switch(switch within the switch) に置き換えることはできますが、それでもいくつかのテーブル (2d-3d 配列) ではうまくいくと思いますが、数値 x1、y1、z1 、 zz3、zz1、zz2 は連続した数ではなく、10 億から 10 億の間に反復なしで存在するそれらの間に関係はありません。このルックアップ テーブルを実装するための任意の考え。Rgds、ソフト

4

1 に答える 1

0

(1) 数値が定数の場合は、case ステートメントに変更します。コンパイラは、可能な場合はジャンプ テーブルを出力する必要があります (制約が与えられている場合は、それができないため、ステップ 2 に進みます)。

(2) データが連続していない場合、ジャンプ テーブルは機能しません。ハッシュ テーブルを使用すると、データを連続させる (または十分に近づける) ことができます。ハッシュテーブルを検索するだけです。これは O(1) (またはそれに近い) である必要があります。ハッシュテーブルを作成する費用はあなたが負担する必要がありますが

ハッシュ テーブルのコードが必要な場合は C++ STL を使用できます。C を独自に作成するか、Web で実装を見つける必要がある場合は、この質問が役立つ場合があります。

于 2012-08-20T03:54:43.897 に答える