我有以下代码,它会执行很多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 if with switch(开关内的开关),但我仍然认为我可以做得更好 一些表(2d-3d数组),但数字x1,y1,z1,zz3,zz1,zz2不是连续数,并且它们之间没有关系它们存在于1到10亿之间,没有 repetetion.Any想要实现这个查找表。 RGDS, 软质皮
答案 0 :(得分:0)
(1)如果数字是常量,则将其更改为case语句 - 如果可以的话,编译器应该输出跳转表(给定你的约束它不能 - 所以转到第2步)。
(2)如果您的数据不连续,则跳转表将不起作用。您可以使用哈希表使数据连续(或足够接近)。现在只需搜索哈希表。这应该是O(1)(或接近它)。虽然您必须承担创建哈希表的费用
如果您需要哈希表的代码,您可以使用C ++ STL,或者如果您需要C编写自己的代码或在Web上查找实现,这question可能会有所帮助。