На самом деле это зависит от отраслевого анализа. Если 99% ваших решений "opt1", этот код уже довольно хорош. Если 99% ваших решений "opt6", этот код ужасно плох.
Если вы часто получаете «opt6» и редко «opt1», поместите «opt6» в первое сравнение и упорядочите следующие сравнения в соответствии с частотой строк в вашем потоке данных выполнения.
Если у вас много параметров и все они имеют одинаковую частоту, вы можете отсортировать параметры и разбить их на двоичное дерево, например:
if (action < "opt20")
{
if( action < "opt10" )
{
if( action == "opt4" ) {...}
else if( action == "opt2" ) {...}
else if( action == "opt1" ) {...}
else if( action == "opt8" ) {...}
}
}
else
{
if( action < "opt30 )
{
}
else
{
if( action == "opt38" ) {...}
else if( action == "opt32" ) {...}
}
}
В этом примере деление диапазона уменьшает количество необходимых сравнений для «opt38» и «opt4» до 3. Таким образом, вы получаете log2 (n) +1 сравнений в каждой ветви. это лучше для равных частот вариантов.
Не делайте бинарную слюну до конца, в конце используйте 4-10 «нормальных» значений, если конструкции упорядочены по частоте опций. Последние два или три уровня в двоичном дереве не требуют значительных успехов.
Резюме
По крайней мере, есть две оптимизации для такого рода сравнений.
- Двоичные деревья решений
- Заказ из-за частоты опций
Двоичное дерево решений используется компилятором для больших конструкций switch-case. Но компилятор ничего не знает о частотах опции. Таким образом, упорядочение по частотам может быть преимуществом производительности при использовании распределительного шкафа, если один или два варианта встречаются гораздо чаще, чем другие. В данном случае это обходной путь:
if (action == "opt5") // Processing a frequent (99%) option first
{
}
else // Processing less frequent options (>1%) second
{
switch( action )
{
case "opt1": ...
case "opt2": ...
}
}
Внимание
Не оптимизируйте свой код, пока не выполните профилирование, и это действительно необходимо. Лучше всего использовать switch-case или else-если прямо, и ваш код остается чистым и читаемым. Если вы оптимизировали свой код, поместите несколько хороших комментариев в код, чтобы каждый мог понять этот безобразный мир кода. Через год вы не будете знать данные профилирования, и некоторые комментарии будут действительно полезны.