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,但我仍然认为我可以用一些表(2d-3d数组)做得更好,但数字x1,y1,z1, zz3,zz1,zz2 不是连续的数字,它们之间没有关系,它们存在于 1 到 10 亿之间,没有重复。实现这个查找表的任何想法。Rgds,软软的

4

1 回答 1

0

(1) 如果数字是常量,则将其更改为 case 语句 - 如果可以的话,您的编译器应该输出一个跳转表(鉴于您的约束它不能 - 所以转到第 2 步)。

(2) 如果您的数据不连续,则跳转表将不起作用。您可以使用哈希表使您的数据连续(或足够接近)。现在只需搜索哈希表。这应该是 O(1) (或接近它)。尽管您必须承担创建哈希表的成本

如果您需要哈希表的代码,您可以使用 C++ STL,或者如果您需要 C 编写自己的代码或在网络上找到实现,这个问题可能会有所帮助。

于 2012-08-20T03:54:43.897 回答